On Tue, 2009-02-03 at 10:09 +0530, Vasanthakumar Thiagarajan wrote: > There is no point having the bss information of currently associated AP > when the AP is detected to be out of range. Seems sane to me. There are a few other places I think where we hold on to the bss info way too long, in fact, we hold on to it _forever_ most of the time. > Signed-off-by: Vasanthakumar Thiagarajan <vasanth@xxxxxxxxxxx> > --- > net/mac80211/mlme.c | 18 ++++++++++++++++-- > 1 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c > index 9d51e27..945c10d 100644 > --- a/net/mac80211/mlme.c > +++ b/net/mac80211/mlme.c > @@ -1042,6 +1042,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata, > struct ieee80211_local *local = sdata->local; > struct sta_info *sta; > int disassoc; > + bool remove_bss = false; > > /* TODO: start monitoring current AP signal quality and number of > * missed beacons. Scan other channels every now and then and search > @@ -1067,6 +1068,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata, > "range\n", > sdata->dev->name, ifsta->bssid); > disassoc = 1; > + remove_bss = true; > } else > ieee80211_send_probe_req(sdata, ifsta->bssid, > ifsta->ssid, > @@ -1086,12 +1088,24 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata, > > rcu_read_unlock(); > > - if (disassoc) > + if (disassoc) { > ieee80211_set_disassoc(sdata, ifsta, true, true, > WLAN_REASON_PREV_AUTH_NOT_VALID); > - else > + if (remove_bss) { > + struct ieee80211_bss *bss; > + > + bss = ieee80211_rx_bss_get(local, ifsta->bssid, > + local->hw.conf.channel->center_freq, > + ifsta->ssid, ifsta->ssid_len); > + if (bss) { > + atomic_dec(&bss->users); > + ieee80211_rx_bss_put(local, bss); > + } > + } > + } else { > mod_timer(&ifsta->timer, jiffies + > IEEE80211_MONITORING_INTERVAL); > + } > } > >
Attachment:
signature.asc
Description: This is a digitally signed message part