• David S. Miller's avatar
    pkt_sched: Fix queue quiescence testing in dev_deactivate(). · b9a3b110
    David S. Miller authored
    Based upon discussions with Jarek P. and Herbert Xu.
    
    First, we're testing the wrong qdisc.  We just reset the device
    queue qdiscs to &noop_qdisc and checking it's state is completely
    pointless here.
    
    We want to wait until the previous qdisc that was sitting at
    the ->qdisc pointer is not busy any more.  And that would be
    ->qdisc_sleeping.
    
    Because of how we propagate the samples qdisc pointer down into
    qdisc_run and friends via per-cpu ->output_queue and netif_schedule,
    we have to wait also for the __QDISC_STATE_SCHED bit to clear as
    well.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b9a3b110
sch_generic.c 17.4 KB