1
0
Fork 0
alistair23-linux/drivers/net/ppp
David Woodhouse 9a5d2bd99e ppp: Fix race condition with queue start/stop
Commit e675f0cc9a ("ppp: Don't stop and
restart queue on every TX packet") introduced a race condition which
could leave the net queue stopped even when the channel is no longer
busy. By calling netif_stop_queue() from ppp_start_xmit(), based on the
return value from ppp_xmit_process() but *after* all the locks have been
dropped, we could potentially do so *after* the channel has actually
finished transmitting and attempted to re-wake the queue.

Fix this by moving the netif_stop_queue() into ppp_xmit_process() under
the xmit lock. I hadn't done this previously, because it gets called
from other places than ppp_start_xmit(). But I now think it's the better
option. The net queue *should* be stopped if the channel becomes
congested due to writes from pppd, anyway.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-04-13 13:06:47 -04:00
..
Kconfig ppp: Move the PPP drivers 2011-08-27 00:58:26 -07:00
Makefile ppp: Move the PPP drivers 2011-08-27 00:58:26 -07:00
bsd_comp.c ppp: Move the PPP drivers 2011-08-27 00:58:26 -07:00
ppp_async.c ppp: Replace uses of <linux/if_ppp.h> with <linux/ppp-ioctl.h> 2012-03-04 20:41:38 -05:00
ppp_deflate.c ppp: Change copyright notices from ANU to me 2012-03-04 20:41:38 -05:00
ppp_generic.c ppp: Fix race condition with queue start/stop 2012-04-13 13:06:47 -04:00
ppp_mppe.c ppp: Move the PPP drivers 2011-08-27 00:58:26 -07:00
ppp_mppe.h ppp: Move the PPP drivers 2011-08-27 00:58:26 -07:00
ppp_synctty.c ppp: Replace uses of <linux/if_ppp.h> with <linux/ppp-ioctl.h> 2012-03-04 20:41:38 -05:00
pppoe.c ppp: Replace uses of <linux/if_ppp.h> with <linux/ppp-ioctl.h> 2012-03-04 20:41:38 -05:00
pppox.c ppp: Replace uses of <linux/if_ppp.h> with <linux/ppp-ioctl.h> 2012-03-04 20:41:38 -05:00
pptp.c ppp: Move ioctl definitions from if_ppp.h to new ppp-ioctl.h 2012-03-04 20:41:38 -05:00