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>
This commit is contained in:
parent
2e4c14a558
commit
e87278e730
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue