|
@@ -960,7 +960,7 @@ void sta_info_stop(struct ieee80211_local *local)
|
|
|
}
|
|
|
|
|
|
|
|
|
-int sta_info_flush(struct ieee80211_sub_if_data *sdata)
|
|
|
+int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans)
|
|
|
{
|
|
|
struct ieee80211_local *local = sdata->local;
|
|
|
struct sta_info *sta, *tmp;
|
|
@@ -969,9 +969,13 @@ int sta_info_flush(struct ieee80211_sub_if_data *sdata)
|
|
|
|
|
|
might_sleep();
|
|
|
|
|
|
+ WARN_ON(vlans && sdata->vif.type != NL80211_IFTYPE_AP);
|
|
|
+ WARN_ON(vlans && !sdata->bss);
|
|
|
+
|
|
|
mutex_lock(&local->sta_mtx);
|
|
|
list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
|
|
|
- if (sdata == sta->sdata) {
|
|
|
+ if (sdata == sta->sdata ||
|
|
|
+ (vlans && sdata->bss == sta->sdata->bss)) {
|
|
|
if (!WARN_ON(__sta_info_destroy_part1(sta)))
|
|
|
list_add(&sta->free_list, &free_list);
|
|
|
ret++;
|