]> Pileus Git - ~andy/linux/blobdiff - net/wireless/core.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[~andy/linux] / net / wireless / core.c
index 4224e7554a769ed7a9e3d1ea9a7f6b7cb2a38d54..4f9f216665e9d4d6753172f3c14d7bbdd3f53154 100644 (file)
@@ -775,10 +775,9 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev,
 }
 
 static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
-                                        unsigned long state,
-                                        void *ndev)
+                                        unsigned long state, void *ptr)
 {
-       struct net_device *dev = ndev;
+       struct net_device *dev = netdev_notifier_info_to_dev(ptr);
        struct wireless_dev *wdev = dev->ieee80211_ptr;
        struct cfg80211_registered_device *rdev;
        int ret;
@@ -934,6 +933,12 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
                 * freed.
                 */
                cfg80211_process_wdev_events(wdev);
+
+               if (WARN_ON(wdev->current_bss)) {
+                       cfg80211_unhold_bss(wdev->current_bss);
+                       cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
+                       wdev->current_bss = NULL;
+               }
                break;
        case NETDEV_PRE_UP:
                if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))