mac80211: internally clear failed scans properly
authorJohannes Berg <johannes@sipsolutions.net>
Thu, 23 Apr 2009 08:38:26 +0000 (10:38 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 6 May 2009 19:14:29 +0000 (15:14 -0400)
When the IBSS code wants to scan, but that fails, we can
get stuck in a situation where you can never scan again.
Fix this by properly notifying ourselves when the scan
request has failed.

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

index 895f4854760caa6243740fbb8e0ebeb0ccd4a1d2..9fe1f937e0b41025b40c3e2389c6b6cda86b63ad 100644 (file)
@@ -439,7 +439,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
        memcpy(sdata->local->int_scan_req.ssids[0].ssid,
               ifibss->ssid, IEEE80211_MAX_SSID_LEN);
        sdata->local->int_scan_req.ssids[0].ssid_len = ifibss->ssid_len;
-       ieee80211_request_scan(sdata, &sdata->local->int_scan_req);
+       if (ieee80211_request_scan(sdata, &sdata->local->int_scan_req))
+               ieee80211_scan_failed(sdata->local);
 }
 
 static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
@@ -560,7 +561,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
                       ifibss->ssid, IEEE80211_MAX_SSID_LEN);
                local->int_scan_req.ssids[0].ssid_len =
                        ifibss->ssid_len;
-               ieee80211_request_scan(sdata, &local->int_scan_req);
+               if (ieee80211_request_scan(sdata, &local->int_scan_req))
+                       ieee80211_scan_failed(local);
        } else if (ifibss->state != IEEE80211_IBSS_MLME_JOINED) {
                int interval = IEEE80211_SCAN_INTERVAL;