Linux wireless drivers development
 help / color / mirror / Atom feed
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 --]

  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