From: Johannes Berg <johannes@sipsolutions.net>
To: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
Subject: Re: [PATCH] mac80211: Free current bss information in few places where we don't need it any more
Date: Wed, 04 Feb 2009 15:23:00 +0100 [thread overview]
Message-ID: <1233757380.3992.11.camel@johannes.local> (raw)
In-Reply-To: <1233752328-6918-1-git-send-email-vasanth@atheros.com>
[-- Attachment #1: Type: text/plain, Size: 5324 bytes --]
On Wed, 2009-02-04 at 18:28 +0530, Vasanthakumar Thiagarajan wrote:
> Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Looks good to me.
Acked-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> net/mac80211/ieee80211_i.h | 2 ++
> net/mac80211/mlme.c | 38 +++++++++++++++++++++-----------------
> net/mac80211/scan.c | 13 +++++++++++++
> 3 files changed, 36 insertions(+), 17 deletions(-)
>
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index eaf3603..5a1f19a 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -955,6 +955,8 @@ ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq,
> u8 *ssid, u8 ssid_len);
> void ieee80211_rx_bss_put(struct ieee80211_local *local,
> struct ieee80211_bss *bss);
> +void ieee80211_rx_bss_remove(struct ieee80211_sub_if_data *sdata, u8 *bssid,
> + int freq, u8 *ssid, u8 ssid_len);
>
> /* interface handling */
> int ieee80211_if_add(struct ieee80211_local *local, const char *name,
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 57967d3..91c9a5a 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -840,6 +840,14 @@ static void ieee80211_direct_probe(struct ieee80211_sub_if_data *sdata,
> sdata->dev->name, ifsta->bssid);
> ifsta->state = IEEE80211_STA_MLME_DISABLED;
> ieee80211_sta_send_apinfo(sdata, ifsta);
> +
> + /*
> + * Most likely AP is not in the range so remove the
> + * bss information associated to the AP
> + */
> + ieee80211_rx_bss_remove(sdata, ifsta->bssid,
> + sdata->local->hw.conf.channel->center_freq,
> + ifsta->ssid, ifsta->ssid_len);
> return;
> }
>
> @@ -871,6 +879,9 @@ static void ieee80211_authenticate(struct ieee80211_sub_if_data *sdata,
> sdata->dev->name, ifsta->bssid);
> ifsta->state = IEEE80211_STA_MLME_DISABLED;
> ieee80211_sta_send_apinfo(sdata, ifsta);
> + ieee80211_rx_bss_remove(sdata, ifsta->bssid,
> + sdata->local->hw.conf.channel->center_freq,
> + ifsta->ssid, ifsta->ssid_len);
> return;
> }
>
> @@ -933,8 +944,12 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
>
> ieee80211_sta_send_apinfo(sdata, ifsta);
>
> - if (self_disconnected || reason == WLAN_REASON_DISASSOC_STA_HAS_LEFT)
> + if (self_disconnected || reason == WLAN_REASON_DISASSOC_STA_HAS_LEFT) {
> ifsta->state = IEEE80211_STA_MLME_DISABLED;
> + ieee80211_rx_bss_remove(sdata, ifsta->bssid,
> + sdata->local->hw.conf.channel->center_freq,
> + ifsta->ssid, ifsta->ssid_len);
> + }
>
> rcu_read_unlock();
>
> @@ -1017,6 +1032,9 @@ static void ieee80211_associate(struct ieee80211_sub_if_data *sdata,
> sdata->dev->name, ifsta->bssid);
> ifsta->state = IEEE80211_STA_MLME_DISABLED;
> ieee80211_sta_send_apinfo(sdata, ifsta);
> + ieee80211_rx_bss_remove(sdata, ifsta->bssid,
> + sdata->local->hw.conf.channel->center_freq,
> + ifsta->ssid, ifsta->ssid_len);
> return;
> }
>
> @@ -1042,7 +1060,6 @@ 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
> @@ -1068,7 +1085,6 @@ 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,
> @@ -1088,24 +1104,12 @@ 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);
> - 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 {
> + else
> mod_timer(&ifsta->timer, jiffies +
> IEEE80211_MONITORING_INTERVAL);
> - }
> }
>
>
> diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
> index 282e6a0..50719ea 100644
> --- a/net/mac80211/scan.c
> +++ b/net/mac80211/scan.c
> @@ -327,6 +327,19 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
> return bss;
> }
>
> +void ieee80211_rx_bss_remove(struct ieee80211_sub_if_data *sdata, u8 *bssid,
> + int freq, u8 *ssid, u8 ssid_len)
> +{
> + struct ieee80211_bss *bss;
> + struct ieee80211_local *local = sdata->local;
> +
> + bss = ieee80211_rx_bss_get(local, bssid, freq, ssid, ssid_len);
> + if (bss) {
> + atomic_dec(&bss->users);
> + ieee80211_rx_bss_put(local, bss);
> + }
> +}
> +
> ieee80211_rx_result
> ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb,
> struct ieee80211_rx_status *rx_status)
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2009-02-04 14:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-04 12:58 [PATCH] mac80211: Free current bss information in few places where we don't need it any more Vasanthakumar Thiagarajan
2009-02-04 14:23 ` Johannes Berg [this message]
2009-02-10 9:41 ` Johannes Berg
2009-02-11 8:43 ` Vasanthakumar Thiagarajan
2009-02-11 14:30 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1233757380.3992.11.camel@johannes.local \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=vasanth@atheros.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox