]> err.no Git - linux-2.6/commitdiff
[MAC80211]: rx cleanups (2)
authorJohannes Berg <johannes@sipsolutions.net>
Fri, 27 Jul 2007 13:43:22 +0000 (15:43 +0200)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 10 Oct 2007 23:47:32 +0000 (16:47 -0700)
Some more outdenting to make the code more readable.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Jiri Benc <jbenc@suse.cz>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rx.c

index f255579dc5647920b269644134086a33556d1b6e..95a00eb572499142492c4be38883cc5dbfb72710 100644 (file)
@@ -1387,21 +1387,35 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
                if (!prepres)
                        continue;
 
-               if (prev) {
-                       skb_new = skb_copy(skb, GFP_ATOMIC);
-                       if (!skb_new) {
-                               if (net_ratelimit())
-                                       printk(KERN_DEBUG "%s: failed to copy "
-                                              "multicast frame for %s",
-                                              local->mdev->name, prev->dev->name);
-                               continue;
-                       }
-                       rx.skb = skb_new;
-                       rx.dev = prev->dev;
-                       rx.sdata = prev;
-                       ieee80211_invoke_rx_handlers(local, local->rx_handlers,
-                                                    &rx, sta);
+               /*
+                * frame is destined for this interface, but if it's not
+                * also for the previous one we handle that after the
+                * loop to avoid copying the SKB once too much
+                */
+
+               if (!prev) {
+                       prev = sdata;
+                       continue;
                }
+
+               /*
+                * frame was destined for the previous interface
+                * so invoke RX handlers for it
+                */
+
+               skb_new = skb_copy(skb, GFP_ATOMIC);
+               if (!skb_new) {
+                       if (net_ratelimit())
+                               printk(KERN_DEBUG "%s: failed to copy "
+                                      "multicast frame for %s",
+                                      local->mdev->name, prev->dev->name);
+                       continue;
+               }
+               rx.skb = skb_new;
+               rx.dev = prev->dev;
+               rx.sdata = prev;
+               ieee80211_invoke_rx_handlers(local, local->rx_handlers,
+                                            &rx, sta);
                prev = sdata;
        }
        if (prev) {