mac80211: insert mesh peer after init
Drivers need the station rate info when inserting a new sta_info. The
patch "mac80211: refactor mesh peer initialization" wrongly assumed the
rate info could be applied after insertion. After further review, this
is clearly not the case.
This fixes a regression where HT parameters were not applied before
inserting the sta_info, causing performance degradation.
Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index 1ff2a5c..f4124d7 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -102,9 +102,6 @@
set_sta_flag(sta, WLAN_STA_WME);
- if (sta_info_insert(sta))
- return NULL;
-
return sta;
}
@@ -281,6 +278,7 @@
struct ieee80211_supported_band *sband;
u32 rates, basic_rates = 0;
struct sta_info *sta;
+ bool insert = false;
sband = local->hw.wiphy->bands[band];
rates = ieee80211_sta_get_rates(local, elems, band, &basic_rates);
@@ -290,6 +288,7 @@
sta = mesh_plink_alloc(sdata, addr);
if (!sta)
return NULL;
+ insert = true;
}
spin_lock_bh(&sta->lock);
@@ -306,6 +305,9 @@
rate_control_rate_init(sta);
spin_unlock_bh(&sta->lock);
+ if (insert && sta_info_insert(sta))
+ return NULL;
+
return sta;
}