|
@@ -314,6 +314,7 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
|
|
|
bool was_scanning = local->scanning;
|
|
|
struct cfg80211_scan_request *scan_req;
|
|
|
struct ieee80211_sub_if_data *scan_sdata;
|
|
|
+ struct ieee80211_sub_if_data *sdata;
|
|
|
|
|
|
lockdep_assert_held(&local->mtx);
|
|
|
|
|
@@ -373,7 +374,16 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
|
|
|
|
|
|
ieee80211_mlme_notify_scan_completed(local);
|
|
|
ieee80211_ibss_notify_scan_completed(local);
|
|
|
- ieee80211_mesh_notify_scan_completed(local);
|
|
|
+
|
|
|
+ /* Requeue all the work that might have been ignored while
|
|
|
+ * the scan was in progress; if there was none this will
|
|
|
+ * just be a no-op for the particular interface.
|
|
|
+ */
|
|
|
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
|
|
+ if (ieee80211_sdata_running(sdata))
|
|
|
+ ieee80211_queue_work(&sdata->local->hw, &sdata->work);
|
|
|
+ }
|
|
|
+
|
|
|
if (was_scanning)
|
|
|
ieee80211_start_next_roc(local);
|
|
|
}
|