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 <[email protected]>
---
 net/mac80211/mesh_plink.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

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 @@ static struct sta_info *mesh_plink_alloc(struct 
ieee80211_sub_if_data *sdata,
 
        set_sta_flag(sta, WLAN_STA_WME);
 
-       if (sta_info_insert(sta))
-               return NULL;
-
        return sta;
 }
 
@@ -281,6 +278,7 @@ static struct sta_info *mesh_peer_init(struct 
ieee80211_sub_if_data *sdata,
        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 @@ static struct sta_info *mesh_peer_init(struct 
ieee80211_sub_if_data *sdata,
                sta = mesh_plink_alloc(sdata, addr);
                if (!sta)
                        return NULL;
+               insert = true;
        }
 
        spin_lock_bh(&sta->lock);
@@ -306,6 +305,9 @@ static struct sta_info *mesh_peer_init(struct 
ieee80211_sub_if_data *sdata,
        rate_control_rate_init(sta);
        spin_unlock_bh(&sta->lock);
 
+       if (insert && sta_info_insert(sta))
+               return NULL;
+
        return sta;
 }
 
-- 
1.7.5.4

_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/cgi-bin/mailman/listinfo/devel

Reply via email to