• Emmanuel Grumbach's avatar
    mac80211: synchronize_net() before flushing the queues · 14f2ae83
    Emmanuel Grumbach authored
    When mac80211 disconnects, it drops all the packets on the
    queues. This happens after the net stack has been notified
    that we have no link anymore (netif_carrier_off).
    netif_carrier_off ensures that no new packets are sent to
    xmit() callback, but we might have older packets in the
    middle of the Tx path. These packets will land in the
    driver's queues after the latter have been flushed.
    Synchronize_net() between netif_carrier_off and drv_flush()
    will fix this.
    
    Note that we can't call synchronize_net inside
    ieee80211_flush_queues since there are flows that call
    ieee80211_flush_queues and don't need synchronize_net()
    which is an expensive operation.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    [reword comment to be more accurate]
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    14f2ae83
mlme.c 140 KB