summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChun-Yeow Yeoh <yeohchunyeow@gmail.com>2012-07-24 05:52:35 +0200
committerJohannes Berg <johannes.berg@intel.com>2012-07-31 16:10:55 +0200
commitbae35d92b6a1b6fd8c699415ab90aeeea2a56bc3 (patch)
treedbdc9b9626dfce07340530051fa123f2eb6cdd99
parentMerge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/t... (diff)
downloadlinux-bae35d92b6a1b6fd8c699415ab90aeeea2a56bc3.tar.xz
linux-bae35d92b6a1b6fd8c699415ab90aeeea2a56bc3.zip
mac80211: don't re-init rate control when receiving mesh beacon
Rate control is re-initialized whenever a beacon from a mesh peer received, breaking the algorithms and resulting in low performance. Return early from mesh_peer_init if we already established a link with this peer to avoid this. Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com> [clarify commit message] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/mac80211/mesh_plink.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index af671b984df3..fa642c794719 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -362,6 +362,11 @@ static struct sta_info *mesh_peer_init(struct ieee80211_sub_if_data *sdata,
spin_lock_bh(&sta->lock);
sta->last_rx = jiffies;
+ if (sta->plink_state == NL80211_PLINK_ESTAB) {
+ spin_unlock_bh(&sta->lock);
+ return sta;
+ }
+
sta->sta.supp_rates[band] = rates;
if (elems->ht_cap_elem &&
sdata->local->_oper_channel_type != NL80211_CHAN_NO_HT)