diff options
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r-- | net/mac80211/main.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 522fe6176485..ebdec7106d63 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -548,6 +548,14 @@ static int ieee80211_stop(struct net_device *dev) | |||
548 | memset(sdata->u.sta.bssid, 0, ETH_ALEN); | 548 | memset(sdata->u.sta.bssid, 0, ETH_ALEN); |
549 | del_timer_sync(&sdata->u.sta.timer); | 549 | del_timer_sync(&sdata->u.sta.timer); |
550 | /* | 550 | /* |
551 | * If the timer fired while we waited for it, it will have | ||
552 | * requeued the work. Now the work will be running again | ||
553 | * but will not rearm the timer again because it checks | ||
554 | * whether the interface is running, which, at this point, | ||
555 | * it no longer is. | ||
556 | */ | ||
557 | cancel_work_sync(&sdata->u.sta.work); | ||
558 | /* | ||
551 | * When we get here, the interface is marked down. | 559 | * When we get here, the interface is marked down. |
552 | * Call synchronize_rcu() to wait for the RX path | 560 | * Call synchronize_rcu() to wait for the RX path |
553 | * should it be using the interface and enqueuing | 561 | * should it be using the interface and enqueuing |