diff options
| -rw-r--r-- | net/wireless/core.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index 84c9ad7e1dca..6c9f8005cac0 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
| @@ -638,17 +638,21 @@ int wiphy_register(struct wiphy *wiphy) | |||
| 638 | * cfg80211_mutex lock | 638 | * cfg80211_mutex lock |
| 639 | */ | 639 | */ |
| 640 | res = rfkill_register(rdev->rfkill); | 640 | res = rfkill_register(rdev->rfkill); |
| 641 | if (res) | 641 | if (res) { |
| 642 | goto out_rm_dev; | 642 | device_del(&rdev->wiphy.dev); |
| 643 | |||
| 644 | mutex_lock(&cfg80211_mutex); | ||
| 645 | debugfs_remove_recursive(rdev->wiphy.debugfsdir); | ||
| 646 | list_del_rcu(&rdev->list); | ||
| 647 | wiphy_regulatory_deregister(wiphy); | ||
| 648 | mutex_unlock(&cfg80211_mutex); | ||
| 649 | return res; | ||
| 650 | } | ||
| 643 | 651 | ||
| 644 | rtnl_lock(); | 652 | rtnl_lock(); |
| 645 | rdev->wiphy.registered = true; | 653 | rdev->wiphy.registered = true; |
| 646 | rtnl_unlock(); | 654 | rtnl_unlock(); |
| 647 | return 0; | 655 | return 0; |
| 648 | |||
| 649 | out_rm_dev: | ||
| 650 | device_del(&rdev->wiphy.dev); | ||
| 651 | return res; | ||
| 652 | } | 656 | } |
| 653 | EXPORT_SYMBOL(wiphy_register); | 657 | EXPORT_SYMBOL(wiphy_register); |
| 654 | 658 | ||
