aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2014-07-12 21:00:54 +0100
committerBen Hutchings <ben@decadent.org.uk>2014-08-06 18:07:31 +0100
commit3d4a1eea8aac05f347bbfbf41b9e2f8d6f116926 (patch)
tree44d8bd0e33ddd0b2ba6babfc2cdb11b8782a2ab5 /net/ipv6
parent8bbfe822fbadf05ff84a057bde1e59c198e24aa0 (diff)
downloadkernel_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.c13
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);