cfg80211: fix more bugs in mlme handling
authorJohannes Berg <johannes@sipsolutions.net>
Fri, 10 Jul 2009 22:17:32 +0000 (00:17 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 24 Jul 2009 19:05:12 +0000 (15:05 -0400)
The "what-was-I-thinking-if-anything" patch. Clearly,
if cfg80211_send_disassoc() does wdev_lock() and then
calls __cfg80211_send_disassoc(), the latter shouldn't
lock again. And the sme_state test is ... no further
comments.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/mlme.c

index 8e4ce2fdf8629d50a6249c3441b37eed0ace68b5..5b9b2212082496312d335cadd8cfceeae4cc8df7 100644 (file)
@@ -178,12 +178,12 @@ static void __cfg80211_send_disassoc(struct net_device *dev,
        bool from_ap;
        bool done = false;
 
-       wdev_lock(wdev);
+       ASSERT_WDEV_LOCK(wdev);
 
        nl80211_send_disassoc(rdev, dev, buf, len, GFP_KERNEL);
 
-       if (!wdev->sme_state == CFG80211_SME_CONNECTED)
-               goto out;
+       if (wdev->sme_state != CFG80211_SME_CONNECTED)
+               return;
 
        if (wdev->current_bss &&
            memcmp(wdev->current_bss, bssid, ETH_ALEN) == 0) {
@@ -205,8 +205,6 @@ static void __cfg80211_send_disassoc(struct net_device *dev,
 
        from_ap = memcmp(mgmt->da, dev->dev_addr, ETH_ALEN) == 0;
        __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap);
- out:
-       wdev_unlock(wdev);
 }
 
 void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len,