From patchwork Wed Nov 6 12:39:00 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herbert Xu X-Patchwork-Id: 288863 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 0852D2C00B8 for ; Wed, 6 Nov 2013 23:39:14 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756465Ab3KFMjK (ORCPT ); Wed, 6 Nov 2013 07:39:10 -0500 Received: from ringil.hengli.com.au ([178.18.16.133]:41207 "EHLO fornost.hengli.com.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756440Ab3KFMjJ (ORCPT ); Wed, 6 Nov 2013 07:39:09 -0500 Received: from gondolin.me.apana.org.au ([192.168.0.6]) by fornost.hengli.com.au with esmtp (Exim 4.72 #1 (Debian)) id 1Ve2Nz-0004mk-6l; Wed, 06 Nov 2013 23:39:03 +1100 Received: from herbert by gondolin.me.apana.org.au with local (Exim 4.80) (envelope-from ) id 1Ve2Nw-0005I0-Nc; Wed, 06 Nov 2013 20:39:00 +0800 Date: Wed, 6 Nov 2013 20:39:00 +0800 From: Herbert Xu To: Eric Dumazet Cc: Ben Hutchings , David Miller , christoph.paasch@uclouvain.be, netdev@vger.kernel.org, hkchu@google.com, mwdalton@google.com Subject: Re: gso: Attempt to handle mega-GRO packets Message-ID: <20131106123900.GA20259@gondor.apana.org.au> References: <1383059555.5464.33.camel@edumazet-glaptop.roam.corp.google.com> <20131029.194446.2215574000648693370.davem@davemloft.net> <1383091610.1534.29.camel@bwh-desktop.uk.level5networks.com> <1383400897.4291.47.camel@edumazet-glaptop2.roam.corp.google.com> <20131103122824.GA17394@gondor.apana.org.au> <1383496104.4291.69.camel@edumazet-glaptop2.roam.corp.google.com> <20131103163103.GA18894@gondor.apana.org.au> <1383499603.4291.71.camel@edumazet-glaptop2.roam.corp.google.com> <20131104041108.GA22823@gondor.apana.org.au> <20131106013038.GA14894@gondor.apana.org.au> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20131106013038.GA14894@gondor.apana.org.au> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Wed, Nov 06, 2013 at 09:30:38AM +0800, Herbert Xu wrote: > 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. That patch obviously didn't have a chance of working since I missed a continue. Here is a better version. Cheers, diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3735fad..409bd9b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -2816,7 +2816,31 @@ 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; + + BUG_ON(fskb->next && tail->len != len); + + len = fskb->len; + fskb = fskb->next; + continue; + } pos += len; nskb = skb_clone(fskb, GFP_ATOMIC);