Message ID | 20160129234424.GC7907@midget.suse.cz |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On Sat, Jan 30, 2016 at 12:44:24AM +0100, Jiri Bohac wrote: > > Is there a situation when xfrm_output_gso() does the right thing? Yes because you've just broken TSO over IPsec. In fact you're remarkably close to the right solution which is to avoid xfrm_output_gso for SKB_GSO_UDP packets. You should also work through all the other types (e.g., tunnels) one-by-one and determine which ones should be fragmented and which ones shouldn't. Cheers,
--- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c @@ -198,7 +198,7 @@ int xfrm_output(struct sock *sk, struct sk_buff *skb) int err; if (skb_is_gso(skb)) - return xfrm_output_gso(net, sk, skb); + return xfrm_output2(net, sk, skb); if (skb->ip_summed == CHECKSUM_PARTIAL) { err = skb_checksum_help(skb);