Skip to content

Commit ff97e01

Browse files
Onebit5gregkh
authored andcommitted
staging: rtl8723bs: refactor rtw_joinbss_event_prehandle to reduce indentation
The rtw_joinbss_event_prehandle function has excessive indentation due to deeply nested if-statements. Refactor the function using early returns and guard clauses for the failure paths. This flattens the code and significantly improves readability. Signed-off-by: Jose A. Perez de Azpillaga <azpijr@gmail.com> Reviewed-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Link: https://patch.msgid.link/20260321182713.665872-3-azpijr@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 96e82c7 commit ff97e01

1 file changed

Lines changed: 70 additions & 65 deletions

File tree

drivers/staging/rtl8723bs/core/rtw_mlme.c

Lines changed: 70 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,86 +1166,91 @@ void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf)
11661166
pmlmepriv->link_detect_info.traffic_transition_count = 0;
11671167
pmlmepriv->link_detect_info.low_power_transition_count = 0;
11681168

1169-
if (pnetwork->join_res > 0) {
1170-
spin_lock_bh(&pmlmepriv->scanned_queue.lock);
1171-
if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
1172-
/* s1. find ptarget_wlan */
1173-
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
1174-
if (the_same_macaddr) {
1175-
ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.mac_address);
1176-
} else {
1177-
pcur_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.mac_address);
1178-
if (pcur_wlan)
1179-
pcur_wlan->fixed = false;
1180-
1181-
pcur_sta = rtw_get_stainfo(pstapriv, cur_network->network.mac_address);
1182-
if (pcur_sta)
1183-
rtw_free_stainfo(adapter, pcur_sta);
1184-
1185-
ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, pnetwork->network.mac_address);
1186-
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1187-
if (ptarget_wlan)
1188-
ptarget_wlan->fixed = true;
1189-
}
1190-
}
1169+
if (pnetwork->join_res == -4) {
1170+
rtw_reset_securitypriv(adapter);
1171+
_set_timer(&pmlmepriv->assoc_timer, 1);
11911172

1192-
} else {
1193-
ptarget_wlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, pnetwork);
1194-
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1195-
if (ptarget_wlan)
1196-
ptarget_wlan->fixed = true;
1197-
}
1198-
}
1173+
if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
1174+
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
11991175

1200-
/* s2. update cur_network */
1201-
if (ptarget_wlan) {
1202-
rtw_joinbss_update_network(adapter, ptarget_wlan, pnetwork);
1203-
} else {
1204-
netdev_dbg(adapter->pnetdev,
1205-
"Can't find ptarget_wlan when joinbss_event callback\n");
1206-
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1207-
goto ignore_joinbss_callback;
1208-
}
1176+
spin_unlock_bh(&pmlmepriv->lock);
1177+
return;
1178+
}
12091179

1210-
/* s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode */
1211-
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1212-
ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
1213-
if (!ptarget_sta) {
1214-
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1215-
goto ignore_joinbss_callback;
1216-
}
1217-
}
1180+
if (pnetwork->join_res <= 0) { /* if join_res < 0 (join fails), then try again */
1181+
_set_timer(&pmlmepriv->assoc_timer, 1);
1182+
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
1183+
spin_unlock_bh(&pmlmepriv->lock);
1184+
return;
1185+
}
12181186

1219-
/* s4. indicate connect */
1187+
spin_lock_bh(&pmlmepriv->scanned_queue.lock);
1188+
1189+
if (!check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
1190+
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1191+
spin_unlock_bh(&pmlmepriv->lock);
1192+
return;
1193+
}
1194+
1195+
/* s1. find ptarget_wlan */
1196+
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
1197+
if (the_same_macaddr) {
1198+
ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.mac_address);
1199+
} else {
1200+
pcur_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.mac_address);
1201+
if (pcur_wlan)
1202+
pcur_wlan->fixed = false;
1203+
1204+
pcur_sta = rtw_get_stainfo(pstapriv, cur_network->network.mac_address);
1205+
if (pcur_sta)
1206+
rtw_free_stainfo(adapter, pcur_sta);
1207+
1208+
ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, pnetwork->network.mac_address);
12201209
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1221-
pmlmepriv->cur_network_scanned = ptarget_wlan;
1222-
rtw_indicate_connect(adapter);
1210+
if (ptarget_wlan)
1211+
ptarget_wlan->fixed = true;
12231212
}
1213+
}
1214+
} else {
1215+
ptarget_wlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, pnetwork);
1216+
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1217+
if (ptarget_wlan)
1218+
ptarget_wlan->fixed = true;
1219+
}
1220+
}
12241221

1225-
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1222+
/* s2. update cur_network */
1223+
if (!ptarget_wlan) {
1224+
netdev_dbg(adapter->pnetdev,
1225+
"Can't find ptarget_wlan when joinbss_event callback\n");
1226+
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1227+
spin_unlock_bh(&pmlmepriv->lock);
1228+
return;
1229+
}
12261230

1227-
spin_unlock_bh(&pmlmepriv->lock);
1228-
/* s5. Cancel assoc_timer */
1229-
timer_delete_sync(&pmlmepriv->assoc_timer);
1230-
spin_lock_bh(&pmlmepriv->lock);
1231-
} else {
1231+
rtw_joinbss_update_network(adapter, ptarget_wlan, pnetwork);
1232+
1233+
/* s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode */
1234+
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1235+
ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
1236+
if (!ptarget_sta) {
12321237
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
1238+
spin_unlock_bh(&pmlmepriv->lock);
1239+
return;
12331240
}
1234-
} else if (pnetwork->join_res == -4) {
1235-
rtw_reset_securitypriv(adapter);
1236-
_set_timer(&pmlmepriv->assoc_timer, 1);
1237-
1238-
if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
1239-
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
1241+
}
12401242

1241-
} else {/* if join_res < 0 (join fails), then try again */
1242-
_set_timer(&pmlmepriv->assoc_timer, 1);
1243-
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
1243+
/* s4. indicate connect */
1244+
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
1245+
pmlmepriv->cur_network_scanned = ptarget_wlan;
1246+
rtw_indicate_connect(adapter);
12441247
}
12451248

1246-
ignore_joinbss_callback:
1249+
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
12471250

12481251
spin_unlock_bh(&pmlmepriv->lock);
1252+
/* s5. Cancel assoc_timer */
1253+
timer_delete_sync(&pmlmepriv->assoc_timer);
12491254
}
12501255

12511256
void rtw_joinbss_event_callback(struct adapter *adapter, u8 *pbuf)

0 commit comments

Comments
 (0)