]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mac80211: simplify __ieee80211_rx_h_amsdu() loop
authorJohannes Berg <johannes.berg@intel.com>
Wed, 9 Jul 2025 20:38:01 +0000 (23:38 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 15 Jul 2025 09:00:39 +0000 (11:00 +0200)
The loop handling individual subframes can be simplified to
not use a somewhat confusing goto inside the loop.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250709233537.a217a1e8c667.I5283df9627912c06c8327b5786d6b715c6f3a4e1@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/rx.c

index caa3e6b3f46e3b378dbb978df59de3976b01472e..9bca5e0a41b0f299935fb1cd22fa07a64a9e86d3 100644 (file)
@@ -3033,7 +3033,6 @@ __ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
        __le16 fc = hdr->frame_control;
        struct sk_buff_head frame_list;
-       ieee80211_rx_result res;
        struct ethhdr ethhdr;
        const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
 
@@ -3095,24 +3094,18 @@ __ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
        while (!skb_queue_empty(&frame_list)) {
                rx->skb = __skb_dequeue(&frame_list);
 
-               res = ieee80211_rx_mesh_data(rx->sdata, rx->sta, rx->skb);
-               switch (res) {
+               switch (ieee80211_rx_mesh_data(rx->sdata, rx->sta, rx->skb)) {
                case RX_QUEUED:
-                       continue;
-               case RX_CONTINUE:
                        break;
+               case RX_CONTINUE:
+                       if (ieee80211_frame_allowed(rx, fc)) {
+                               ieee80211_deliver_skb(rx);
+                               break;
+                       }
+                       fallthrough;
                default:
-                       goto free;
+                       dev_kfree_skb(rx->skb);
                }
-
-               if (!ieee80211_frame_allowed(rx, fc))
-                       goto free;
-
-               ieee80211_deliver_skb(rx);
-               continue;
-
-free:
-               dev_kfree_skb(rx->skb);
        }
 
        return RX_QUEUED;