diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index a7ac53a2f00d..af3bb1b86d7a 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -1886,6 +1886,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
skb_queue_purge(&sdata->skb_queue);
del_timer_sync(&sdata->u.ibss.timer);
+ pr_info("DC %s: del_timer_sync\n", __func__);
return 0;
}
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index 8f98e546becf..0a753e431dd3 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -207,14 +207,15 @@ int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev,
ASSERT_WDEV_LOCK(wdev);
- if (!wdev->ssid_len)
- return -ENOLINK;
-
err = rdev_leave_ibss(rdev, dev);
if (err)
return err;
+ if (!wdev->ssid_len)
+ return -ENOLINK;
+
+
wdev->conn_owner_nlportid = 0;
__cfg80211_clear_ibss(dev, nowext);
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 1bf0200f562a..ab62a164e6fa 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -1055,6 +1055,10 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
break;
case NL80211_IFTYPE_MESH_POINT:
/* mesh should be handled? */
+ cfg80211_leave_mesh(rdev, dev);
+ break;
+ case NL80211_IFTYPE_OCB:
+ cfg80211_leave_ocb(rdev, dev);
break;
default:
break;