mac80211: Check pending scan request after having processed mgd work
PATCH 1/1 mac80211: Check pending scan request after having processed mgd work
When the queued management work items are processed in ieee80211_sta_work() an item could be removed. This could change the anybusy from true to false, so we better check whether we can start a new scan only after having processed the pending work first.
Signed-off-by Jouni Malinen <[email protected]>
Acked-by Johannes Berg <[email protected]>
--- net/mac80211/mlme.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-)
net/mac80211/mlme.c +12 -16
@@ -2123,25 +2123,9 @@ static void ieee80211_sta_work(struct wo } } -list_for_each_entry (wk, &ifmgd->work_list, list) { -if (wk->state !=IEEE80211_MGD_STATE_IDLE ) { - anybusy = true; -break ; - } - }ieee80211_recalc_idle (local); -if (!anybusy) { -mutex_unlock (&ifmgd->mtx); - -if (test_and_clear_bit (IEEE80211_STA_REQ_SCAN , &ifmgd->request)) -ieee80211_queue_delayed_work (&local->hw, - &local->scan_work, -round_jiffies_relative (0 )); -return ; - } -list_for_each_entry_safe (wk, tmp, &ifmgd->work_list, list) {if (time_is_after_jiffies (wk->timeout)) {/*
@@ -2187,6 +2171,18 @@ static void ieee80211_sta_work(struct wo } } +list_for_each_entry (wk, &ifmgd->work_list, list) { +if (wk->state !=IEEE80211_MGD_STATE_IDLE ) { + anybusy = true; +break ; + } + } +if (!anybusy && +test_and_clear_bit (IEEE80211_STA_REQ_SCAN , &ifmgd->request)) +ieee80211_queue_delayed_work (&local->hw, + &local->scan_work, +round_jiffies_relative (0 )); +mutex_unlock (&ifmgd->mtx);list_for_each_entry_safe (wk, tmp, &free_work, list) {
Signature · 1 line
Jouni Malinen PGP id EFC895FA