Hi, > While working on an issue that marvell module stops connecting to AP, > bisect reveals that the issue starts to happen from commit 0711d638, > which uses wdev->ssid_len instead of wdev->current_bss to determine > if driver's .disconnect() should be called. > > It happens because mwifiex_cfg80211_connect() returns -EALREADY > when it finds wdev->current_bss is valid: > > if (priv->wdev.current_bss) { > [PRINT LOG] > return -EALREADY; > } > > This would make cfg80211_connect() set wdev->ssid_len to 0, and thus > mwifiex_cfg80211_disconnect() won't be called by > cfg80211_disconnect(). Hmm, none of this makes much sense to me right now. Does mwifiex treat this -EALREADY as *keeping* an old connection, or tearing it down entirely? Because right now clearly cfg80211 assumes, on the one hand, that no connection is kept (resetting ssid_len), but on the other hand it got here with current_bss set - so perhaps we should reject that before in cfg80211, rather than in mwifiex? I think your fix is invalid because we then reset ssid_len and still keep an old connection (current_bss) which will lead to strange nl80211 behaviour when getting interface data etc. johannes