|
@@ -258,11 +258,11 @@ void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
|
|
|
}
|
|
|
|
|
|
/* Caller must hold local->sta_mtx */
|
|
|
-static void sta_info_hash_add(struct ieee80211_local *local,
|
|
|
- struct sta_info *sta)
|
|
|
+static int sta_info_hash_add(struct ieee80211_local *local,
|
|
|
+ struct sta_info *sta)
|
|
|
{
|
|
|
- rhashtable_insert_fast(&local->sta_hash, &sta->hash_node,
|
|
|
- sta_rht_params);
|
|
|
+ return rhashtable_insert_fast(&local->sta_hash, &sta->hash_node,
|
|
|
+ sta_rht_params);
|
|
|
}
|
|
|
|
|
|
static void sta_deliver_ps_frames(struct work_struct *wk)
|
|
@@ -524,7 +524,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
|
|
|
set_sta_flag(sta, WLAN_STA_BLOCK_BA);
|
|
|
|
|
|
/* make the station visible */
|
|
|
- sta_info_hash_add(local, sta);
|
|
|
+ err = sta_info_hash_add(local, sta);
|
|
|
+ if (err)
|
|
|
+ goto out_drop_sta;
|
|
|
|
|
|
list_add_tail_rcu(&sta->list, &local->sta_list);
|
|
|
|
|
@@ -557,6 +559,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
|
|
|
out_remove:
|
|
|
sta_info_hash_del(local, sta);
|
|
|
list_del_rcu(&sta->list);
|
|
|
+ out_drop_sta:
|
|
|
local->num_sta--;
|
|
|
synchronize_net();
|
|
|
__cleanup_single_sta(sta);
|