From patchwork Thu Sep 10 19:35:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 1361905 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; 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.a=rsa-sha256 header.s=20161025 header.b=Onbeu+PC; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BnTdx0ngwz9sTv for ; Fri, 11 Sep 2020 05:36:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727058AbgIJTgJ (ORCPT ); Thu, 10 Sep 2020 15:36:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726722AbgIJTfk (ORCPT ); Thu, 10 Sep 2020 15:35:40 -0400 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 255D7C061756 for ; Thu, 10 Sep 2020 12:35:40 -0700 (PDT) Received: by mail-qk1-x741.google.com with SMTP id o16so7292002qkj.10 for ; Thu, 10 Sep 2020 12:35:40 -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=yzuy3mS2lrkDeS7MZAGJqfQvUzhOaWlcvy00vqFK1zA=; b=Onbeu+PChyU7NN/ZTdQi5zhItFgvCcwm1DMiaelclC2tnn+f1IcJcZ2Kej4HhyJxNX bfU3idyFO3eZeW0/oIuVZucyij88cyCLqRjLK7hkXRbXL77kgmwOvAu97l1LEGT+ktkM yWZkcx26PTWwtcLYqNHf2cj6PnTqg0eGjcMlh/flhcAbBoRFGAIPyGP4voi0Dqpj7cbK xVRGIufO/TZI13BhCgYdpjjqwqHsi4Lvp2Li/4/Y0V9TNKOQIXvFt3vTW6l0TbT3GjAJ rwKhpD2uk9/ayGIE6QFIIFJaJnrF4MATddE1MkgaEtlkvUcoVtVc8yHzLf0hbcDa78Q7 pwAg== 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=yzuy3mS2lrkDeS7MZAGJqfQvUzhOaWlcvy00vqFK1zA=; b=WjVpdZyM0B/7gK/luBQ0aPxh6XJeXYYftaJc1GxXcTMJJsrJNb4HdSEq+ApdJ4UdaT 8Z/6pGqy1jz3p5xKXI3yhO6z+0VRHQ8YQoSHRGA6me4lCWoWE+WzLR5Oj6UybfQ6daQE pYroXQ/gg6gMcTsIfsdYvtLQ43HWIe0Rb0H/mmVkK9akx1xVa7GOtrr2ZTmKXSLHnu9Y zIN06fgJaQQA8MDgM1FXDs4ikCGA9G74p9En2duBrYrj6DpI4dTxfzjmjYvtwiv4SfuD lfUMWG83NU3ODz6b7WmvZgs3TtAn7UmLmjTzkMTi9W5UoA06FYJiwYmVbZDDnIc09RX/ mdLQ== X-Gm-Message-State: AOAM533sQhKBtDJsoldmiSNyotJwN0uiQywfSBbijd64t6r792JTxhmK YxEVJZMJcR/23e9FZ/nBgJ49UMiXPEZh9Mh8 X-Google-Smtp-Source: ABdhPJzmdtq5BVUMJl9aUIeVlz5lpPVcUGGUVjODts2X3koY2kq+6YspPjxvwADMu25qQI72zO2teQ== X-Received: by 2002:a37:9c8:: with SMTP id 191mr9534538qkj.292.1599766539412; Thu, 10 Sep 2020 12:35:39 -0700 (PDT) Received: from soy.nyc.corp.google.com ([2620:0:1003:312:7220:84ff:fe09:3008]) by smtp.gmail.com with ESMTPSA id f13sm7735484qko.122.2020.09.10.12.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 12:35:38 -0700 (PDT) From: Neal Cardwell To: Alexei Starovoitov Cc: netdev@vger.kernel.org, Neal Cardwell , Yuchung Cheng , Kevin Yang , Eric Dumazet , Lawrence Brakmo Subject: [PATCH bpf-next v3 1/5] tcp: only init congestion control if not initialized already Date: Thu, 10 Sep 2020 15:35:32 -0400 Message-Id: <20200910193536.2980613-2-ncardwell.kernel@gmail.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200910193536.2980613-1-ncardwell.kernel@gmail.com> References: <20200910193536.2980613-1-ncardwell.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: Neal Cardwell Change tcp_init_transfer() to only initialize congestion control if it has not been initialized already. With this new approach, we can arrange things so that if the EBPF code sets the congestion control by calling setsockopt(TCP_CONGESTION) then tcp_init_transfer() will not re-initialize the CC module. This is an approach that has the following beneficial properties: (1) This allows CC module customizations made by the EBPF called in tcp_init_transfer() to persist, and not be wiped out by a later call to tcp_init_congestion_control() in tcp_init_transfer(). (2) Does not flip the order of EBPF and CC init, to avoid causing bugs for existing code upstream that depends on the current order. (3) Does not cause 2 initializations for for CC in the case where the EBPF called in tcp_init_transfer() wants to set the CC to a new CC algorithm. (4) Allows follow-on simplifications to the code in net/core/filter.c and net/ipv4/tcp_cong.c, which currently both have some complexity to special-case CC initialization to avoid double CC initialization if EBPF sets the CC. Signed-off-by: Neal Cardwell Acked-by: Yuchung Cheng Acked-by: Kevin Yang Signed-off-by: Eric Dumazet Cc: Lawrence Brakmo --- include/net/inet_connection_sock.h | 3 ++- net/ipv4/tcp.c | 1 + net/ipv4/tcp_cong.c | 3 ++- net/ipv4/tcp_input.c | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h index c738abeb3265..dc763ca9413c 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h @@ -96,7 +96,8 @@ struct inet_connection_sock { void (*icsk_clean_acked)(struct sock *sk, u32 acked_seq); struct hlist_node icsk_listen_portaddr_node; unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu); - __u8 icsk_ca_state:6, + __u8 icsk_ca_state:5, + icsk_ca_initialized:1, icsk_ca_setsockopt:1, icsk_ca_dst_locked:1; __u8 icsk_retransmits; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 57a568875539..7360d3db2b61 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2698,6 +2698,7 @@ int tcp_disconnect(struct sock *sk, int flags) if (icsk->icsk_ca_ops->release) icsk->icsk_ca_ops->release(sk); memset(icsk->icsk_ca_priv, 0, sizeof(icsk->icsk_ca_priv)); + icsk->icsk_ca_initialized = 0; tcp_set_ca_state(sk, TCP_CA_Open); tp->is_sack_reneg = 0; tcp_clear_retrans(tp); diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 62878cf26d9c..d18d7a1ce4ce 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -176,7 +176,7 @@ void tcp_assign_congestion_control(struct sock *sk) void tcp_init_congestion_control(struct sock *sk) { - const struct inet_connection_sock *icsk = inet_csk(sk); + struct inet_connection_sock *icsk = inet_csk(sk); tcp_sk(sk)->prior_ssthresh = 0; if (icsk->icsk_ca_ops->init) @@ -185,6 +185,7 @@ void tcp_init_congestion_control(struct sock *sk) INET_ECN_xmit(sk); else INET_ECN_dontxmit(sk); + icsk->icsk_ca_initialized = 1; } static void tcp_reinit_congestion_control(struct sock *sk, diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 4337841faeff..0e5ac0d33fd3 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5894,8 +5894,10 @@ void tcp_init_transfer(struct sock *sk, int bpf_op, struct sk_buff *skb) tp->snd_cwnd = tcp_init_cwnd(tp, __sk_dst_get(sk)); tp->snd_cwnd_stamp = tcp_jiffies32; + icsk->icsk_ca_initialized = 0; bpf_skops_established(sk, bpf_op, skb); - tcp_init_congestion_control(sk); + if (!icsk->icsk_ca_initialized) + tcp_init_congestion_control(sk); tcp_init_buffer_space(sk); } From patchwork Thu Sep 10 19:35:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 1361908 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; 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.a=rsa-sha256 header.s=20161025 header.b=nUdv6TKl; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BnTfw3nF5z9sTv for ; Fri, 11 Sep 2020 05:37:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727901AbgIJTgu (ORCPT ); Thu, 10 Sep 2020 15:36:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725803AbgIJTfl (ORCPT ); Thu, 10 Sep 2020 15:35:41 -0400 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0AAF4C061757 for ; Thu, 10 Sep 2020 12:35:41 -0700 (PDT) Received: by mail-qk1-x741.google.com with SMTP id g72so7287773qke.8 for ; Thu, 10 Sep 2020 12:35:41 -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=y1Qjy3REE/DvqVeuoDCxwy818dXeknrvZhb2GWvtIBA=; b=nUdv6TKlDUP0FhNeZ4heaPj1d4St+l3qKYYO3tXTjo6UAF/3Rtfu6mMV0bie+iT/qu /sJUmVZAuPnTEhwc4KZsPL9vvo+2J2NWzqkHLRHmNlJ8Myvh7Mdd+JKEBf4OhzDI732g 6nwziRl1edDb/q1o21gy/TWMSNc0ckM37RrIhdFgjSdSbpxC0uZHNvzTIhnENPZyuC++ vhpwEB5hmJc48sf/uUeEGvPUqcY8Vs7zMWAIryq5uYIPhw637aKE/+otQaaa8XepApid 0GAR55WjhtCetUO6NKBrRAkZVMEtb+LtUEgEYgdkejnX59MicR15XI6pNxHusyGB1KzQ PscQ== 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=y1Qjy3REE/DvqVeuoDCxwy818dXeknrvZhb2GWvtIBA=; b=BxOq5t1PLTOHG48tAMUsOuM6ZcFT53GA/q5LWfSdmW/5USg21lUEO0nFz7C4/Q3Mvc N9Af4kMknUcsriqHeerGWWIUX9ftBjdIV57N0pGU33s+PbMUYXQWMtcRtztxP3ZfL8Ad kFGy/IrjGkXiz75JHtaDaeenB7QDbKElGhYntrh6DbtfY7N1QnZZx8rLZiWlhgVWmV42 zHASmUt4vDFuw5b7rbOPUI4fJ5RmwB+ilOrxJN0sadr6OECNzSRTSUfEXehsmOKOl4fw rs/K3EbDlRLvPZd073EHJl9pt67Lqbtju5oLQbrrmNwd7NeB9r984SB+JHVngC/LgtJI 34QA== X-Gm-Message-State: AOAM532EemwqUYwS4v+3DpiZXBDdwyLPADYnkPcPiBLMgbqEgUu8AK7w nBvfvXb00kzFANsruWYr7Jk= X-Google-Smtp-Source: ABdhPJzL5h0rqe0d1/fQ3dAU1WYaa+mSsB35kHaairqhv6PTiDwbK9mcBZBZeYxWE8Caj5AbYgK7Xw== X-Received: by 2002:ae9:e70c:: with SMTP id m12mr9493095qka.91.1599766540338; Thu, 10 Sep 2020 12:35:40 -0700 (PDT) Received: from soy.nyc.corp.google.com ([2620:0:1003:312:7220:84ff:fe09:3008]) by smtp.gmail.com with ESMTPSA id f13sm7735484qko.122.2020.09.10.12.35.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 12:35:39 -0700 (PDT) From: Neal Cardwell To: Alexei Starovoitov Cc: netdev@vger.kernel.org, Neal Cardwell , Yuchung Cheng , Kevin Yang , Eric Dumazet , Lawrence Brakmo Subject: [PATCH bpf-next v3 2/5] tcp: simplify EBPF TCP_CONGESTION to always init CC Date: Thu, 10 Sep 2020 15:35:33 -0400 Message-Id: <20200910193536.2980613-3-ncardwell.kernel@gmail.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200910193536.2980613-1-ncardwell.kernel@gmail.com> References: <20200910193536.2980613-1-ncardwell.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: Neal Cardwell Now that the previous patch ensures we don't initialize the congestion control twice, when EBPF sets the congestion control algorithm at connection establishment we can simplify the code by simply initializing the congestion control module at that time. Signed-off-by: Neal Cardwell Acked-by: Yuchung Cheng Acked-by: Kevin Yang Signed-off-by: Eric Dumazet Cc: Lawrence Brakmo --- net/core/filter.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index 47eef9a0be6a..067f6759a68f 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4313,8 +4313,6 @@ static const struct bpf_func_proto bpf_get_socket_uid_proto = { .arg1_type = ARG_PTR_TO_CTX, }; -#define SOCKOPT_CC_REINIT (1 << 0) - static int _bpf_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen, u32 flags) { @@ -4449,13 +4447,12 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, sk->sk_prot->setsockopt == tcp_setsockopt) { if (optname == TCP_CONGESTION) { char name[TCP_CA_NAME_MAX]; - bool reinit = flags & SOCKOPT_CC_REINIT; strncpy(name, optval, min_t(long, optlen, TCP_CA_NAME_MAX-1)); name[TCP_CA_NAME_MAX-1] = 0; ret = tcp_set_congestion_control(sk, name, false, - reinit, true); + true, true); } else { struct inet_connection_sock *icsk = inet_csk(sk); struct tcp_sock *tp = tcp_sk(sk); @@ -4652,8 +4649,6 @@ BPF_CALL_5(bpf_sock_ops_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, int, level, int, optname, char *, optval, int, optlen) { u32 flags = 0; - if (bpf_sock->op > BPF_SOCK_OPS_NEEDS_ECN) - flags |= SOCKOPT_CC_REINIT; return _bpf_setsockopt(bpf_sock->sk, level, optname, optval, optlen, flags); } From patchwork Thu Sep 10 19:35:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 1361906 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; 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.a=rsa-sha256 header.s=20161025 header.b=O9Sz5hNW; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BnTfJ6sw1z9sV5 for ; Fri, 11 Sep 2020 05:36:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727870AbgIJTgX (ORCPT ); Thu, 10 Sep 2020 15:36:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726755AbgIJTfm (ORCPT ); Thu, 10 Sep 2020 15:35:42 -0400 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BEF4C0613ED for ; Thu, 10 Sep 2020 12:35:42 -0700 (PDT) Received: by mail-qt1-x844.google.com with SMTP id n18so5852869qtw.0 for ; Thu, 10 Sep 2020 12:35:42 -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=4NVvlx0Y06jzusDaZ6IoBQMLf9wBMnk5hk4bhYfrbF8=; b=O9Sz5hNWhATnTUNiYf3UGLUufvuzzLSxfcu0boUs38EcmxBqpYnGydHu2ebKnMHEKk Rv5iNW6coIzPPkjq2sudtMqrg7Hx/wiDo7mTXfiBp4dfEjxN3NZ0BBMv4ycKmWTg128L eXmWDa9i7uicUhp44J1ma00dD/FPnVQ18efb5Sjyvm2/rjrm65q96TQgA43Lwsqtt5O6 I2eTuaUrjJe8Obru4oPQY9hbpu+BbEVN5ckiIlsOkr5X7CLXU8aQVKUik7TfGou4qpH3 xnHOXh2P49n+wee6/9kn0LYCgnhOXHb9NIQ3dD9Gza3z6K75myiJH7bvtwRlRtjGbvXO pVhA== 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=4NVvlx0Y06jzusDaZ6IoBQMLf9wBMnk5hk4bhYfrbF8=; b=hPy3UTUs9UZjVsBEnOIl3ZmU96VkItMzlnuaXPpLc8Il4anJb5Su//5Fpuw41b00bN iyQF5dtwZWJTbgYVGYEPUWUJ0dBvvzsZ2HOMFJlaoEpRyANxtBbCnh0cE6RI1pTKD0se fDGokfvSb216BpkqxFfgAHFwtap1rNbr3QL6n31NqaimGZX+80+arizthTwN3UE0JmXC WRY0Pj3+08YTJKjGS3k5jhAr5tEuizcL+gS9Y2vX60ZdXqDxDAWxm8MntH0FpMMc0LaI vfsbI2SlhzkY1TRTo0NeTjdAwJOh1iEyUDHFJGC7Ne7NBeZcgpFAggCZ7aEM5jtaWe1a tryA== X-Gm-Message-State: AOAM530xW4LTYAC0iUsxuhj0eY1nbUE63hsrO5urRWS4Y5D4l6Gu9XAs E1cwQJoEXc4rXIVHBq054/k= X-Google-Smtp-Source: ABdhPJz4Iex0y5KVVdZqsnJVgaBMBTll5NGl/3hUklsTJRTDBUGNjrq/1ONxdQUeYwJj7+b41Gf+Zg== X-Received: by 2002:ac8:4757:: with SMTP id k23mr9377376qtp.105.1599766541328; Thu, 10 Sep 2020 12:35:41 -0700 (PDT) Received: from soy.nyc.corp.google.com ([2620:0:1003:312:7220:84ff:fe09:3008]) by smtp.gmail.com with ESMTPSA id f13sm7735484qko.122.2020.09.10.12.35.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 12:35:40 -0700 (PDT) From: Neal Cardwell To: Alexei Starovoitov Cc: netdev@vger.kernel.org, Neal Cardwell , Yuchung Cheng , Kevin Yang , Eric Dumazet , Lawrence Brakmo Subject: [PATCH bpf-next v3 3/5] tcp: simplify tcp_set_congestion_control(): always reinitialize Date: Thu, 10 Sep 2020 15:35:34 -0400 Message-Id: <20200910193536.2980613-4-ncardwell.kernel@gmail.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200910193536.2980613-1-ncardwell.kernel@gmail.com> References: <20200910193536.2980613-1-ncardwell.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: Neal Cardwell Now that the previous patches ensure that all call sites for tcp_set_congestion_control() want to initialize congestion control, we can simplify tcp_set_congestion_control() by removing the reinit argument and the code to support it. Signed-off-by: Neal Cardwell Acked-by: Yuchung Cheng Acked-by: Kevin Yang Signed-off-by: Eric Dumazet Cc: Lawrence Brakmo --- include/net/tcp.h | 2 +- net/core/filter.c | 3 +-- net/ipv4/tcp.c | 2 +- net/ipv4/tcp_cong.c | 11 ++--------- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index e85d564446c6..f857146c17a5 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1104,7 +1104,7 @@ void tcp_get_available_congestion_control(char *buf, size_t len); void tcp_get_allowed_congestion_control(char *buf, size_t len); int tcp_set_allowed_congestion_control(char *allowed); int tcp_set_congestion_control(struct sock *sk, const char *name, bool load, - bool reinit, bool cap_net_admin); + bool cap_net_admin); u32 tcp_slow_start(struct tcp_sock *tp, u32 acked); void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w, u32 acked); diff --git a/net/core/filter.c b/net/core/filter.c index 067f6759a68f..e89d6d7da03c 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4451,8 +4451,7 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname, strncpy(name, optval, min_t(long, optlen, TCP_CA_NAME_MAX-1)); name[TCP_CA_NAME_MAX-1] = 0; - ret = tcp_set_congestion_control(sk, name, false, - true, true); + ret = tcp_set_congestion_control(sk, name, false, true); } else { struct inet_connection_sock *icsk = inet_csk(sk); struct tcp_sock *tp = tcp_sk(sk); diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 7360d3db2b61..e58ab9db73ff 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3050,7 +3050,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, int optname, name[val] = 0; lock_sock(sk); - err = tcp_set_congestion_control(sk, name, true, true, + err = tcp_set_congestion_control(sk, name, true, ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)); release_sock(sk); diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index d18d7a1ce4ce..a9b0fb52a1ec 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -341,7 +341,7 @@ int tcp_set_allowed_congestion_control(char *val) * already initialized. */ int tcp_set_congestion_control(struct sock *sk, const char *name, bool load, - bool reinit, bool cap_net_admin) + bool cap_net_admin) { struct inet_connection_sock *icsk = inet_csk(sk); const struct tcp_congestion_ops *ca; @@ -365,15 +365,8 @@ int tcp_set_congestion_control(struct sock *sk, const char *name, bool load, if (!ca) { err = -ENOENT; } else if (!load) { - const struct tcp_congestion_ops *old_ca = icsk->icsk_ca_ops; - if (bpf_try_module_get(ca, ca->owner)) { - if (reinit) { - tcp_reinit_congestion_control(sk, ca); - } else { - icsk->icsk_ca_ops = ca; - bpf_module_put(old_ca, old_ca->owner); - } + tcp_reinit_congestion_control(sk, ca); } else { err = -EBUSY; } From patchwork Thu Sep 10 19:35:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 1361907 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; 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.a=rsa-sha256 header.s=20161025 header.b=nqSDpCsh; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BnTfM2VRvz9sV5 for ; Fri, 11 Sep 2020 05:36:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727900AbgIJTgj (ORCPT ); Thu, 10 Sep 2020 15:36:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726781AbgIJTfn (ORCPT ); Thu, 10 Sep 2020 15:35:43 -0400 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E51CFC061786 for ; Thu, 10 Sep 2020 12:35:42 -0700 (PDT) Received: by mail-qk1-x741.google.com with SMTP id d20so7333972qka.5 for ; Thu, 10 Sep 2020 12:35:42 -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=U+cpNIidHQ6fxKEUVmKluxGPC89GnSlzBt16B2787xM=; b=nqSDpCsh41lrb9OEGALmxFWRmbGN+D5oWaV0BsTWKe5AeTf00ATTTXWtRQMMeXgjJa Sc+qlrI2zKpJWENpFaRHj/CK1BC8mhIxnVgYZJ4q2vhL/znEmIooxKwD/42raeSfxNLJ /1UkIMW+8XEZ/gSwUGvijfjQrhxYDYIA/hcwvr3QLA2nub/gyiPNxN+FkKIAYBG4I338 prZWRUx2cv1KEQbhllXQHJHNNp2vvxbi3HNx7R3a+h5RIzh9LsbTkTTc+uZYfrfZ+mRH xduXonFZ9poyBt2BsZ9srgLp28wVrVOKcjrXxK7CrOVm2a9E2GncSDGPou7TV187fXzl YZ2A== 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=U+cpNIidHQ6fxKEUVmKluxGPC89GnSlzBt16B2787xM=; b=aBbzb6iXWs6NvztqinO2t4QpZ/k/pxGtMXaWP0303jCS7KmT+1Z6ILgSsHs3Oa8sDe /hZDe2cCmQkc1J2rxPdAKyGwyMiL5/ZO8B5aOywfrZGIIQsPFHT2DxxHnEwusXreHvXb n4KAOnlNBoJt4naZpAGIfbhj2xYxh2HGsWQ2YDRu2wtGtmf8WfCE+nFe43lmWmlFZBKn ssxMaAaSeT2panVYbEgNaRxmC+1e2c8e932Iv1TbOI7M7JTLAGa6FKrFnGl8Jhr8l1Q9 o7Y14zNo5TkKFpb1tJVwlGG7OAfoBIJt7xnH3Qy+BmjbeBTq6DIlSgR0ZwGka60Zrz6t fUFA== X-Gm-Message-State: AOAM531SLNhRErZKXJtSd+WCXbCp7IqqODIsXZr4aw09odfMLOm+ZlFy 5YMFE+dKs7pquEJX2B9DGsFGZ805FPX4NMi9 X-Google-Smtp-Source: ABdhPJxc9ZOAG1Zttk1zkLw3nZQAKTcNdudW6exk7fxALIXc1/4rUa3MaFHXmbod6H6VzIs0ycRFww== X-Received: by 2002:a37:62c3:: with SMTP id w186mr9754082qkb.227.1599766542226; Thu, 10 Sep 2020 12:35:42 -0700 (PDT) Received: from soy.nyc.corp.google.com ([2620:0:1003:312:7220:84ff:fe09:3008]) by smtp.gmail.com with ESMTPSA id f13sm7735484qko.122.2020.09.10.12.35.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 12:35:41 -0700 (PDT) From: Neal Cardwell To: Alexei Starovoitov Cc: netdev@vger.kernel.org, Neal Cardwell , Yuchung Cheng , Kevin Yang , Eric Dumazet , Lawrence Brakmo Subject: [PATCH bpf-next v3 4/5] tcp: simplify _bpf_setsockopt(): remove flags argument Date: Thu, 10 Sep 2020 15:35:35 -0400 Message-Id: <20200910193536.2980613-5-ncardwell.kernel@gmail.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200910193536.2980613-1-ncardwell.kernel@gmail.com> References: <20200910193536.2980613-1-ncardwell.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: Neal Cardwell Now that the previous patches have removed the code that uses the flags argument to _bpf_setsockopt(), we can remove that argument. Signed-off-by: Neal Cardwell Acked-by: Yuchung Cheng Acked-by: Kevin Yang Signed-off-by: Eric Dumazet Cc: Lawrence Brakmo --- net/core/filter.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index e89d6d7da03c..d266c6941967 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4314,7 +4314,7 @@ static const struct bpf_func_proto bpf_get_socket_uid_proto = { }; static int _bpf_setsockopt(struct sock *sk, int level, int optname, - char *optval, int optlen, u32 flags) + char *optval, int optlen) { char devname[IFNAMSIZ]; int val, valbool; @@ -4611,9 +4611,7 @@ static int _bpf_getsockopt(struct sock *sk, int level, int optname, BPF_CALL_5(bpf_sock_addr_setsockopt, struct bpf_sock_addr_kern *, ctx, int, level, int, optname, char *, optval, int, optlen) { - u32 flags = 0; - return _bpf_setsockopt(ctx->sk, level, optname, optval, optlen, - flags); + return _bpf_setsockopt(ctx->sk, level, optname, optval, optlen); } static const struct bpf_func_proto bpf_sock_addr_setsockopt_proto = { @@ -4647,9 +4645,7 @@ static const struct bpf_func_proto bpf_sock_addr_getsockopt_proto = { BPF_CALL_5(bpf_sock_ops_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, int, level, int, optname, char *, optval, int, optlen) { - u32 flags = 0; - return _bpf_setsockopt(bpf_sock->sk, level, optname, optval, optlen, - flags); + return _bpf_setsockopt(bpf_sock->sk, level, optname, optval, optlen); } static const struct bpf_func_proto bpf_sock_ops_setsockopt_proto = { From patchwork Thu Sep 10 19:35:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neal Cardwell X-Patchwork-Id: 1361910 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; 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.a=rsa-sha256 header.s=20161025 header.b=KoJqjh90; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BnTgH3zr5z9sTv for ; Fri, 11 Sep 2020 05:37:31 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727058AbgIJTgu (ORCPT ); Thu, 10 Sep 2020 15:36:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbgIJTgB (ORCPT ); Thu, 10 Sep 2020 15:36:01 -0400 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBA3AC061795 for ; Thu, 10 Sep 2020 12:35:43 -0700 (PDT) Received: by mail-qv1-xf41.google.com with SMTP id db4so3951365qvb.4 for ; Thu, 10 Sep 2020 12:35:43 -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=sbLrAjHEicejYQwCS7LtXSjDNtzl79GZWNsQFcCLCUc=; b=KoJqjh90741y0xJ6Orny3csrEmvi3uFlCBat90ZGtWvfMc/gcHOsPLbTfxJRFkSVZ4 Z/kS9vlLBKW3P0ffGxfwl64xiBv0zv1pmwjraq1tByjGzRSnM1hdvS5YyTisCGyJ3IR5 LMVlC/4IjI1QQk7GIso9YVnpAHok0l32YD9hGUaaP5hGkQVPOl0AzeAWHT30oP0sIA3Q GYQ7F386PIFnmrCk3A2Q7NhsMaeCY9hepyodAAHwBsft0qxgJ/7YdUr17dktlipIMz8O HsUDXkEDGex9sTIXh0+mmMKhMqVGPgfcu7qWS31EBMLlV4Gg91MpvYnJko1Vj4FUo/+6 KETw== 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=sbLrAjHEicejYQwCS7LtXSjDNtzl79GZWNsQFcCLCUc=; b=A+izVfv/Tw38+5C+5m7vIeGKVrsTZWm8qZ0XUZQUlh2pnr7Ek3Rvex9DDqy0eS0iwu hilqyaBSQZGGyrxJzL8tzsciaOcvIdcrGkFJacdF3Z5FcF6uTF1tl2BCtbNmlSGw7GN/ QIvVJA6RNa5ltt+Tg8jJbP2WUR/DHxF9IesUeXfa0d0+0lg5e7Hm57OWz1lUm1q4BZgQ je6C7fQiYT+C4OB+NQK6GHOs6LoSWEJhCR1M2S15nxD7PWjVpV92TfoKnqGkhbfB4YOd 4xjpUxrXOeeh9GQbNF37j93DO+vTSrrgDsv6AKqCKsyYSlMMhSjnp/epR3sQn5pyScFM Mo9A== X-Gm-Message-State: AOAM53161lCvm+6PmfaikdNZCqNh40K4mYZBjHfyX3xE0+y4659wxd6/ 2wk1XpV/NNlKAj/gmwlYkFM= X-Google-Smtp-Source: ABdhPJwslwe1CWWUgBDfRofmYx6ztM259qUlz7amMNyGU08b8BKwriKqcK3DuyE78avTM3YOBpnBIg== X-Received: by 2002:a0c:c492:: with SMTP id u18mr9916090qvi.18.1599766543234; Thu, 10 Sep 2020 12:35:43 -0700 (PDT) Received: from soy.nyc.corp.google.com ([2620:0:1003:312:7220:84ff:fe09:3008]) by smtp.gmail.com with ESMTPSA id f13sm7735484qko.122.2020.09.10.12.35.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 12:35:42 -0700 (PDT) From: Neal Cardwell To: Alexei Starovoitov Cc: netdev@vger.kernel.org, Neal Cardwell , Martin KaFai Lau , Lawrence Brakmo , Eric Dumazet , Yuchung Cheng , Kevin Yang Subject: [PATCH bpf-next v3 5/5] tcp: simplify tcp_set_congestion_control() load=false case Date: Thu, 10 Sep 2020 15:35:36 -0400 Message-Id: <20200910193536.2980613-6-ncardwell.kernel@gmail.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200910193536.2980613-1-ncardwell.kernel@gmail.com> References: <20200910193536.2980613-1-ncardwell.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: Neal Cardwell Simplify tcp_set_congestion_control() by removing the initialization code path for the !load case. There are only two call sites for tcp_set_congestion_control(). The EBPF call site is the only one that passes load=false; it also passes cap_net_admin=true. Because of that, the exact same behavior can be achieved by removing the special if (!load) branch of the logic. Both before and after this commit, the EBPF case will call bpf_try_module_get(), and if that succeeds then call tcp_reinit_congestion_control() or if that fails then return EBUSY. Note that this returns the logic to a structure very similar to the structure before: commit 91b5b21c7c16 ("bpf: Add support for changing congestion control") except that the CAP_NET_ADMIN status is passed in as a function argument. This clean-up was suggested by Martin KaFai Lau. Signed-off-by: Neal Cardwell Suggested-by: Martin KaFai Lau Cc: Lawrence Brakmo Cc: Eric Dumazet Cc: Yuchung Cheng Cc: Kevin Yang --- net/ipv4/tcp_cong.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index a9b0fb52a1ec..db47ac24d057 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -362,21 +362,14 @@ int tcp_set_congestion_control(struct sock *sk, const char *name, bool load, goto out; } - if (!ca) { + if (!ca) err = -ENOENT; - } else if (!load) { - if (bpf_try_module_get(ca, ca->owner)) { - tcp_reinit_congestion_control(sk, ca); - } else { - err = -EBUSY; - } - } else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || cap_net_admin)) { + else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || cap_net_admin)) err = -EPERM; - } else if (!bpf_try_module_get(ca, ca->owner)) { + else if (!bpf_try_module_get(ca, ca->owner)) err = -EBUSY; - } else { + else tcp_reinit_congestion_control(sk, ca); - } out: rcu_read_unlock(); return err;