diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-15 17:06:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-15 17:06:58 -0400 |
commit | a52cefc80fc92981592c688d1c8067442afe4cec (patch) | |
tree | ad119b5a4f5e4a257779c0ef324b5c9354c915f1 /net/bridge/br_input.c | |
parent | fba956c46a72f9e7503fd464ffee43c632307e31 (diff) | |
parent | 4acad72ded8e3f0211bd2a762e23c28229c61a51 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits)
[IPV6]: Consolidate the ip6_pol_route_(input|output) pair
[TCP]: Make snd_cwnd_cnt 32-bit
[TCP]: Update the /proc/net/tcp documentation
[NETNS]: Don't panic on creating the namespace's loopback
[NEIGH]: Ensure that pneigh_lookup is protected with RTNL
[INET]: kmalloc+memset -> kzalloc in frag_alloc_queue
[ISDN]: Fix compile with CONFIG_ISDN_X25 disabled.
[IPV6]: Replace sk_buff ** with sk_buff * in input handlers
[SELINUX]: Update for netfilter ->hook() arg changes.
[INET]: Consolidate the xxx_put
[INET]: Small cleanup for xxx_put after evictor consolidation
[INET]: Consolidate the xxx_evictor
[INET]: Consolidate the xxx_frag_destroy
[INET]: Consolidate xxx_the secret_rebuild
[INET]: Consolidate the xxx_frag_kill
[INET]: Collect common frag sysctl variables together
[INET]: Collect frag queues management objects together
[INET]: Move common fields from frag_queues in one place.
[TG3]: Fix performance regression on 5705.
[ISDN]: Remove local copy of device name to make sure renames work.
...
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r-- | net/bridge/br_input.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 3a8a015c92e0..3cedd4eeeed6 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
@@ -126,6 +126,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
126 | if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) | 126 | if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) |
127 | goto drop; | 127 | goto drop; |
128 | 128 | ||
129 | skb = skb_share_check(skb, GFP_ATOMIC); | ||
130 | if (!skb) | ||
131 | return NULL; | ||
132 | |||
129 | if (unlikely(is_link_local(dest))) { | 133 | if (unlikely(is_link_local(dest))) { |
130 | /* Pause frames shouldn't be passed up by driver anyway */ | 134 | /* Pause frames shouldn't be passed up by driver anyway */ |
131 | if (skb->protocol == htons(ETH_P_PAUSE)) | 135 | if (skb->protocol == htons(ETH_P_PAUSE)) |
@@ -145,7 +149,7 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
145 | case BR_STATE_FORWARDING: | 149 | case BR_STATE_FORWARDING: |
146 | 150 | ||
147 | if (br_should_route_hook) { | 151 | if (br_should_route_hook) { |
148 | if (br_should_route_hook(&skb)) | 152 | if (br_should_route_hook(skb)) |
149 | return skb; | 153 | return skb; |
150 | dest = eth_hdr(skb)->h_dest; | 154 | dest = eth_hdr(skb)->h_dest; |
151 | } | 155 | } |