Re: gso: Attempt to handle mega-GRO packets
From: Eric Dumazet <hidden>
Date: 2013-11-06 01:45:51
On Wed, 2013-11-06 at 09:30 +0800, Herbert Xu wrote:
quoted hunk ↗ jump to hunk
Here is a totally untested patch that tries to trivially process these new frags + frag_list skbs. It should actually be trivial to make this generate TSO packets by just adding a gso_ok check and short-circuit.diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3735fad..ec8e8bc 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c@@ -2816,7 +2816,24 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) hsize = len; if (!hsize && i >= nfrags) { - BUG_ON(fskb->len != len); + if (fskb->len != len) { + SKB_FRAG_ASSERT(fskb); + + nskb = skb_segment(fskb, features); + + err = PTR_ERR(nskb); + if (IS_ERR(nskb)) + goto err; + err = -ENOMEM; + + if (segs) + tail->next = nskb; + else + segs = nskb; + tail = nskb; + while (tail->next) + tail = tail->next; + } pos += len; nskb = skb_clone(fskb, GFP_ATOMIC);Thanks,
Hmm, I do not think fskb has the headers in the general case. It might work in the GRO case only.