|
@@ -157,8 +157,24 @@ struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
|
|
const u8 *addr)
|
|
const u8 *addr)
|
|
{
|
|
{
|
|
struct ieee80211_local *local = sdata->local;
|
|
struct ieee80211_local *local = sdata->local;
|
|
|
|
+ struct sta_info *sta;
|
|
|
|
+ struct rhash_head *tmp;
|
|
|
|
+ const struct bucket_table *tbl;
|
|
|
|
+
|
|
|
|
+ rcu_read_lock();
|
|
|
|
+ tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash);
|
|
|
|
|
|
- return rhashtable_lookup_fast(&local->sta_hash, addr, sta_rht_params);
|
|
|
|
|
|
+ for_each_sta_info(local, tbl, addr, sta, tmp) {
|
|
|
|
+ if (sta->sdata == sdata) {
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
+ /* this is safe as the caller must already hold
|
|
|
|
+ * another rcu read section or the mutex
|
|
|
|
+ */
|
|
|
|
+ return sta;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
+ return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|