staging: r8188eu: handle the non-ap case first
authorMartin Kaiser <martin@kaiser.cx>
Tue, 29 Nov 2022 20:51:51 +0000 (21:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 5 Dec 2022 12:29:07 +0000 (13:29 +0100)
The OnDisassoc function hasn't got much to do if we're not working as an
access point. Move this case out of the large if statement to simplify the
code.

Tested-by: Philipp Hortmann <philipp.g.hortmann@gmail.com> # Edimax N150
Signed-off-by: Martin Kaiser <martin@kaiser.cx>
Link: https://lore.kernel.org/r/20221129205152.128172-5-martin@kaiser.cx
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/r8188eu/core/rtw_mlme_ext.c

index dd1e0b4fc5a0903848fbc1faa642f61be7ec2b06..d5c9eb52fb0e498b9216dd2ba8d894172c0a9bd8 100644 (file)
@@ -1433,6 +1433,8 @@ static void OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
        struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+       struct sta_info *psta;
+       struct sta_priv *pstapriv = &padapter->stapriv;
 
        if (memcmp(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
                return;
@@ -1444,29 +1446,25 @@ static void OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
 
        reason = le16_to_cpu(mgmt->u.disassoc.reason_code);
 
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-               if (psta) {
-                       u8 updated = 0;
+       if (!check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
+               receive_disconnect(padapter, mgmt->bssid, reason);
+               pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
+               return;
+       }
 
-                       spin_lock_bh(&pstapriv->asoc_list_lock);
-                       if (!list_empty(&psta->asoc_list)) {
-                               list_del_init(&psta->asoc_list);
-                               pstapriv->asoc_list_cnt--;
-                               updated = ap_free_sta(padapter, psta, false, reason);
-                       }
-                       spin_unlock_bh(&pstapriv->asoc_list_lock);
+       psta = rtw_get_stainfo(pstapriv, mgmt->sa);
+       if (psta) {
+               u8 updated = 0;
 
-                       associated_clients_update(padapter, updated);
+               spin_lock_bh(&pstapriv->asoc_list_lock);
+               if (!list_empty(&psta->asoc_list)) {
+                       list_del_init(&psta->asoc_list);
+                       pstapriv->asoc_list_cnt--;
+                       updated = ap_free_sta(padapter, psta, false, reason);
                }
+               spin_unlock_bh(&pstapriv->asoc_list_lock);
 
-               return;
-       } else {
-               receive_disconnect(padapter, mgmt->bssid, reason);
-               pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
+               associated_clients_update(padapter, updated);
        }
 }