cfg80211: fix NETDEV_UNREGISTER notifier
[pandora-kernel.git] / net / wireless / core.c
index 755cdf1..1493285 100644 (file)
@@ -725,15 +725,22 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
                break;
        case NETDEV_UNREGISTER:
                mutex_lock(&rdev->devlist_mtx);
+               /*
+                * It is possible to get NETDEV_UNREGISTER
+                * multiple times. To detect that, check
+                * that the interface is still on the list
+                * of registered interfaces, and only then
+                * remove and clean it up.
+                */
                if (!list_empty(&wdev->list)) {
                        sysfs_remove_link(&dev->dev.kobj, "phy80211");
                        list_del_init(&wdev->list);
-               }
-               mutex_unlock(&rdev->devlist_mtx);
-               mutex_destroy(&wdev->mtx);
+                       mutex_destroy(&wdev->mtx);
 #ifdef CONFIG_WIRELESS_EXT
-               kfree(wdev->wext.keys);
+                       kfree(wdev->wext.keys);
 #endif
+               }
+               mutex_unlock(&rdev->devlist_mtx);
                break;
        case NETDEV_PRE_UP:
                if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))