diff options
Diffstat (limited to 'net/mac80211/iface.c')
| -rw-r--r-- | net/mac80211/iface.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index d4c19a7773d..8664111d056 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -637,6 +637,18 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,  		ieee80211_configure_filter(local);  		break;  	default: +		mutex_lock(&local->mtx); +		if (local->hw_roc_dev == sdata->dev && +		    local->hw_roc_channel) { +			/* ignore return value since this is racy */ +			drv_cancel_remain_on_channel(local); +			ieee80211_queue_work(&local->hw, &local->hw_roc_done); +		} +		mutex_unlock(&local->mtx); + +		flush_work(&local->hw_roc_start); +		flush_work(&local->hw_roc_done); +  		flush_work(&sdata->work);  		/*  		 * When we get here, the interface is marked down.  |