From patchwork Mon Jul 17 07:32:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 789269 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 3x9w4J099Cz9s8V for ; Mon, 17 Jul 2017 17:32:48 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LBDqGsNI"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751279AbdGQHcp (ORCPT ); Mon, 17 Jul 2017 03:32:45 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:33764 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751257AbdGQHco (ORCPT ); Mon, 17 Jul 2017 03:32:44 -0400 Received: by mail-wr0-f194.google.com with SMTP id 40so1890708wrw.0 for ; Mon, 17 Jul 2017 00:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version:content-transfer-encoding; bh=2oV7mT9hCtzn/aKy+VNrHIk2w/aOUcdN4LyDKlbuKeo=; b=LBDqGsNI2w5+bUKLB3QZZkmCkMUbhSC0tbfJc82RueZ1zOAlp6z2lFjN02ZyV8d3is Nn1dIdMCKmh1QIJogxotcxjUlXPtONj3beDTfPM0hFpM25lmJl4t3VtN4tZLtaE3e7dL cIR7ABCkT0Ms57zI7wL1PoQpEZyci30IqOTNE29PT/Cz0P3d67SzzwJdc+11QTxE+cCD NE5U5f411WDFFdCRDK0XvhdxhuweMuvDmYjYWVMPG0lKIWbCmPa2nOhZG/Nu/ez9aLyi FKdkqqv4wYu0A24jyvTZQ1hVbcsgWERGnah/qfFWTbp1IeFsSxmCMGGa96p5snMyYcht 2QCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version:content-transfer-encoding; bh=2oV7mT9hCtzn/aKy+VNrHIk2w/aOUcdN4LyDKlbuKeo=; b=FLw+fS7i3U1AsxRHo9MqRKGf6H5kMdhTY9hbPz1dvH0ewXAdxcEFqd+QZjnk3tWG8N SE3aB0u/wl4ZAnZUTO48iPJCvcMEYUHU+cxTA/ubKPZutvMKoNAvE1nE+gEyjFMAL+v8 spM9jUs5V/kbPWjajiV1VcEPLznKlaCA4v1TuXrDjl6ve1tqDoFxrDFs6q5+H/5+vfkJ qFUFd2V8mLj3ztR8z43DU3LxQ4dL+DvF2KBQ0YGMNnVjIdGO4HOTcpez7ff9Qhqy+CIR ao/lawzII+NvQT9sMIEJxqR1/RNPUfabPfB9e+4jW8/Vd5m/U4UDy5DPBIDwW9Ac1PTR w++w== X-Gm-Message-State: AIVw111xEEBxAx+u7wtw5o+ol4X9+6q32OyWwdwpKk7JUDnPNo5DZQq9 vHs5pYBf7Y5w1w== X-Received: by 10.223.180.88 with SMTP id v24mr9623769wrd.29.1500276763134; Mon, 17 Jul 2017 00:32:43 -0700 (PDT) Received: from [192.168.0.33] (cxr69-3-82-225-61-184.fbx.proxad.net. [82.225.61.184]) by smtp.googlemail.com with ESMTPSA id 16sm12924828wmk.13.2017.07.17.00.32.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Jul 2017 00:32:41 -0700 (PDT) Message-ID: <1500276760.5566.5.camel@edumazet-glaptop3.roam.corp.google.com> Subject: Re: [PATCH net-next resubmit] skbuff: optimize the pull_pages code in __pskb_pull_tail() From: Eric Dumazet To: Lin Zhang Cc: davem@davemloft.net, netdev@vger.kernel.org Date: Mon, 17 Jul 2017 00:32:40 -0700 In-Reply-To: <1500258126-11235-1-git-send-email-xiaolou4617@gmail.com> References: <1500258126-11235-1-git-send-email-xiaolou4617@gmail.com> X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Mon, 2017-07-17 at 10:22 +0800, Lin Zhang wrote: > In the pull_pages code block, if the first frag size > eat, > we can end the loop in advance to avoid extra copy. > > Signed-off-by: Lin Zhang > --- > net/core/skbuff.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index f990eb8..c00a1df 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -1720,6 +1720,10 @@ void *__pskb_pull_tail(struct sk_buff *skb, int delta) > skb_shinfo(skb)->frags[k].page_offset += eat; > skb_frag_size_sub(&skb_shinfo(skb)->frags[k], eat); > eat = 0; > + if (!i) { > + k = skb_shinfo(skb)->nr_frags; > + break; > + } > } > k++; > } -CC lkml (no need to spam lkml for netdev patches ) Why even reading skb_shinfo(skb)->nr_frags to write it again ? I would use something like : diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 8b11341ed69ad97d34dd3e9b73c8c44ef7c452ff..a562b0e61afa3faf7abdd7f9209ae9096310fb7d 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -1719,13 +1719,15 @@ void *__pskb_pull_tail(struct sk_buff *skb, int delta) if (eat) { skb_shinfo(skb)->frags[k].page_offset += eat; skb_frag_size_sub(&skb_shinfo(skb)->frags[k], eat); + if (!i) + goto end; eat = 0; } k++; } } skb_shinfo(skb)->nr_frags = k; - +end: skb->tail += delta; skb->data_len -= delta;