diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2014-07-12 21:00:54 +0100 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2014-08-06 18:07:31 +0100 |
commit | 3d4a1eea8aac05f347bbfbf41b9e2f8d6f116926 (patch) | |
tree | 44d8bd0e33ddd0b2ba6babfc2cdb11b8782a2ab5 /net/ipv6 | |
parent | 8bbfe822fbadf05ff84a057bde1e59c198e24aa0 (diff) | |
download | kernel_samsung_smdk4412-3d4a1eea8aac05f347bbfbf41b9e2f8d6f116926.zip kernel_samsung_smdk4412-3d4a1eea8aac05f347bbfbf41b9e2f8d6f116926.tar.gz kernel_samsung_smdk4412-3d4a1eea8aac05f347bbfbf41b9e2f8d6f116926.tar.bz2 |
Revert "net: ip, ipv6: handle gso skbs in forwarding path"
This reverts commit caa5344994778a2b4725b2d75c74430f76925e4a, which
was commit fe6cc55f3a9a053482a76f5a6b2257cee51b4663 upstream. In 3.2,
the transport header length is not calculated in the forwarding path,
so skb_gso_network_seglen() returns an incorrect result. We also have
problems due to the local_df flag not being set correctly.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ip6_output.c | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 14753d3..064b5c9 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -381,17 +381,6 @@ static inline int ip6_forward_finish(struct sk_buff *skb) return dst_output(skb); } -static bool ip6_pkt_too_big(const struct sk_buff *skb, unsigned int mtu) -{ - if (skb->len <= mtu || skb->local_df) - return false; - - if (skb_is_gso(skb) && skb_gso_network_seglen(skb) <= mtu) - return false; - - return true; -} - int ip6_forward(struct sk_buff *skb) { struct dst_entry *dst = skb_dst(skb); @@ -515,7 +504,7 @@ int ip6_forward(struct sk_buff *skb) if (mtu < IPV6_MIN_MTU) mtu = IPV6_MIN_MTU; - if (ip6_pkt_too_big(skb, mtu)) { + if (skb->len > mtu && !skb_is_gso(skb)) { /* Again, force OUTPUT device used as source address */ skb->dev = dst->dev; icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); |