Thread (26 messages) 26 messages, 5 authors, 2014-02-10

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help