mac80211: fix sw scan bracketing
authorJohannes Berg <johannes.berg@intel.com>
Fri, 18 Jun 2010 10:32:20 +0000 (12:32 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 18 Jun 2010 19:11:14 +0000 (15:11 -0400)
Currently, detection in hwsim and ath9k can
detect that two sw scans are in flight at the
same time, which isn't really true. It is
caused by a race condition, because the scan
complete callback is called too late, after
the lock has been dropped, so that a new scan
can be started before it is called.

It is also called too early semantically, as
it is currently called _after_ the return to
the operating channel -- it should be before
so that drivers know this is the operating
channel again.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/scan.c

index e1b0be7a57b9772ddb1c006793ca6a5929580aba..36eb6dd7c75e17fcc14d7e5466ffcdcac58fd8d7 100644 (file)
@@ -286,6 +286,8 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
        local->scanning = 0;
        local->scan_channel = NULL;
 
+       drv_sw_scan_complete(local);
+
        /* we only have to protect scan_req and hw/sw scan */
        mutex_unlock(&local->scan_mtx);
 
@@ -295,8 +297,6 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 
        ieee80211_configure_filter(local);
 
-       drv_sw_scan_complete(local);
-
        ieee80211_offchannel_return(local, true);
 
  done: