aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r--net/bridge/br_input.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 9589937e1c0a..be5ab8df6661 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -20,9 +20,9 @@
20/* Bridge group multicast address 802.1d (pg 51). */ 20/* Bridge group multicast address 802.1d (pg 51). */
21const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 }; 21const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
22 22
23static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb) 23static int br_pass_frame_up(struct sk_buff *skb)
24{ 24{
25 struct net_device *indev, *brdev = br->dev; 25 struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev;
26 26
27 brdev->stats.rx_packets++; 27 brdev->stats.rx_packets++;
28 brdev->stats.rx_bytes += skb->len; 28 brdev->stats.rx_bytes += skb->len;
@@ -30,8 +30,8 @@ static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb)
30 indev = skb->dev; 30 indev = skb->dev;
31 skb->dev = brdev; 31 skb->dev = brdev;
32 32
33 NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL, 33 return NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL,
34 netif_receive_skb); 34 netif_receive_skb);
35} 35}
36 36
37/* note: already called with rcu_read_lock (preempt_disabled) */ 37/* note: already called with rcu_read_lock (preempt_disabled) */
@@ -53,6 +53,8 @@ int br_handle_frame_finish(struct sk_buff *skb)
53 if (p->state == BR_STATE_LEARNING) 53 if (p->state == BR_STATE_LEARNING)
54 goto drop; 54 goto drop;
55 55
56 BR_INPUT_SKB_CB(skb)->brdev = br->dev;
57
56 /* The packet skb2 goes to the local host (NULL to skip). */ 58 /* The packet skb2 goes to the local host (NULL to skip). */
57 skb2 = NULL; 59 skb2 = NULL;
58 60
@@ -81,7 +83,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
81 } 83 }
82 84
83 if (skb2) 85 if (skb2)
84 br_pass_frame_up(br, skb2); 86 return br_pass_frame_up(skb2);
85 87
86out: 88out:
87 return 0; 89 return 0;