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;