aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_input.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2010-02-27 14:41:41 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-28 03:48:43 -0500
commitb33084be192ee1e347d98bb5c9e38a53d98d35e2 (patch)
tree940c62309437ca5fa087275bc64b4ffd677c79c3 /net/bridge/br_input.c
parent68b7c895be336b19f4c38d7cb500132fabba0afd (diff)
bridge: Avoid unnecessary clone on forward path
When the packet is delivered to the local bridge device we may end up cloning it unnecessarily if no bridge port can receive the packet in br_flood. This patch avoids this by moving the skb_clone into br_flood. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r--net/bridge/br_input.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index be5ab8df6661..edfdaef44296 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -72,14 +72,11 @@ int br_handle_frame_finish(struct sk_buff *skb)
72 skb = NULL; 72 skb = NULL;
73 } 73 }
74 74
75 if (skb2 == skb)
76 skb2 = skb_clone(skb, GFP_ATOMIC);
77
78 if (skb) { 75 if (skb) {
79 if (dst) 76 if (dst)
80 br_forward(dst->dst, skb); 77 br_forward(dst->dst, skb);
81 else 78 else
82 br_flood_forward(br, skb); 79 br_flood_forward(br, skb, skb2);
83 } 80 }
84 81
85 if (skb2) 82 if (skb2)