From patchwork Fri Mar 22 15:14:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Willem de Bruijn X-Patchwork-Id: 1061297 Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="I8yQh64L"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44QnJy1WTnz9sRk for ; Sat, 23 Mar 2019 02:15:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726875AbfCVPPN (ORCPT ); Fri, 22 Mar 2019 11:15:13 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:39071 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726041AbfCVPPK (ORCPT ); Fri, 22 Mar 2019 11:15:10 -0400 Received: by mail-qk1-f194.google.com with SMTP id c189so1413524qke.6 for ; Fri, 22 Mar 2019 08:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QrTIattnnzoIoCXnBhPZLw71a4gsLg0y5JBNqRqRd9A=; b=I8yQh64L5/sei1ZFgULSDjdbcZrts3eqPPegz2hruKJgFS1Pke5C5sIIMGLCwQlFuy 2L1llrc9zmJpxIgbrBoLLwNBMnDt4LPD2b8BZZu/uevFi9TyOeSUTOlZjtrZmt06O2Fh WdfEAdNmbG8l9kJELHNkUz5kfZ+gojZs0YOo/mzejzNpuULZonZ9sEn4IXHkND7+kAsN IBugNRqE4aCndLdS57bCxtwdhLW/UbT+1In3WJs7rHbVPCwO1sSvaFGUTWhNTg2anj9G TxIClCd6ohHV4VmoRlUTHlwKKhv7PQJH1MFtIzAvf9DiSErD5KZ11sAFejLisjMIlQEg Shdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QrTIattnnzoIoCXnBhPZLw71a4gsLg0y5JBNqRqRd9A=; b=c/BwdyaHUF46dkrsNwc9LKDzCIVi6/Hj8aY4eVsIFb3qLeBcd4pR03hmSnXZS5vtFs f7vsSVeXQtIuGkm0QFoetpvqDMfNc/xCVSVZMxmgX4hoMLQVq+t8kJBm8sPFVxmfNy4K a24Ox9Fa43fOENShn+/8J0SdFA+faQqfTHCj/17nLGvpVjZekYOTtLGvT4nNmortQGkp feNpcLyOVVXpforZI/zsQr/NT0kNKqTRWqOGr50UeWr8kpiTTvNIlost4GaeWSOMTh28 nMrW4P5jIlbEGmxLiBd7E2NKLIGUblpTK0Hj5W4NaGgIR2DrIjs+FupdiSm4Cgw3OI7r ZWvA== X-Gm-Message-State: APjAAAXT4yox66Z+BO3hIHqo70DOoJS/Kxf67vBE/6KZz/A4Y0J5+8/o t7319TKPOXkPWfVcetEbQSSVz208 X-Google-Smtp-Source: APXvYqxVAZQH9TrLLAnSpLenjWApZswNh1p3OQ+FrN5yF7O4C4y0OwW6aTiGmTfbYFQLUPxhRdSolg== X-Received: by 2002:a37:b587:: with SMTP id e129mr8165515qkf.145.1553267708724; Fri, 22 Mar 2019 08:15:08 -0700 (PDT) Received: from willemb1.nyc.corp.google.com ([2620:0:1003:315:3fa1:a34c:1128:1d39]) by smtp.gmail.com with ESMTPSA id v4sm4631317qtq.94.2019.03.22.08.15.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Mar 2019 08:15:07 -0700 (PDT) From: Willem de Bruijn To: netdev@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, alan.maguire@oracle.com, Willem de Bruijn Subject: [PATCH bpf-next v2 01/13] bpf: in bpf_skb_adjust_room avoid copy in tx fast path Date: Fri, 22 Mar 2019 11:14:52 -0400 Message-Id: <20190322151504.89983-2-willemdebruijn.kernel@gmail.com> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog In-Reply-To: <20190322151504.89983-1-willemdebruijn.kernel@gmail.com> References: <20190322151504.89983-1-willemdebruijn.kernel@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Willem de Bruijn bpf_skb_adjust_room calls skb_cow on grow. This expensive operation can be avoided in the fast path when the only other clone has released the header. This is the common case for TCP, where one headerless clone is kept on the retransmit queue. It is safe to do so even when touching the gso fields in skb_shinfo. Regular tunnel encap with iptunnel_handle_offloads takes the same optimization. The tcp stack unclones in the unlikely case that it accesses these fields through headerless clones packets on the retransmit queue (see __tcp_retransmit_skb). If any other clones are present, e.g., from packet sockets, skb_cow_head returns the same value as skb_cow(). Signed-off-by: Willem de Bruijn --- net/core/filter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/core/filter.c b/net/core/filter.c index d2511fe46db3..d21e1acdde29 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2971,7 +2971,7 @@ static int bpf_skb_net_grow(struct sk_buff *skb, u32 len_diff) if (skb_is_gso(skb) && !skb_is_gso_tcp(skb)) return -ENOTSUPP; - ret = skb_cow(skb, len_diff); + ret = skb_cow_head(skb, len_diff); if (unlikely(ret < 0)) return ret;