From nobody Thu May 2 23:49:57 2024 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7286464C for ; Thu, 6 Oct 2022 06:11:52 +0000 (UTC) Received: by mail-pj1-f66.google.com with SMTP id b15so907807pje.1 for ; Wed, 05 Oct 2022 23:11:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=dSafesNQgHD7ZwadbJT0090Fsu3V5WN0dWI0fRLQpP0=; b=RpUq4sEPrd+16c2DCXSiETgPhT/8oQBhs8ZNHuaDM8EPDXZjj+lQq5vQeLrHf2I7JC lNYiAIpfXs0A61Ag4mnV9zrt7r8cFkNn/E77b+8Q5wnXCXc/D1Mu74mbWEys539NTEfK SaxWFfIG9vZEUbF9vI4rLStI6zbvvercIN5Gen2UkWgHzrasMVz1PS9GXj2tbYcs6Y+Z V7NYdck/FAAHtmOYFmpnucvTMtqek0VOceMbGQ1fFXOPz+fG0P0vJwN0Rz9udHb1can2 1B56Rs9UJLt5CgeHz1sKCLFuyMS6RpXjZ9THPIYJM9DFGdnzsAsyd0YUfghIRpDuiAvr Hd1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=dSafesNQgHD7ZwadbJT0090Fsu3V5WN0dWI0fRLQpP0=; b=s0xW/RcKmrrMpCao3DWHl/YnUIoTq/Sk2kbcZziJLO1gW0vCL4a3dSZZZL0acs4Ixl 1Bmt+5lxRSg5PD+qlRTHS/Mfg3SEAg8W3SxvwydXYpTvd+shz4IJj86WpU3J9YQ1UG7Y sqG/j5Y/Uw/gG29g7HAaKnPhFi8PSiEM577euLLrnDYFpKQbo9zWgRVVmaUbmLUsUGPO IL7AgEx0Y47jSIbRayVpMF7sZcTLwcml8wujIiIFU4WxXsgUMnXAS0FJ6+E6KPuxZn2O Lk8eianTtbhDdaqERGRr4hMsi/4DRsroNJ5ZytMM2CbxHgcD0fj9SfNu8c2x/GpsE7eR ZKgQ== X-Gm-Message-State: ACrzQf0jK7z4hckRcIzduMe8nMN/qwXXX1uuKICGZzVRnis32xqMQsWg k+DiC6GEOh7ZmBw9RtzY+hSfUF4J3jLw9A== X-Google-Smtp-Source: AMsMyM5x1jvmtZ2JYYHxUvVVYAaDGroisNeDn1eEvRCAh+U76xracRyIo3S4EorDs/EAgtzXHb0BUw== X-Received: by 2002:a17:902:ce8f:b0:176:d5af:a175 with SMTP id f15-20020a170902ce8f00b00176d5afa175mr3333085plg.123.1665036711814; Wed, 05 Oct 2022 23:11:51 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id bd12-20020a170902830c00b0017bbd845c17sm11398046plb.158.2022.10.05.23.11.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 23:11:51 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: mathew.j.martineau@linux.intel.com Cc: mptcp@lists.linux.dev, Menglong Dong Subject: [PATCH mptcp-next v4 1/3] mptcp: introduce 'sk' to replace 'sock->sk' in mptcp_listen() Date: Thu, 6 Oct 2022 14:11:20 +0800 Message-Id: <20221006061123.1474224-2-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221006061123.1474224-1-imagedong@tencent.com> References: <20221006061123.1474224-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong 'sock->sk' is used frequently in mptcp_listen(). Therefore, we can introduce the 'sk' and replace 'sock->sk' with it. Signed-off-by: Menglong Dong --- net/mptcp/protocol.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 760404b15cd0..d817fdb2f6ef 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3577,12 +3577,13 @@ static int mptcp_stream_connect(struct socket *sock= , struct sockaddr *uaddr, static int mptcp_listen(struct socket *sock, int backlog) { struct mptcp_sock *msk =3D mptcp_sk(sock->sk); + struct sock *sk =3D sock->sk; struct socket *ssock; int err; =20 pr_debug("msk=3D%p", msk); =20 - lock_sock(sock->sk); + lock_sock(sk); ssock =3D __mptcp_nmpc_socket(msk); if (!ssock) { err =3D -EINVAL; @@ -3590,16 +3591,16 @@ static int mptcp_listen(struct socket *sock, int ba= cklog) } =20 mptcp_token_destroy(msk); - inet_sk_state_store(sock->sk, TCP_LISTEN); - sock_set_flag(sock->sk, SOCK_RCU_FREE); + inet_sk_state_store(sk, TCP_LISTEN); + sock_set_flag(sk, SOCK_RCU_FREE); =20 err =3D ssock->ops->listen(ssock, backlog); - inet_sk_state_store(sock->sk, inet_sk_state_load(ssock->sk)); + inet_sk_state_store(sk, inet_sk_state_load(ssock->sk)); if (!err) - mptcp_copy_inaddrs(sock->sk, ssock->sk); + mptcp_copy_inaddrs(sk, ssock->sk); =20 unlock: - release_sock(sock->sk); + release_sock(sk); return err; } =20 --=20 2.37.2 From nobody Thu May 2 23:49:57 2024 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A02C864C for ; Thu, 6 Oct 2022 06:11:54 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id g28so1151157pfk.8 for ; Wed, 05 Oct 2022 23:11:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=5takVyvCtWINHH9Pi7mbPiBWb+RZKtzoHCCpiaszXhc=; b=S3LdundaUxDkgnKQwE+IGS6cOjPnrs9PJ+Z2kuEXHbWEqwOm8Rjk3mNSaH4gxHbYfF APKOftC/THQNI1332i4r54TlcZNs7qwHNKqOf9l48oFrSs0t+BXU/s691ADc52vBBfdw FVxrqQSpON+1kkwvjE0HcfZY2fSU/7hDFq0FKwz/7LZ4LLtmi0NLcy1cyDg6DThyYE/0 YQwP55SxnTIrT9XtY03lbzeAN8vF8fNCsKWMufyHB/cNuvDzguSxrW2hxtmfkrz5J8hE Qlu4jiNOSosiv0d0W7a/+EaoXbol9EYgQi0t84wEY+EwIW7ZRZA5u9pXc87ROunPWSC8 TGSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=5takVyvCtWINHH9Pi7mbPiBWb+RZKtzoHCCpiaszXhc=; b=sAC6TMLSh+J8rDmJhThwgaAIz4tNyKf4vqNkhN39N+zAl3T0FJh/vI/j143yMoPXFK FnjbwnJLrHiBmNYuUV8vHPPDIT+HVnePgmLTHld5HwMmE9qModeoX5OP0fmXquRglxFv wbUeQW3E3HddU4mVAxvtg0faxAbD7SPnku0mDRzjBK+fbY20UUcV7jefaaK1bDBorg/4 lkYVDTwaccJf0GFXlH/LqybGh94oxwxarfhlgOafJ2z0OMhML+Sq+E+mEMzIInBnTXJO zV7vUGL1Y3vuP4ntwMmyxaRIMd8fmatTa6lK0wh0Imj7em+4rqpcU4Sqz3LH+SuRtY0K Jnmw== X-Gm-Message-State: ACrzQf2ZGqw4/UsoJvazSywTeOhzpoHzIlwtZyz/Se8kIzDipqsQL0TR netl1EkzxGhux5EYWIDSB68= X-Google-Smtp-Source: AMsMyM48k/7WReNMQdzOxMYPkf7CoKykBIRVcP+xR6M999Mq7VRhNTTQIGgPF9q1frxzFhvqIZFkHA== X-Received: by 2002:a63:2212:0:b0:43b:f03d:856a with SMTP id i18-20020a632212000000b0043bf03d856amr3125999pgi.192.1665036713987; Wed, 05 Oct 2022 23:11:53 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id bd12-20020a170902830c00b0017bbd845c17sm11398046plb.158.2022.10.05.23.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 23:11:53 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: mathew.j.martineau@linux.intel.com Cc: mptcp@lists.linux.dev, Menglong Dong Subject: [PATCH mptcp-next v4 2/3] mptcp: add statistics for mptcp socket in use Date: Thu, 6 Oct 2022 14:11:21 +0800 Message-Id: <20221006061123.1474224-3-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221006061123.1474224-1-imagedong@tencent.com> References: <20221006061123.1474224-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong Do the statistics of mptcp socket in use with sock_prot_inuse_add(). Therefore, we can get the count of used mptcp socket from /proc/net/protocols: & cat /proc/net/protocols protocol size sockets memory press maxhdr slab module cl co di ac io= in de sh ss gs se re sp bi br ha uh gp em MPTCPv6 2048 0 0 no 0 yes kernel y n y y y= y y y y y y y n n n y y y n MPTCP 1896 1 0 no 0 yes kernel y n y y y= y y y y y y y n n n y y y n Signed-off-by: Menglong Dong --- v4: - rename MPTCP_DESTROIED to MPTCP_DESTROYED v2: - decrease the statistics for listening mptcp socket inuse with mptcp_listen_inuse_dec() - add MPTCP_DESTROIED flags to store if mptcp_destroy_common() was called on the msk. For fallback case, we need to decrease the statistics only once, and mptcp_destroy_common() can be called more than once. --- net/mptcp/protocol.c | 22 +++++++++++++++++++++- net/mptcp/protocol.h | 1 + net/mptcp/subflow.c | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index d817fdb2f6ef..248a28ffd3d6 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2913,6 +2913,16 @@ static void mptcp_copy_inaddrs(struct sock *msk, con= st struct sock *ssk) inet_sk(msk)->inet_rcv_saddr =3D inet_sk(ssk)->inet_rcv_saddr; } =20 +static void mptcp_listen_inuse_dec(struct sock *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct socket *ssock; + + ssock =3D __mptcp_nmpc_socket(msk); + if (ssock && inet_sk_state_load(ssock->sk) =3D=3D TCP_LISTEN) + sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); +} + static int mptcp_disconnect(struct sock *sk, int flags) { struct mptcp_sock *msk =3D mptcp_sk(sk); @@ -2925,6 +2935,7 @@ static int mptcp_disconnect(struct sock *sk, int flag= s) if (mptcp_sk(sk)->token) mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); =20 + mptcp_listen_inuse_dec(sk); /* msk->subflow is still intact, the following will not free the first * subflow */ @@ -3096,6 +3107,11 @@ void mptcp_destroy_common(struct mptcp_sock *msk, un= signed int flags) skb_rbtree_purge(&msk->out_of_order_queue); mptcp_data_unlock(sk); =20 + if ((__mptcp_check_fallback(msk) && + !test_and_set_bit(MPTCP_DESTROYED, &msk->flags)) || + !sk_unhashed(sk)) + sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); + /* move all the rx fwd alloc into the sk_mem_reclaim_final in * inet_sock_destruct() will dispose it */ @@ -3110,6 +3126,7 @@ static void mptcp_destroy(struct sock *sk) { struct mptcp_sock *msk =3D mptcp_sk(sk); =20 + mptcp_listen_inuse_dec(sk); /* clears msk->subflow, allowing the following to close * even the initial subflow */ @@ -3542,6 +3559,7 @@ static int mptcp_stream_connect(struct socket *sock, = struct sockaddr *uaddr, mptcp_token_destroy(msk); inet_sk_state_store(sock->sk, TCP_SYN_SENT); subflow =3D mptcp_subflow_ctx(ssock->sk); + sock_prot_inuse_add(sock_net(sock->sk), sock->sk->sk_prot, 1); #ifdef CONFIG_TCP_MD5SIG /* no MPTCP if MD5SIG is enabled on this socket or we may run out of * TCP option space. @@ -3596,8 +3614,10 @@ static int mptcp_listen(struct socket *sock, int bac= klog) =20 err =3D ssock->ops->listen(ssock, backlog); inet_sk_state_store(sk, inet_sk_state_load(ssock->sk)); - if (!err) + if (!err) { + sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); mptcp_copy_inaddrs(sk, ssock->sk); + } =20 unlock: release_sock(sk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index c0b5b4628f65..767b1899e59c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -116,6 +116,7 @@ #define MPTCP_WORK_EOF 3 #define MPTCP_FALLBACK_DONE 4 #define MPTCP_WORK_CLOSE_SUBFLOW 5 +#define MPTCP_DESTROYED 6 =20 /* MPTCP socket release cb flags */ #define MPTCP_PUSH_PENDING 1 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 07dd23d0fe04..da6cfa73a3bd 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -747,6 +747,9 @@ static struct sock *subflow_syn_recv_sock(const struct = sock *sk, mptcp_sk(new_msk)->setsockopt_seq =3D ctx->setsockopt_seq; mptcp_pm_new_connection(mptcp_sk(new_msk), child, 1); mptcp_token_accept(subflow_req, mptcp_sk(new_msk)); + sock_prot_inuse_add(sock_net(new_msk), + new_msk->sk_prot, + 1); ctx->conn =3D new_msk; new_msk =3D NULL; =20 --=20 2.37.2 From nobody Thu May 2 23:49:57 2024 Received: from mail-pg1-f195.google.com (mail-pg1-f195.google.com [209.85.215.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4EA864C for ; Thu, 6 Oct 2022 06:11:57 +0000 (UTC) Received: by mail-pg1-f195.google.com with SMTP id 78so957567pgb.13 for ; Wed, 05 Oct 2022 23:11:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=u7lcW4Bg683HfDSH1iijL+2r4PqGfhjxnDSrzqJPet0=; b=mM6m8dyMA9e98m+oDRa1+66KHqGwQ7fdEtJJY7XCCehNjSf2eocsMTZrLdDHUzIRYn 6qsu39HNYfoyWP7P+Ab4y1WHxGT5CJ4+Rw7D3JTSPDe4Co1WK0qW71BReFDUYAjLKrew HZ+mKvmN8Kvvu6UzYK6DFj9nQZ9T+YOklZ/HBe+Yb5oSc88gh8buz422XWbvYGBi+XWB Uq8tRvztBpIWPU5y7mg1p/1DDdKr5mzqqMlMoHAWu9IIwaflG+Cu4MBs3VsN0YwyU4lJ IWHCN/q6RjJuq7c2OIDMTixDG0i2wyYVz2QA+LgNe4KbS4QuVOpMshsaqI/D4alnWwcA lntA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=u7lcW4Bg683HfDSH1iijL+2r4PqGfhjxnDSrzqJPet0=; b=u+sHGdHHF5lb720GuxGTaPF/qpPPw7JudYeN5Fsi4sPRnH92bh5uMCRuF0ds6kbI0V TAUnbmpfI7q4QJGviYSDfYKfax+ELDcXqxCprazdZS0818/MIF9zQFCo08OsG27dlwyA DVi05ILvMYtdbHhMSi8TufPT28yc2j+6DBWdu/PIJtf4OiB7q1F6YZmGMNJFMAyWkmnv wKiXgKvwgN6SniuzmOtpgjMG3u4ymG4VoFwpIht07NDZWdIy7SnvgcaMHShDyoKyTIFP lEz3w2J1se1C/IpM/b3K1MC9jTu+atG/kYZnzOksCAj+fNN6llZnLuJVhN+67Driwe95 1elw== X-Gm-Message-State: ACrzQf2QETwUyjyizDsp9FVMQHbXzGRevpa+RTquywmNl/ljlh1fUN4U clgSFKx5ZUGnrmyGe1sS/Glo0Cwr1lLpGg== X-Google-Smtp-Source: AMsMyM6DDryVdX+/VbgU73UQPGeKOPi9+U0t6S1WNkLcHqdHzEOEwHZFBymG0Jbhn0UpjioaEOBYkA== X-Received: by 2002:a05:6a00:1346:b0:546:ff1e:26ae with SMTP id k6-20020a056a00134600b00546ff1e26aemr3188028pfu.45.1665036717194; Wed, 05 Oct 2022 23:11:57 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id bd12-20020a170902830c00b0017bbd845c17sm11398046plb.158.2022.10.05.23.11.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Oct 2022 23:11:55 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: mathew.j.martineau@linux.intel.com Cc: mptcp@lists.linux.dev, Menglong Dong Subject: [PATCH mptcp-next v4 3/3] selftest: mptcp: add test for mptcp socket in use Date: Thu, 6 Oct 2022 14:11:22 +0800 Message-Id: <20221006061123.1474224-4-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221006061123.1474224-1-imagedong@tencent.com> References: <20221006061123.1474224-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong Add the function chk_msk_inuse() to diag.sh, which is used to check the statistics of mptcp socket in use. As mptcp socket in listen state will be closed randomly after 'accept', we need to get the count of listening mptcp socket through 'ss' command. mptcp_connect command with '-r' flag seems won't exit after flush_pids, therefore we need consider this additional statistics. But after the second flush_pids, it will exit. All tests pass. Signed-off-by: Menglong Dong --- tools/testing/selftests/net/mptcp/diag.sh | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/diag.sh b/tools/testing/self= tests/net/mptcp/diag.sh index 515859a5168b..d969cb45b8a9 100755 --- a/tools/testing/selftests/net/mptcp/diag.sh +++ b/tools/testing/selftests/net/mptcp/diag.sh @@ -141,6 +141,28 @@ chk_msk_listen() nr=3D$(ss -Ml $filter | wc -l) } =20 +chk_msk_inuse() +{ + local nr listen_nr + local expected=3D$1 + + shift 1 + msg=3D$* + + nr=3D$(ip netns exec $ns awk '$1~/^MPTCP$/{print $3}' /proc/net/protocols) + listen_nr=3D$(ss -N $ns -Ml | grep -c LISTEN) + expected=3D$(($expected+$listen_nr)) + + printf "%-50s" "$msg" + + if [ $nr !=3D $expected ]; then + echo "[ fail ] expected $expected found $nr" + ret=3D$test_cnt + else + echo "[ ok ]" + fi +} + # $1: ns, $2: port wait_local_port_listen() { @@ -194,8 +216,11 @@ wait_connected $ns 10000 chk_msk_nr 2 "after MPC handshake " chk_msk_remote_key_nr 2 "....chk remote_key" chk_msk_fallback_nr 0 "....chk no fallback" +chk_msk_inuse 2 "msk in use statistics" flush_pids =20 +# with '-r' flag, client won't exit after flush_pids +chk_msk_inuse 1 "msk in use statistics" =20 echo "a" | \ timeout ${timeout_test} \ @@ -231,6 +256,9 @@ for I in `seq 1 $NR_CLIENTS`; do done =20 wait_msk_nr $((NR_CLIENTS*2)) "many msk socket present" +chk_msk_inuse $((NR_CLIENTS*2+1)) "msk in use statistics" flush_pids =20 +chk_msk_inuse 0 "msk in use statistics" + exit $ret --=20 2.37.2