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..f424ac7633bb 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -1056,6 +1056,9 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, case NL80211_IFTYPE_MESH_POINT: /* mesh should be handled? */ break; + case NL80211_IFTYPE_OCB: + cfg80211_leave_ocb(rdev, dev); + break; default: break; }