• Herbert Xu's avatar
    [NET]: Fix possible dev_deactivate race condition · ce0e32e6
    Herbert Xu authored
    The function dev_deactivate is supposed to only return when
    all outstanding transmissions have completed.  Unfortunately
    it is possible for store operations in the driver's transmit
    function to only become visible after dev_deactivate returns.
    
    This patch fixes this by taking the queue lock after we see
    the end of the queue run.  This ensures that all effects of
    any previous transmit calls are visible.
    
    If however we detect that there is another queue run occuring,
    then we'll warn about it because this should never happen as
    we have pointed dev->qdisc to noop_qdisc within the same queue
    lock earlier in the functino.
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ce0e32e6
sch_generic.c 14.7 KB