X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=net%2Fbridge%2Fbr_forward.c;h=191b861e5e53c25b176d1d36c1475cc6406ee5ae;hb=f431baa55abf8adeed0c718b51deacbc151f58f1;hp=0dca027ceb80bd3c36d2af4f2fd3d961781cbf81;hpb=45c091bb2d453ce4a8b06cf19872ec7a77fc4799;p=powerpc.git diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 0dca027ceb..191b861e5e 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c @@ -34,17 +34,18 @@ 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); -#endif - skb_push(skb, ETH_HLEN); + if (nf_bridge_maybe_copy_header(skb)) + kfree_skb(skb); + else { + skb_push(skb, ETH_HLEN); - dev_queue_xmit(skb); + dev_queue_xmit(skb); + } } return 0;