mac80211: fix probe response wait timing
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 19 May 2009 19:26:07 +0000 (21:26 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 22 May 2009 18:05:59 +0000 (14:05 -0400)
In "mac80211: split out and decrease probe wait time" I tried
to reduce the time waiting for a probe response, but failed to
take into account the case where we are detecting beacon loss
in software -- in that case we still wait the monitoring time
rather than the probe wait time. Fix this by refactoring the
mod_timer() calls in ieee80211_associated().

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

index b7f9c60..ac6883f 100644 (file)
@@ -1389,8 +1389,8 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata)
                ifmgd->flags |= IEEE80211_STA_PROBEREQ_POLL;
                ieee80211_send_probe_req(sdata, ifmgd->bssid, ifmgd->ssid,
                                         ifmgd->ssid_len, NULL, 0);
+               mod_timer(&ifmgd->timer, jiffies + IEEE80211_PROBE_WAIT);
                goto unlock;
-
        }
 
        if (time_after(jiffies, sta->last_rx + IEEE80211_PROBE_IDLE_TIME)) {
@@ -1399,15 +1399,16 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata)
                                         ifmgd->ssid_len, NULL, 0);
        }
 
+       if (!disassoc)
+               mod_timer(&ifmgd->timer,
+                         jiffies + IEEE80211_MONITORING_INTERVAL);
+
  unlock:
        rcu_read_unlock();
 
        if (disassoc)
                ieee80211_set_disassoc(sdata, true, true,
                                        WLAN_REASON_PREV_AUTH_NOT_VALID);
-       else
-               mod_timer(&ifmgd->timer, jiffies +
-                                     IEEE80211_MONITORING_INTERVAL);
 }