From nobody Mon Feb 9 04:14:36 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6638:38c:0:0:0:0 with SMTP id y12csp1899658jap; Thu, 6 Jan 2022 16:20:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJyv2w4sg5QIr6cd5obCDlK7Qnk1HRDmHrFlraaVVgLp1DArTZehAmGmfJWTiN22cV5mVav4 X-Received: by 2002:a25:a463:: with SMTP id f90mr83721770ybi.52.1641514858934; Thu, 06 Jan 2022 16:20:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641514858; cv=none; d=google.com; s=arc-20160816; b=u5J4Y00jNx/9Pw5gbU9OtPovHO/gnQ1GGuKWfkgksxFY/LHBPobNvDOt7X5MeZlC/I 9He5uIFaZ5JYTJqjSipi3bEydLDjaAcs3QYPyQ+WHuptGd36mg7Bax1cJKe0QjlOoCNV b5PqKJWgQi6DAZ/gnfZxfoym63DrLHpcs8HdUfsV11GRka1jx338ZNbyOuaHFtlz40eS NnzECp2j8d3y35L0LhHUWc8iLj92tzNwOd108seqvbg3h54A9h1tUn9mW4wk5BGaFsYy q3ZSAvK5uXu3vKHA82Ec6MXJxOUUw9Yyko9j4bHTM1Ht9KlrfsdxJB0XqSRC+XFunQw1 +32Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=c1gi0LQ9T9d3tXG4uegxwJ0rMhUhM76a9oj0nYTlgQg=; b=Vb8+jXkKfkH487jAKH3eKVC10zuT3JVD8UbKOj6Cq7iEWco5bENnQ1v3NcBhIdAOpj RpQMahlkqwLfnPMkyD1dmIAuuIkzeJPOz2Flc/ec+ez8eFvcXuY06gtTcDGsigx2Kzhz y36JoG8Ue7F82XzchpibRLh8gd6dlVHowS41P0Gm3M83Tyaa1ZKSUP0VttF7EU3Ts3I1 7BP43ifT0hn6dIF3BiSH5viX1LnYGedyWGzcV8aieU6k6s1qwp3Yt1mUeSuUY37hUwsu 7fnnvFZJego/xm1KF3E2pD4npOWFtIUtDRGjjgm8pMtaswzkrK9bV34ZeEwk0AveVN6+ Gm6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bF3RcCjO; spf=pass (google.com: domain of mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [2604:1380:1:3600::1]) by mx.google.com with ESMTPS id t9si4099800ybu.97.2022.01.06.16.20.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jan 2022 16:20:58 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) client-ip=2604:1380:1:3600::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bF3RcCjO; spf=pass (google.com: domain of mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2951-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id 731501C0F21 for ; Fri, 7 Jan 2022 00:20:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5DE572CB0; Fri, 7 Jan 2022 00:20:52 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4632D2CAA for ; Fri, 7 Jan 2022 00:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641514851; x=1673050851; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nEUaOYMjQqfID6wwgBBxgtsFSt7zKq2ozbBAjHuOQhk=; b=bF3RcCjOu5jQO21btATmGbLANLF8seBdUPPpzf/2mTphcqJeAdXiNimu LVzHs4Owohic9qptyt3itdpdTJSr1xXo9KIPBTZnA0EFoQeo07u63V4L/ xctXkuEz5q5+9EWE8keQoSIzKIxBSc9A1P8hBnbppQqx/G/xEcPW+rNW7 53NPp90SPuCeU8qhxtdIBXDPJuTxuHJdE6mhJckxdutmRs7NJMZz3zLKg NF+9jqlHrC4g4/9elhke+wfz7KVZ4+1pT0TcmCDKV9xNv+p60aAcd803M EwVJ4tqfCp3z682W++UTG+QL21O9Dxp/RtnyJvjcg4OpD+O4yrTEGDvHQ g==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="329111028" X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="329111028" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:35 -0800 X-IronPort-AV: E=Sophos;i="5.88,268,1635231600"; d="scan'208";a="618508498" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.94.200]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jan 2022 16:20:34 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 04/13] mptcp: cleanup accept and poll Date: Thu, 6 Jan 2022 16:20:17 -0800 Message-Id: <20220107002026.375427-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107002026.375427-1-mathew.j.martineau@linux.intel.com> References: <20220107002026.375427-1-mathew.j.martineau@linux.intel.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: Paolo Abeni After the previous patch, msk->subflow will never be deleted during the whole msk lifetime. We don't need anymore to acquire references to it in mptcp_stream_accept() and we can use the listener subflow accept queue to simplify mptcp_poll() for listener socket. Overall this removes a lock pair and 4 more atomic operations per accept(). Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 25 +++++++------------------ net/mptcp/protocol.h | 1 - net/mptcp/subflow.c | 1 - 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 83f6d6c3e3eb..628cd60c9d0f 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3493,17 +3493,9 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, =20 pr_debug("msk=3D%p", msk); =20 - lock_sock(sock->sk); - if (sock->sk->sk_state !=3D TCP_LISTEN) - goto unlock_fail; - ssock =3D __mptcp_nmpc_socket(msk); if (!ssock) - goto unlock_fail; - - clear_bit(MPTCP_DATA_READY, &msk->flags); - sock_hold(ssock->sk); - release_sock(sock->sk); + return -EINVAL; =20 err =3D ssock->ops->accept(sock, newsock, flags, kern); if (err =3D=3D 0 && !mptcp_is_tcpsk(newsock->sk)) { @@ -3543,14 +3535,7 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, release_sock(newsk); } =20 - if (inet_csk_listen_poll(ssock->sk)) - set_bit(MPTCP_DATA_READY, &msk->flags); - sock_put(ssock->sk); return err; - -unlock_fail: - release_sock(sock->sk); - return -EINVAL; } =20 static __poll_t mptcp_check_readable(struct mptcp_sock *msk) @@ -3596,8 +3581,12 @@ static __poll_t mptcp_poll(struct file *file, struct= socket *sock, =20 state =3D inet_sk_state_load(sk); pr_debug("msk=3D%p state=3D%d flags=3D%lx", msk, state, msk->flags); - if (state =3D=3D TCP_LISTEN) - return test_bit(MPTCP_DATA_READY, &msk->flags) ? EPOLLIN | EPOLLRDNORM := 0; + if (state =3D=3D TCP_LISTEN) { + if (WARN_ON_ONCE(!msk->subflow || !msk->subflow->sk)) + return 0; + + return inet_csk_listen_poll(msk->subflow->sk); + } =20 if (state !=3D TCP_SYN_SENT && state !=3D TCP_SYN_RECV) { mask |=3D mptcp_check_readable(msk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 1a4ca5a202c8..386d1a98ff1d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -111,7 +111,6 @@ #define MPTCP_RST_TRANSIENT BIT(0) =20 /* MPTCP socket flags */ -#define MPTCP_DATA_READY 0 #define MPTCP_NOSPACE 1 #define MPTCP_WORK_RTX 2 #define MPTCP_WORK_EOF 3 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 24bc9d5e87be..d861307f7efe 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1293,7 +1293,6 @@ static void subflow_data_ready(struct sock *sk) if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue)) return; =20 - set_bit(MPTCP_DATA_READY, &msk->flags); parent->sk_data_ready(parent); return; } --=20 2.34.1