Re: [PATCH 2/2] net: ip, ipv6: handle gso skbs in forwarding path
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2014-02-09 02:55:09
On Tue, Jan 28, 2014 at 08:34:43AM -0800, Eric Dumazet wrote:
On Tue, 2014-01-28 at 09:57 +0100, Florian Westphal wrote:quoted
Eric Dumazet [off-list ref] wrote:quoted
quoted
+ do { + struct sk_buff *nskb = segs->next; + int err; + + segs->next = NULL; + err = dst_output(segs); + + if (err && ret == 0) + ret = err; + segs = nskb; + } while (segs); + + return ret; +} +Its still unclear if this is the best strategy. TCP stream not using DF flag are very unlikely to care if we adjust their MTU (lowering gso_size) at this point ?Thanks for this suggestion. It would indeed be nice to avoid sw segmentation. I tried: static void ip_gso_adjust_seglen(struct sk_buff *skb) { unsigned int mtu; if (!skb_is_gso(skb)) return; mtu = ip_dst_mtu_maybe_forward(skb_dst(skb), true); skb_shinfo(skb)->gso_size = mtu - sizeof(struct iphdr); } But this yields [ 28.644776] kernel BUG at net/net/core/skbuff.c:2984!Yep, lets CC Herbert Xu, as he 'owns' skb_segment()
IMHO we should just stop merging ~DF packets altogether, at least for TCP. Cheers, -- Email: Herbert Xu [off-list ref] Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt