X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=net%2Fbridge%2Fbr_forward.c;h=864fbbc7b24d0eb1d9769723cdf385c60aba410c;hb=0f45d7f36b766cb668cebfb5d4d2f67b4a8676ba;hp=0dca027ceb80bd3c36d2af4f2fd3d961781cbf81;hpb=ff9144530e9cfe8923e00172e3f8ff83c3b8ff8b;p=powerpc.git diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 0dca027ceb..864fbbc7b2 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c @@ -34,17 +34,21 @@ static inline unsigned packet_length(const struct sk_buff *skb) int br_dev_queue_push_xmit(struct sk_buff *skb) { - /* drop mtu oversized packets except tso */ - if (packet_length(skb) > skb->dev->mtu && !skb_shinfo(skb)->tso_size) + /* drop mtu oversized packets except gso */ + if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb)) kfree_skb(skb); else { #ifdef CONFIG_BRIDGE_NETFILTER /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ - nf_bridge_maybe_copy_header(skb); + if (nf_bridge_maybe_copy_header(skb)) + kfree_skb(skb); + else #endif - skb_push(skb, ETH_HLEN); + { + skb_push(skb, ETH_HLEN); - dev_queue_xmit(skb); + dev_queue_xmit(skb); + } } return 0;