741d874
Bugzilla: 1015905
741d874
Upstream-status: 3.13 (should hit stable)
741d874
741d874
From 90e4e23d52fd04f228eed2c3d341136c50058b37 Mon Sep 17 00:00:00 2001
741d874
From: Jiri Pirko <jiri@resnulli.us>
741d874
Date: Wed, 6 Nov 2013 17:52:19 +0100
741d874
Subject: [PATCH 1/2] ip6_output: fragment outgoing reassembled skb properly
741d874
741d874
If reassembled packet would fit into outdev MTU, it is not fragmented
741d874
according the original frag size and it is send as single big packet.
741d874
741d874
The second case is if skb is gso. In that case fragmentation does not happen
741d874
according to the original frag size.
741d874
741d874
This patch fixes these.
741d874
741d874
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
741d874
Signed-off-by: David S. Miller <davem@davemloft.net>
741d874
---
741d874
 net/ipv6/ip6_output.c | 3 ++-
741d874
 1 file changed, 2 insertions(+), 1 deletion(-)
741d874
741d874
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
741d874
index 5b25f85..f80f2fa 100644
741d874
--- a/net/ipv6/ip6_output.c
741d874
+++ b/net/ipv6/ip6_output.c
741d874
@@ -150,7 +150,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
741d874
 static int ip6_finish_output(struct sk_buff *skb)
741d874
 {
741d874
 	if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
741d874
-	    dst_allfrag(skb_dst(skb)))
741d874
+	    dst_allfrag(skb_dst(skb)) ||
741d874
+	    (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
741d874
 		return ip6_fragment(skb, ip6_finish_output2);
741d874
 	else
741d874
 		return ip6_finish_output2(skb);
741d874
-- 
741d874
1.8.3.1
741d874