diff options
| author | Johannes Berg <johannes.berg@intel.com> | 2015-04-23 08:02:30 -0400 |
|---|---|---|
| committer | Johannes Berg <johannes.berg@intel.com> | 2015-04-23 10:40:40 -0400 |
| commit | 60f4b626d5b5c5724b010200a8c2ff3169f6f4db (patch) | |
| tree | fb4ac7171196117f229e235db3c0b20de099cb86 /net/mac80211 | |
| parent | 5eb8f4d74204864d8a4154772206ad747274d12d (diff) | |
mac80211: fix rhashtable conversion
My conversion of the mac80211 station hash table to rhashtable
completely broke the lookup in sta_info_get() as it no longer
took into account the virtual interface. Fix that.
Fixes: 7bedd0cfad4e1 ("mac80211: use rhashtable for station table")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
| -rw-r--r-- | net/mac80211/sta_info.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 12971b71d0fa..39893178a1a9 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
| @@ -157,8 +157,24 @@ struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata, | |||
| 157 | const u8 *addr) | 157 | const u8 *addr) |
| 158 | { | 158 | { |
| 159 | struct ieee80211_local *local = sdata->local; | 159 | struct ieee80211_local *local = sdata->local; |
| 160 | struct sta_info *sta; | ||
| 161 | struct rhash_head *tmp; | ||
| 162 | const struct bucket_table *tbl; | ||
| 163 | |||
| 164 | rcu_read_lock(); | ||
| 165 | tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash); | ||
| 160 | 166 | ||
| 161 | return rhashtable_lookup_fast(&local->sta_hash, addr, sta_rht_params); | 167 | for_each_sta_info(local, tbl, addr, sta, tmp) { |
| 168 | if (sta->sdata == sdata) { | ||
| 169 | rcu_read_unlock(); | ||
| 170 | /* this is safe as the caller must already hold | ||
| 171 | * another rcu read section or the mutex | ||
| 172 | */ | ||
| 173 | return sta; | ||
| 174 | } | ||
| 175 | } | ||
| 176 | rcu_read_unlock(); | ||
| 177 | return NULL; | ||
| 162 | } | 178 | } |
| 163 | 179 | ||
| 164 | /* | 180 | /* |
