• David Woodhouse's avatar
    ppp: Fix race condition with queue start/stop · 9a5d2bd9
    David Woodhouse authored
    Commit e675f0cc ("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: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9a5d2bd9
ppp_generic.c 69.5 KB