Marek Michalkiewicz <marekm@amelek.gda.pl> wrote:
>
> Starting with recent 2.4.19 and 2.4.20 kernels, when any
> one (or both) of my two permanent PPP connections goes
> down (usually due to the ISP rebooting their equipment),
> quite often something bad happens.
>
> Dec 31 16:31:52 alf kernel: PPPIOCDETACH file->f_count=3
> Dec 31 16:31:52 alf kernel: PPPIOCDETACH file->f_count=3
I don't know the cause of this, but this patch should let
pppd continue to work:
--
Debian GNU/Linux 3.0 is out! ( http://www.debian.org/ )
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
Index: sys-linux.c
===================================================================
RCS file: /var/cvs/snwb/packages/ppp/pppd/sys-linux.c,v
retrieving revision 1.1.1.1
retrieving revision 1.6
diff -u -r1.1.1.1 -r1.6
--- sys-linux.c 2002/07/25 03:42:01 1.1.1.1
+++ sys-linux.c 2002/10/14 01:53:01 1.6
@@ -531,10 +531,21 @@
if (new_style_driver) {
close(ppp_fd);
ppp_fd = -1;
- if (!looped && ifunit >= 0 && ioctl(ppp_dev_fd, PPPIOCDETACH) < 0)
- error("Couldn't release PPP unit: %m");
if (!multilink)
remove_fd(ppp_dev_fd);
+ if (!looped && ifunit >= 0 && ioctl(ppp_dev_fd, PPPIOCDETACH) < 0) {
+ int flags;
+
+ error("Couldn't release PPP unit: %m");
+ close(ppp_dev_fd);
+ ppp_dev_fd = open("/dev/ppp", O_RDWR);
+ if (ppp_dev_fd < 0)
+ fatal("Couldn't open /dev/ppp: %m");
+ flags = fcntl(ppp_dev_fd, F_GETFL);
+ if (flags == -1
+ || fcntl(ppp_dev_fd, F_SETFL, flags | O_NONBLOCK) == -1)
+ warn("Couldn't set /dev/ppp to nonblock: %m");
+ }
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Tue Jan 07 2003 - 22:00:14 EST