|
@@ -632,6 +632,16 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+ if (!bss && (status == WLAN_STATUS_SUCCESS)) {
|
|
|
+ WARN_ON_ONCE(!wiphy_to_dev(wdev->wiphy)->ops->connect);
|
|
|
+ bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid,
|
|
|
+ wdev->ssid, wdev->ssid_len,
|
|
|
+ WLAN_CAPABILITY_ESS,
|
|
|
+ WLAN_CAPABILITY_ESS);
|
|
|
+ if (bss)
|
|
|
+ cfg80211_hold_bss(bss_from_pub(bss));
|
|
|
+ }
|
|
|
+
|
|
|
if (wdev->current_bss) {
|
|
|
cfg80211_unhold_bss(wdev->current_bss);
|
|
|
cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
|
|
@@ -649,16 +659,8 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (!bss) {
|
|
|
- WARN_ON_ONCE(!wiphy_to_dev(wdev->wiphy)->ops->connect);
|
|
|
- bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid,
|
|
|
- wdev->ssid, wdev->ssid_len,
|
|
|
- WLAN_CAPABILITY_ESS,
|
|
|
- WLAN_CAPABILITY_ESS);
|
|
|
- if (WARN_ON(!bss))
|
|
|
- return;
|
|
|
- cfg80211_hold_bss(bss_from_pub(bss));
|
|
|
- }
|
|
|
+ if (WARN_ON(!bss))
|
|
|
+ return;
|
|
|
|
|
|
wdev->current_bss = bss_from_pub(bss);
|
|
|
|