diff options
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r-- | net/wireless/core.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index e42a97b5b97..b110a8a242d 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -176,7 +176,7 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, | |||
176 | if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK)) | 176 | if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK)) |
177 | return -EOPNOTSUPP; | 177 | return -EOPNOTSUPP; |
178 | 178 | ||
179 | list_for_each_entry(wdev, &rdev->netdev_list, list) { | 179 | list_for_each_entry(wdev, &rdev->wdev_list, list) { |
180 | wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; | 180 | wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; |
181 | err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); | 181 | err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); |
182 | if (err) | 182 | if (err) |
@@ -188,7 +188,7 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, | |||
188 | /* failed -- clean up to old netns */ | 188 | /* failed -- clean up to old netns */ |
189 | net = wiphy_net(&rdev->wiphy); | 189 | net = wiphy_net(&rdev->wiphy); |
190 | 190 | ||
191 | list_for_each_entry_continue_reverse(wdev, &rdev->netdev_list, | 191 | list_for_each_entry_continue_reverse(wdev, &rdev->wdev_list, |
192 | list) { | 192 | list) { |
193 | wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; | 193 | wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; |
194 | err = dev_change_net_namespace(wdev->netdev, net, | 194 | err = dev_change_net_namespace(wdev->netdev, net, |
@@ -226,7 +226,7 @@ static int cfg80211_rfkill_set_block(void *data, bool blocked) | |||
226 | rtnl_lock(); | 226 | rtnl_lock(); |
227 | mutex_lock(&rdev->devlist_mtx); | 227 | mutex_lock(&rdev->devlist_mtx); |
228 | 228 | ||
229 | list_for_each_entry(wdev, &rdev->netdev_list, list) | 229 | list_for_each_entry(wdev, &rdev->wdev_list, list) |
230 | dev_close(wdev->netdev); | 230 | dev_close(wdev->netdev); |
231 | 231 | ||
232 | mutex_unlock(&rdev->devlist_mtx); | 232 | mutex_unlock(&rdev->devlist_mtx); |
@@ -304,7 +304,7 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv) | |||
304 | mutex_init(&rdev->mtx); | 304 | mutex_init(&rdev->mtx); |
305 | mutex_init(&rdev->devlist_mtx); | 305 | mutex_init(&rdev->devlist_mtx); |
306 | mutex_init(&rdev->sched_scan_mtx); | 306 | mutex_init(&rdev->sched_scan_mtx); |
307 | INIT_LIST_HEAD(&rdev->netdev_list); | 307 | INIT_LIST_HEAD(&rdev->wdev_list); |
308 | spin_lock_init(&rdev->bss_lock); | 308 | spin_lock_init(&rdev->bss_lock); |
309 | INIT_LIST_HEAD(&rdev->bss_list); | 309 | INIT_LIST_HEAD(&rdev->bss_list); |
310 | INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); | 310 | INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); |
@@ -622,7 +622,7 @@ void wiphy_unregister(struct wiphy *wiphy) | |||
622 | __count == 0; })); | 622 | __count == 0; })); |
623 | 623 | ||
624 | mutex_lock(&rdev->devlist_mtx); | 624 | mutex_lock(&rdev->devlist_mtx); |
625 | BUG_ON(!list_empty(&rdev->netdev_list)); | 625 | BUG_ON(!list_empty(&rdev->wdev_list)); |
626 | mutex_unlock(&rdev->devlist_mtx); | 626 | mutex_unlock(&rdev->devlist_mtx); |
627 | 627 | ||
628 | /* | 628 | /* |
@@ -821,7 +821,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, | |||
821 | spin_lock_init(&wdev->mgmt_registrations_lock); | 821 | spin_lock_init(&wdev->mgmt_registrations_lock); |
822 | 822 | ||
823 | mutex_lock(&rdev->devlist_mtx); | 823 | mutex_lock(&rdev->devlist_mtx); |
824 | list_add_rcu(&wdev->list, &rdev->netdev_list); | 824 | wdev->identifier = ++rdev->wdev_id; |
825 | list_add_rcu(&wdev->list, &rdev->wdev_list); | ||
825 | rdev->devlist_generation++; | 826 | rdev->devlist_generation++; |
826 | /* can only change netns with wiphy */ | 827 | /* can only change netns with wiphy */ |
827 | dev->features |= NETIF_F_NETNS_LOCAL; | 828 | dev->features |= NETIF_F_NETNS_LOCAL; |