From nobody Thu May 2 04:05:42 2024 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2048.outbound.protection.outlook.com [40.107.20.48]) (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 280DE4A24 for ; Tue, 18 Oct 2022 11:03:37 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oPV5XluawMDgy4sqRVqGFE+8EU7lw1u63PNRqwcwzktst38+MvGMJeVFpSUPPLeyDdN7TgFyMUgprnIdvg7pQJNU1qlxvNpI6buoTZ67tYy5J28FIOcUqfd/1p3zWwRNkmcBz0MscXeYaqL7Z2a3ACnL2W5AaILjv9oF+SS2vfEEowfHKbPY57wAbL5v6srZt1qW9ttxvYPxtEWBOC0R9CEicAQBpm8FC1yvtEyBGq+dGO5hW/2dl5pVHXQ2wF1pHWfRwyaoF0pX4nndrLOdWBNGJavnomVjqSr+pI+X6lNUBsvC5HQyRJKHRWHRLnPEBckO2YVbrh/uRWNvXL0mzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vEGJYsd6Y2NIw0pE94lIsVdVd0mXbtiupplXsWcP9IU=; b=AQcagzRRMzAkTQfcqdUYT2SxKBVKAeLSgS8+xWPGe1sojpW5h3QToVSYJyH8/fQknqSFR/ADi+cR58EoM//EmJ42r8UtzS+ilIYmXJRzPw4zlU8UDd/wDn1HxgqBhEK4UNSVqKAATYVpfQufXGjqUuXiYKmoelp6SOJROS46O/w7NlJjDxTsr2gHeidMofVA4PFv/CosEjmCdEWXKZDqMkYkTOpLeNYY/fwi/4LtiFsl79KJuJvypuhrndpbpYuGFdvSgydC6pbAtyv51otlZGhyILgvuZJiHjvpI3jAaAlGLX82VHtF8d77FxbxBRQtHDI157/ElLgku8bWzUiLCA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vEGJYsd6Y2NIw0pE94lIsVdVd0mXbtiupplXsWcP9IU=; b=OK3SA3Zl4gG++mVtRU7PVplf7s++TT76SmA8lEQpJ0EcMDam8qEpoBKJdsdOcRZ19q0fc18Ft7heG/O+6eY3Bj133cuokM9SLc31hFxYqyCf9zaHR4uiNm8Wy4bY02P/P11UpyiK4+9lpftAWngZXnJ7L8//MqB1Y0EYfwEP4iLBS26sr88TGw4ZfRR22FmlYCAfAX9sJLV0CQWCmMO091rAws3JTGhzqNgN0EIsfHYZFr6IDgo1AP0m4aV80nL+Cq2nVMUHtFF4+Db9yXjdF0No3pE9maG/UIiiY8OG3pnGxxBLc8BiFBRqhso0sQ8CEAuAqVbqYAh1X2u1cEtqlg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) by PR3PR04MB7369.eurprd04.prod.outlook.com (2603:10a6:102:89::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Tue, 18 Oct 2022 11:03:34 +0000 Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45]) by HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45%7]) with mapi id 15.20.5723.032; Tue, 18 Oct 2022 11:03:34 +0000 From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v9 1/4] Squash to "mptcp: add get_subflow wrappers" Date: Tue, 18 Oct 2022 19:03:09 +0800 Message-Id: <20221018110312.22510-2-geliang.tang@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20221018110312.22510-1-geliang.tang@suse.com> References: <20221018110312.22510-1-geliang.tang@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0002.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::17) To HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0402MB3497:EE_|PR3PR04MB7369:EE_ X-MS-Office365-Filtering-Correlation-Id: acfa5dc6-8b71-4aa7-1180-08dab0f86645 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ziCzyzhnQHyZlJ+ssq9Y0RG3K/4lmMgPg0UVi9Q7+sCkDCO67kxumi9IEm/1PbgZ/izJD3zRwUs2fQiI+YFGgAXuVsf/Oa+fnbcva2ulfImXP2tA+1tOBQMpej4JEAjL0CFJrV5nxSUn+XeYoQiy/BA/wZrzUG8jFSbpKLDUeuo5Mzhi0vaGJEOAPBb74LcZJrJcz8KQsP07EBIcse2xWuqhhp9iWJZoNlaEBhoVJT91bzoYqTOPauSdOIpprBxdiSVDUWmeoxyd2A5kcmGtPS2jS+BUI/kWReXT1GgIgPc4OBcQUsA8KrGPZxFtsll84ERniwE323VMyS5dVG1FvwmJZJ8mvyIVEOosT0Wj99l7blYyOsnGXgsVlrauNKbAxJmeQ64rtIpQd4ZRo5NV/IG+smwcpxJYJ7RJ3PyZITo3pFIAXqbl1rKjmcICzyJDPG/0Abj9+z6fbvK6WXV8dyBbW96B12wYdOlpN85HuYO2EdWlja9BYfKVe9h+3gBdj5h/RVqaShMQYgbojl8DPRpaujujgiyLeiHStyuQ2UMuyTduRMJ464mPDvh3kMC4RX/y1E3Awu6ImLQ5i+1i96QgnBO+3bY1nE0pK0+ELgcl/SqnaaaKr+c3u/r//T9j+HMWCCpMXgI10V5FAlGbrTZJmN9LXrPVIrJXk2ByIvHKieRJLPTawuEwXWr8Q2bwpH4KjJyeQu98OpqejMQqGVBkaDCy3DdGzDuDRWJIs3KHHB6WdapsDeBWSBrPO9yc X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR0402MB3497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(376002)(346002)(396003)(136003)(39860400002)(451199015)(36756003)(86362001)(107886003)(6666004)(83380400001)(38100700002)(66946007)(66556008)(8676002)(5660300002)(316002)(8936002)(6916009)(44832011)(4326008)(6486002)(2906002)(186003)(1076003)(66476007)(2616005)(6506007)(478600001)(26005)(6512007)(41300700001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GKBproH3ykUSgIONL2zmw8L3Hswg6zob6EAHadlCWg66wbQ9LHkmIXORhfhV?= =?us-ascii?Q?7CNi6P8a+nXQSFKBUBvcr2JysEgYmdLULp714o09CzfXrkDxijK5E0BveqNI?= =?us-ascii?Q?D1p0Yj7a6+Oivx+J8FECprzOAIKld96Ylr9gFq08lLXAw8e55afAh0tlE9aQ?= =?us-ascii?Q?HE2LelCeiCTuu1X4nDwtDONzRfhLelhdL2CiMmmUsSAUg18GDbWOYGKvihzh?= =?us-ascii?Q?9A64zlenccwRKDzrlBaRsL6dFaECVf8dJdnf3GY+pxkmQCvlJ7+hRQQpfCGY?= =?us-ascii?Q?KqdKVHz2chUzDqqYoh3mOWMe9K2kMAWCnRzMxq1Gth6SvQcl7SyYt24n06BJ?= =?us-ascii?Q?5aN43ohLvZdGb1Wh+Twe476nyagq+av+w0htV/bWpffMQBnPuhoquetg5Sng?= =?us-ascii?Q?saG4SyIYYATNyzUd/dQO0DttqN3aQ7zeymqiKL9Wtae8GN5dTY9xaDyR/TDC?= =?us-ascii?Q?gDma5qQCCNiva/EOnXz5/gXWrUabxZq0hNQSsXjEU73XuIBZgw+uxeYeG4Vu?= =?us-ascii?Q?I7qcd/8BQxPX9hPj9mxyyF7cFk8hHI+8WXWg1ofckeFFPHGe6y6yFomE+QHV?= =?us-ascii?Q?lsYI8/eQbkzvF6eKHFlzmTKXO43zry46VeDTw15lu8IzaHCG4mZRHKT/54fp?= =?us-ascii?Q?ia7PYNsytWScsyGR8eOeRuGdQubnHDOk6aAzhXJ3PPNgXjgD8hlqbRaO89rs?= =?us-ascii?Q?YFtOlEUrpfYCVs4xNGNL+iqAl5TmJ8gA4ImmcgkdV4I1uizRkRG2GrT8YunQ?= =?us-ascii?Q?zoO3A1qmMaD8X/YDdu8AuW+k2MM6UmC4LZFfZATQ6tLffAfGeWxT5lApRvd1?= =?us-ascii?Q?J22UIcCU/ubopeveIuR+ML3wNPXz7t+auCX78Oom9BIFAfM/dPaDgmzLdiGn?= =?us-ascii?Q?F17aj97r5YibjPT+YxSzb0yipKKsktu3X5vZwcnUwVJTXc51u0MRs75oLRQh?= =?us-ascii?Q?L7Em/5Ll2RYpiyaSIdxo9cWmV1TEvR97SM5KmzF2pey0TZTrNMU/rDPpXTG7?= =?us-ascii?Q?3Pi+r9+km7bMnhsQ+TnBmWAP1g9HvrwkItdTW94EGEGR4wf/yqU7nfXAzEq5?= =?us-ascii?Q?dlmiCjvfvSc9B4w6QwdV4HTKzT1+ZPUiMebHxrjlSMOwTi5AAs+y+4vgRJEm?= =?us-ascii?Q?vdqhXwxq3l49CZIp2xpSeu0KvYzNh4Ag9t27l7P9rR9CBnhCAI0hzqVkI2Sp?= =?us-ascii?Q?4VS6hNjuly7ixmld3+ByGDTPn0kBYv0AJxj42NSGwKu5NrjKS4cQo0Si4CK7?= =?us-ascii?Q?hBUHyIvDMGJlySkM5ONkSaPAYt2SM1vJSPZO/RkCE2TmLGyl8UY0maHcWyZv?= =?us-ascii?Q?XrK1vWJE5rziagZXGH2ldyWnoVgMh+Pxy/6+mKedGPbqtzuCzKXETxmZGpRR?= =?us-ascii?Q?BiqXKdepnNnH8e5uWWnOzOHmqm7C/EqRss5Tj2e95quwSWekAXNINYX8fvec?= =?us-ascii?Q?dP4wswDkrWo3SEpCMJnUirmNwbHrd0j7MoCTRyoEle+uPVavpYM0acKDXQqA?= =?us-ascii?Q?y1IkXAc0zHC+HasJKt3bsUy7Ap+yCdfrBMLKDhy6qSiRJdNBiQCqqUHzfnvG?= =?us-ascii?Q?WxUw93Kpak77P9C6k1ktVeYJqgRU9N70/Tp8FWYneGzHMsakWIx4AGd58qSF?= =?us-ascii?Q?gg=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: acfa5dc6-8b71-4aa7-1180-08dab0f86645 X-MS-Exchange-CrossTenant-AuthSource: HE1PR0402MB3497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 11:03:34.4120 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: w+9WcujqZy6du+2yM6H9hBkg9gdDCxMNCL8jr1lgKmiEwqZW3bjASl10FYUpTUtHgu6g3Vz5txsKRj40I6uolg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR04MB7369 Content-Type: text/plain; charset="utf-8" Please update the commit log: ''' This patch defines two new wrappers mptcp_sched_get_send() and mptcp_sched_get_retrans(), invoke get_subflow() of msk->sched in them. Set the subflow pointers array in struct mptcp_sched_data before invoking get_subflow(), then it can be used in get_subflow() in the BPF contexts. Check the subflow scheduled flags to test which subflow or subflows are picked by the scheduler. Move sock_owned_by_me() and the fallback check code from mptcp_subflow_get_send/retrans() into the wrappers. ''' Signed-off-by: Geliang Tang Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 8 +++--- net/mptcp/protocol.h | 4 +-- net/mptcp/sched.c | 61 +++++++++++++++++++++----------------------- 3 files changed, 35 insertions(+), 38 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3196d2a350f9..1cf8b1c68e09 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1547,7 +1547,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned i= nt flags) int ret =3D 0; =20 prev_ssk =3D ssk; - ssk =3D mptcp_sched_get_send(msk); + ssk =3D mptcp_subflow_get_send(msk); =20 /* First check. If the ssk has changed since * the last round, release prev_ssk @@ -1616,7 +1616,7 @@ static void __mptcp_subflow_push_pending(struct sock = *sk, struct sock *ssk) * check for a different subflow usage only after * spooling the first chunk of data */ - xmit_ssk =3D first ? ssk : mptcp_sched_get_send(mptcp_sk(sk)); + xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(mptcp_sk(sk)); if (!xmit_ssk) goto out; if (xmit_ssk !=3D ssk) { @@ -2500,7 +2500,7 @@ static void __mptcp_retrans(struct sock *sk) mptcp_clean_una_wakeup(sk); =20 /* first check ssk: need to kick "stale" logic */ - ssk =3D mptcp_sched_get_retrans(msk); + ssk =3D mptcp_subflow_get_retrans(msk); dfrag =3D mptcp_rtx_head(sk); if (!dfrag) { if (mptcp_data_fin_enabled(msk)) { @@ -3218,7 +3218,7 @@ void __mptcp_check_push(struct sock *sk, struct sock = *ssk) return; =20 if (!sock_owned_by_user(sk)) { - struct sock *xmit_ssk =3D mptcp_sched_get_send(mptcp_sk(sk)); + struct sock *xmit_ssk =3D mptcp_subflow_get_send(mptcp_sk(sk)); =20 if (xmit_ssk =3D=3D ssk) __mptcp_subflow_push_pending(sk, ssk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 2358a4083eb3..8f48f881adf8 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -643,8 +643,8 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_c= ontext *subflow, bool scheduled); struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk); struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk); -struct sock *mptcp_sched_get_send(struct mptcp_sock *msk); -struct sock *mptcp_sched_get_retrans(struct mptcp_sock *msk); +int mptcp_sched_get_send(struct mptcp_sock *msk); +int mptcp_sched_get_retrans(struct mptcp_sock *msk); =20 static inline bool __tcp_can_send(const struct sock *ssk) { diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index 044c5ec8bbfb..9b128714055a 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -114,67 +114,64 @@ static int mptcp_sched_data_init(struct mptcp_sock *m= sk, bool reinject, for (; i < MPTCP_SUBFLOWS_MAX; i++) data->contexts[i] =3D NULL; =20 + msk->snd_burst =3D 0; + return 0; } =20 -struct sock *mptcp_sched_get_send(struct mptcp_sock *msk) +int mptcp_sched_get_send(struct mptcp_sock *msk) { struct mptcp_sched_data data; struct sock *ssk =3D NULL; - int i; =20 - sock_owned_by_me((struct sock *)msk); + sock_owned_by_me((const struct sock *)msk); =20 /* the following check is moved out of mptcp_subflow_get_send */ if (__mptcp_check_fallback(msk)) { - if (!msk->first) - return NULL; - return __tcp_can_send(msk->first) && - sk_stream_memory_free(msk->first) ? msk->first : NULL; + if (msk->first && + __tcp_can_send(msk->first) && + sk_stream_memory_free(msk->first)) { + mptcp_subflow_set_scheduled(mptcp_subflow_ctx(msk->first), true); + return 0; + } + return -EINVAL; } =20 - if (!msk->sched) - return mptcp_subflow_get_send(msk); + if (!msk->sched) { + ssk =3D mptcp_subflow_get_send(msk); + if (!ssk) + return -EINVAL; + mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true); + return 0; + } =20 mptcp_sched_data_init(msk, false, &data); msk->sched->get_subflow(msk, &data); =20 - for (i =3D 0; i < MPTCP_SUBFLOWS_MAX; i++) { - if (data.contexts[i] && READ_ONCE(data.contexts[i]->scheduled)) { - ssk =3D data.contexts[i]->tcp_sock; - msk->last_snd =3D ssk; - break; - } - } - - return ssk; + return 0; } =20 -struct sock *mptcp_sched_get_retrans(struct mptcp_sock *msk) +int mptcp_sched_get_retrans(struct mptcp_sock *msk) { struct mptcp_sched_data data; struct sock *ssk =3D NULL; - int i; =20 sock_owned_by_me((const struct sock *)msk); =20 /* the following check is moved out of mptcp_subflow_get_retrans */ if (__mptcp_check_fallback(msk)) - return NULL; + return -EINVAL; =20 - if (!msk->sched) - return mptcp_subflow_get_retrans(msk); + if (!msk->sched) { + ssk =3D mptcp_subflow_get_retrans(msk); + if (!ssk) + return -EINVAL; + mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true); + return 0; + } =20 mptcp_sched_data_init(msk, true, &data); msk->sched->get_subflow(msk, &data); =20 - for (i =3D 0; i < MPTCP_SUBFLOWS_MAX; i++) { - if (data.contexts[i] && READ_ONCE(data.contexts[i]->scheduled)) { - ssk =3D data.contexts[i]->tcp_sock; - msk->last_snd =3D ssk; - break; - } - } - - return ssk; + return 0; } --=20 2.35.3 From nobody Thu May 2 04:05:42 2024 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2066.outbound.protection.outlook.com [40.107.21.66]) (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 A38D84A24 for ; Tue, 18 Oct 2022 11:03:45 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N/2QuFYpARfe2yQnihe6ewUYWvTO0d9i5wUh4OWWm8jRjBRPVsFa2bdTkP4cep1nw+ZrLpyvR+bdWyiODXtq/t3VC25zdyghCdso1+VxxENary+gdzcXY8Lc4zPdq+6ZecSE2OK9e0ObSywrRRfT4c02hBIxwQO0D14SMAJ58PR0DQqDnWBLJFsev1ZOiJCxT42rZ71qSxSBJeiiOyyjT/aLGelTVDDyofuSApy+dAPicPPrdBV6uTRbrlp18eIZBIK4lZkfoBoHOQT5o/WYGSsGq9wGV6DfZ7oUgc6CUR9WS25JWza+B0FIQFD5iuubulawEgZkVeOgBreUBgBQ1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Uhp0dWSuwG2t7V/JR43npOnCo1OAysYQyY0K/tlurac=; b=mNlMT/KXQHs1nmagNCmVASWyVdRDgA5Tm+KwByNBeLJBxjCi8GWtwxh93xJFyLp79S1/5I277wMHNEym0kr9IoAO0/xwKmYbPZr6Hqigcv/sVN5bWv63uVEZkyt7Fwd7TQaOxyZirFIiewqOuL9JErZHF2tXU1XwhTo/AujO5BJsx2sQT6THBD+mPDfp6x6qSdA2uFzkt6ikxt3ljGAXIKBTUsm8Desbvc6Fj0Wdyir3brVLJq4u0A9wvi43RjrK1tGRbCFdSEQBQZD+GbbZ9Y1DImswi/2k2SZybtR5qjFFoExuGZpkFLP8OIkyYyq+4KmnFYu94oe9qdF4uGVgyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uhp0dWSuwG2t7V/JR43npOnCo1OAysYQyY0K/tlurac=; b=i1Zcb0AliN3r6L7belQM63VX3LP9mHN5qbTnS4EZL+E5dcavyHOU2TY+KFiDT90k0N8wQfnGRs2emwJag7AD3f5yRFDVSEZAXfxeNKw5/hIHMCNsy7iiEy8p5jd0qzb3BEtWjcpmEAzSfj6JObd4fxm7AhYG9bo8aNBbmY+1R/jPQLf2hj+V/xQNmerAbKl7pboI6LlbUK102eTkDqWP4urPiW7r5JJmRDnnphkEx67F8X6YEQCWTUzCH4+DqPqcxqHGOu5qiTw9KmNb+Sx5HeLL8EWiVzIFW7YzZ/i4WN8HuviaxLnMLa6caHxa7eCpI2rWCG6dCB08hpHxiFU8TQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) by PR3PR04MB7369.eurprd04.prod.outlook.com (2603:10a6:102:89::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Tue, 18 Oct 2022 11:03:42 +0000 Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45]) by HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45%7]) with mapi id 15.20.5723.032; Tue, 18 Oct 2022 11:03:42 +0000 From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v9 2/4] mptcp: use msk instead of mptcp_sk Date: Tue, 18 Oct 2022 19:03:10 +0800 Message-Id: <20221018110312.22510-3-geliang.tang@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20221018110312.22510-1-geliang.tang@suse.com> References: <20221018110312.22510-1-geliang.tang@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0043.jpnprd01.prod.outlook.com (2603:1096:400:17f::17) To HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0402MB3497:EE_|PR3PR04MB7369:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e71bf5b-104b-4309-d334-08dab0f86b10 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nGla4b1/Vf0m62WxZlMX1J7N55nxY2G9EPrzNTikMm8QRPyJS8/EwoS0XZR2NZVM6VN0HrErFzabzw5MmYEVbPIwUnMJ5ZqhtnK31rnFAfYXmD9qPBj4bEefytGfWhlriLQOem+K5eyvN30fhMt0po7ejDwELj/N8Zr0LtwBSjA9J6ZVNGheHYz0tEe/oFoIRvtAnEuTufGdUHefosz2Pr+Sr//qwgCI/lMON7L7WBTZ2a/LY7Ngy8idYu5D8eMrA/4jR29PsqwuEYYIbq4JO2cobQKzlGC39sNLV0bRKQDyP9alQm4abL5EI3NSXAo9aURqIzMW0ufPvggDeJfwkDUowCkuoOCmAFXilRmNcFRCpTDxx35y9z1wIcQTsxUt8jfGMExQ1zWJ/Gs6QNFWKsJGo7TEajbs1mPob5GTQnD1I+AmbUZGjRfWPZpWufxihXR1F4ihAgE0bBbbp3C3Q/ag4Nkwxe9SU16iTNrUB77ii4+Jh8u7wc7hziJcthfdbwb3DRGpKz4plH4qxP5NBSCnTiJ9naVcoJq8p45nfQxu7TepWMefXsCNqwkN0woltUirELiCHP35HXwNDyo00/i+46RNdxT3E98TVlxXI5V3yZz3X2c1Dk4uxfX5BgI2PLhOl6zxCu8FGzZlZ9WY5AB2gcNpqhqNNhWRQwYJ+PAxaYvaz+x/oA46Sw/aFnW2673UStcgt3lx25lP0ErqHNiVntnL3HQj04Zs0gYfon+cB3JHFIfKdM9VbSbIMBeg X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR0402MB3497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(376002)(346002)(396003)(136003)(39860400002)(451199015)(36756003)(86362001)(107886003)(6666004)(83380400001)(38100700002)(66946007)(66556008)(8676002)(5660300002)(316002)(8936002)(6916009)(44832011)(4326008)(6486002)(2906002)(186003)(1076003)(66476007)(2616005)(6506007)(478600001)(26005)(6512007)(41300700001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?LcF0CFy7LPbLWeqybyEGL4DCN802MDWAA5NMDE5GK7wwcku4wG3mDC9UQ+s+?= =?us-ascii?Q?kHNc901vs+rezujr4bLE2uP6y+nWQBhq55CN0UmwG90XwNf9vbHMywrOUX+U?= =?us-ascii?Q?vMo0CuzxHBJBgDtZM5kZtsj5Bfdgi9Edqy6l8OnfNKrOxJHGjjF0AkBbZjey?= =?us-ascii?Q?p60H8XRkD7ia65Ub11sZaR7iXjh6OyypAc8dQ1xI0D5liGH3Q4McQjhlxgOX?= =?us-ascii?Q?fEhrLimmczrovU2oksJfKA/U1YCpI73D9LEwr36Bkz5Xe3xIic+q0W+JWd9P?= =?us-ascii?Q?n46OARfcXXVbCbdjWd6qQYrHTm/EqiU+fU1Eh7z8o5iB1c5+vv7bWFgI02MR?= =?us-ascii?Q?nawfOPQo4dXokiM/shuOs8tTBpDmZmPqLM80WlI54YT5ILWBq86F70sddph8?= =?us-ascii?Q?m3WBeRiaQ1ISofIofGA9tdFQt8rDoo2BoVcL/I7M+SnKdNPPBjLScgABBUYv?= =?us-ascii?Q?VfrryKdvwmKRHpgnxnoWlCn6Ls2KNF6N+XAr59gaFa1Js0r01P3LlxCEzbbr?= =?us-ascii?Q?9AOSZvwpH9N0d/FchxhaaMXp34DcxFmIrSezlha8TcXnLQbK8UmQgSzhUTIv?= =?us-ascii?Q?0T0jZDf3KhsgOxbDK1jMWl5WS0vsZ8sKpTYr+WgUnJ6Df3cuNpB5w6RsVL4p?= =?us-ascii?Q?epESl7JFJgErHb1X5BwaM4nQSrIkAaGkMY5f22ofL3btbLfr06TS292GpCbK?= =?us-ascii?Q?dA8qqKnRUI6aVuziHeNG4RfhWRB0sdP3Anpuwq6YFkahFVXONXQPr14pmlbf?= =?us-ascii?Q?/F97bgsspu24lU58X+pn7k8aEJQGoMVZIWX7NxX77BPyPnX1enZ6YUb2EO41?= =?us-ascii?Q?ttj7SEg0e08dc6SmpJqU0YC8A3sJCV3gyHdjvKSceYjkCFxT8kfTKoOTawRZ?= =?us-ascii?Q?tvZL5kmGqUN3wWo04u1cc9+gk0vtAWfhgymnrudivwdaS9wR9Pi1LrECQkyX?= =?us-ascii?Q?NeROHD+tLmO1w/79fqr4uF9DB2uyW9IFw9Vsv/74yhwyiI1zZSBqzghbs51Z?= =?us-ascii?Q?gXhveFX1Me+PcwEDQ9AFJJYGmp/HdO5s160oQinVLsk6w5OlsKtBZr0LpqAk?= =?us-ascii?Q?RoOwq25ZItuBdmaq/mCCynzzYcTSEWnu0APngVWuwIg3QCal+KbHpu4TfYQf?= =?us-ascii?Q?AVxN0Tpoc2s+ENtoyCcUDtFjbWl5L/o7hcs6VuEl7kZho+rCeQ6FjEhK5j7+?= =?us-ascii?Q?bOToYMiZiy1JSS2c0n6mD3FvnjvhXsz9PWVDQEdqfxTFdEoGnRIRxXsQ0HOT?= =?us-ascii?Q?cOpO4Fzc8HidcCEypUTzbATsuz2vU4RYBJY3pxI5Z8hO58mVLg5BR2fu/4A9?= =?us-ascii?Q?9e9qin5xTF3KIU2L9UA+8jjfwIYoyXNGKnWrIGPbc72O1snuvx30AVeNgiUK?= =?us-ascii?Q?N1SX8Kc42wDDtwz9AG3qayTdi9WjITSTWBIhA9i/TB6w2EzfcckhADQ7e3Jk?= =?us-ascii?Q?FWXkZTvvVht5sMTYKpUqCduKHvTLIS1bdr+JAiu3fvDYOFxTiHvHVWtnIgtB?= =?us-ascii?Q?8AbjxrU41TBsKucEis3VJDX8enQGdG3CXh/PPsd1zT+HyEGqbCmTGscbuJ+9?= =?us-ascii?Q?DIgOdZYypTHka03ehnhQ2M7FxQ5m6xfMgJI6uLGmMGHjzfXv63WRPI+0cVRl?= =?us-ascii?Q?hQ=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e71bf5b-104b-4309-d334-08dab0f86b10 X-MS-Exchange-CrossTenant-AuthSource: HE1PR0402MB3497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 11:03:42.1926 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gUax8uQtTZTJbIvOKoLIwEHHLSoJIhnlZxBoSe93lNoOuQarbW1QW4OSB8JwERgyrcSCshMnEYJOvy2SFofenQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR04MB7369 Content-Type: text/plain; charset="utf-8" Use msk instead of mptcp_sk(sk) in the functions where the variable "msk =3D mptcp_sk(sk)" has been defined. Signed-off-by: Geliang Tang Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 1cf8b1c68e09..11be5b9c379d 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1616,7 +1616,7 @@ static void __mptcp_subflow_push_pending(struct sock = *sk, struct sock *ssk) * check for a different subflow usage only after * spooling the first chunk of data */ - xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(mptcp_sk(sk)); + xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(msk); if (!xmit_ssk) goto out; if (xmit_ssk !=3D ssk) { @@ -2261,7 +2261,7 @@ bool __mptcp_retransmit_pending_data(struct sock *sk) struct mptcp_data_frag *cur, *rtx_head; struct mptcp_sock *msk =3D mptcp_sk(sk); =20 - if (__mptcp_check_fallback(mptcp_sk(sk))) + if (__mptcp_check_fallback(msk)) return false; =20 if (tcp_rtx_and_write_queues_empty(sk)) @@ -2943,7 +2943,7 @@ bool __mptcp_close(struct sock *sk, long timeout) =20 sock_hold(sk); pr_debug("msk=3D%p state=3D%d", sk, sk->sk_state); - if (mptcp_sk(sk)->token) + if (msk->token) mptcp_event(MPTCP_EVENT_CLOSED, msk, NULL, GFP_KERNEL); =20 if (sk->sk_state =3D=3D TCP_CLOSE) { @@ -3002,8 +3002,8 @@ static int mptcp_disconnect(struct sock *sk, int flag= s) mptcp_stop_timer(sk); sk_stop_timer(sk, &sk->sk_timer); =20 - if (mptcp_sk(sk)->token) - mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); + if (msk->token) + mptcp_event(MPTCP_EVENT_CLOSED, msk, NULL, GFP_KERNEL); =20 /* msk->subflow is still intact, the following will not free the first * subflow --=20 2.35.3 From nobody Thu May 2 04:05:42 2024 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2044.outbound.protection.outlook.com [40.107.21.44]) (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 29DDF4A24 for ; Tue, 18 Oct 2022 11:03:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dBM1J9Z40hMoTzr0EGXpJsB1tSC6IlsiMLiYIgtOW4hxGlA1f908XvE4aaaQW+TgLPyywCzZCeF+8Hzdv08pEkzj26Pdz+kV0hx0NEynry85KeH+i0YVC+u0hNZkATA//RJ3EeC8EYhclzXbWa85IriM/ZwwoUv4ij456f1x6xzSm2tzmCxaBxm+EZV3UMzZOKfPOX9R1UQVxWxFtGg4iZZC4kNWi8m6RW/OAB/wNJqtkbS5Ji2OTZ5lt6lVXQxzYwq7xKFRQUSWJ44p7bUvgJEYB8msy66A6MpvjRtEjtSfUyBghB8rFuJ1AXLsh/Rvy2nDNoDMK5DwY9IIAqNc7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/DUDj7dDw4RxUBo8Uvh8oU7TYmiFNVL0XXd2PV8vpp0=; b=DfmQetaJuqLIkZu32/2MgexL4yp+OZGR+VtWHvIButN2jyZ5NQhJKoGNXFS06e4aNrR/hFSn83AXUJgZIJkVgktXt6ZB2vC23nc/P6vQ5a5BW33Gg/GTlEKVoeJAuJwfqJsaRSA76J1hAMxFTf0kV3cfhNgURcXHehgiLO8zmwJ7BT4wjV8FbdtFHSx/5g8oaESiUGot6rDLu1a+wabZqDkze4J63NnRBsWX/66sZPUg3z7/B8AvbScnySik3d3lvbjRC5q0YPhaq6l2odSJ6yANyAkLYAgEi/yUqyplzgiYZcKO2DktbX6OH00+cdk3eyRoA/1ULGwv659AF4WSTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/DUDj7dDw4RxUBo8Uvh8oU7TYmiFNVL0XXd2PV8vpp0=; b=UyCc7Gquzf6HgydUIfUvjMqm+c4PLp7+i56c5W3V2sy18MB8cMV/xT9M5JGbITZUon+5qhqWJqWbPwoec8UHRlZXQphcIc3RPM4qM8ukLpdAzcIgJWg3OW+x+g91KZcwuFSyRqt1tzkGzHscRuOWr1h4CXraT91PnLFHdmaJVVhD2Z43wJH775nxhnj+mpDen3R0W8yzc9IgeBH+RnrPXMh3osYTCxY02+R3+rKgcDhnmOTdwccGE5xODbvK4gwf5Xv9uLDnRHm0apn7LAIWpUcXN+NVGiAeopyBtvk8BBWQwxrn2YC+LInMGaG2egVts9BPAXOJk2k5P+wxhWaxZw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) by PR3PR04MB7369.eurprd04.prod.outlook.com (2603:10a6:102:89::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Tue, 18 Oct 2022 11:03:50 +0000 Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45]) by HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45%7]) with mapi id 15.20.5723.032; Tue, 18 Oct 2022 11:03:50 +0000 From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v9 3/4] mptcp: change 'first' as a parameter Date: Tue, 18 Oct 2022 19:03:11 +0800 Message-Id: <20221018110312.22510-4-geliang.tang@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20221018110312.22510-1-geliang.tang@suse.com> References: <20221018110312.22510-1-geliang.tang@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0037.jpnprd01.prod.outlook.com (2603:1096:400:17f::6) To HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0402MB3497:EE_|PR3PR04MB7369:EE_ X-MS-Office365-Filtering-Correlation-Id: 3663cc26-9b1c-4aa1-bddd-08dab0f86fc4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VpVwOLgg6LgzxgWvN/eRB7cqub36GzN6u3/A142LDatdrfgG//sqAsxqiYruH1G4/IV5YcI1GXs51Gtl/i29oCMIxK1ro3TFEQWkANz7wzEw+RcnwsNmKRKVC5VLUCzhk7aN9ngxZIRthhOQyDvISw4VK/5W70pyX5Erg60c+BGLYnEWqexKjh0IgB2It7lOYk5rUWdK6bV0ADGCWg0eZJgZssYPJWEAwmSmjmw4J3xLIOs4zpwfbn8Y+ceTk0ZQKYo9qUpKvquKSb9cj8LZpP8TsVHFoG8sUMqjnT9gOpEyQdZdf7zMnQ8IBiATxBHYw3E/U2vsR4068VSJDzcWMtWxm54d2K2ovbPUxjsz1QWqbqcp/i/JY0o320MTlecZsJbuUTF0mnRHO6x6m7ofZ0AhwquiHJmUmQGVMGKJh9dYdhPKKhOSkgOZBmJpcZMTf7WvnLqZN+Ag48aySixnda/H/Vdrw6TAJ+LO37KBowvzXktPCOY7xJmpUz9zwMuLX3KZ/3IZTrE57RP+FQ8Yuid47PNOI3H4dTCABcr/9wgLPumGNW58FOsH8Kzrev8ehu/KBiVa5ah+q0XOG1drJlprY1SbGsJwZPB3gjnO7EJq70j0zppOQRMdQX8ni0AHEi+NXsik+YZqCL0XlWHNb7VGt/onjLKO0lAdVLayi6FNRudf7gSV7jE0B1eg4hCv0BNjOSfm+7PONYvMZ0J6Qt3sS8FIiYfYzjSXY9VVhi7b2udDKBNNcRG0j3hQIRoM X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR0402MB3497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(376002)(346002)(396003)(136003)(39860400002)(451199015)(36756003)(86362001)(107886003)(6666004)(83380400001)(38100700002)(66946007)(66556008)(8676002)(5660300002)(316002)(8936002)(6916009)(44832011)(4326008)(6486002)(2906002)(186003)(1076003)(66476007)(2616005)(66899015)(6506007)(478600001)(26005)(6512007)(41300700001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?azDbhDfYESJgGQdHgRo3hTK9TT3Th4pZsu9/kCWkiUIcjfDAudYghvMLS0l6?= =?us-ascii?Q?z9kAlWvDtnmKm+8VmFirzVXyorIvrs5krCP9tlfunks6SCki0cQUJ+Q9FzQE?= =?us-ascii?Q?5B88miqGTcYSkt1EcjTdNmI9MXsLu50kv4VWKt27aERXK4OveX0KVoDytQym?= =?us-ascii?Q?YaUCMDOo0iPam7PWIKNNhIISlLgw4u/3qvSaan+Wipg3FA98/UOcgwkIXTSR?= =?us-ascii?Q?f/KFLehTm2DhDE/zEmJxADXaxPRn+ZPeelCLPcP74m+6UB9OxSxM4AelvpVy?= =?us-ascii?Q?OtQ8dswjhAiZOvXKtu8xmPbIjn1dTomWtSpPjtYs48HJOkGgzpE6klHutid4?= =?us-ascii?Q?VWZaORiqVmqhsgrcVpwl6gA63xXXYciKz949mG9Q06b/v+dlOFTZ0WZ+L+1P?= =?us-ascii?Q?pb1D6goKCiu8tUJ1Fd+yznDl5xumVmsjdU3AraOn0aC0VeVFVwqt/jQLfTq1?= =?us-ascii?Q?mwoUlJ2TU8Y0FO+OAIFvh1KP8jyr9/sC4fFuyl4559cz/DNhCTtZKqo0gP4n?= =?us-ascii?Q?OY/bpBWdR9Rro2RzmmMa3dFcXAaiPwX7nbAoZ+OT8JnoUkOphOCQ17QL7lxI?= =?us-ascii?Q?EdPNSdbePQu+W2CIAz3K6F6sj4uqUX326uYk+FHt+Y2dKWM8ZO+usdNGbYP1?= =?us-ascii?Q?A+UH58s146um5BQi3fhxzvFJOBYosUofLVLgixNem+mhQHnRHgzM+0X8RvW/?= =?us-ascii?Q?I+TBfZNKPfDnJo4owetlS+PIDnYYXqP7GSWJw+8FcfuR83dQTJZIxcxHp+BN?= =?us-ascii?Q?NNqFAgHT3ZE6g13m2q1GQg+D/ZgNCkRvoqaUPqpoqfaN/gaQ9I+nQ5CWxiNe?= =?us-ascii?Q?Z65VnFTI4+BAWyduUKI+n6ouqfpUJ2sB6gZgXIL1GAOEYpxIDzmdO/yNWrFW?= =?us-ascii?Q?Ob2v8yAB88G2Qxza+fDejj77kHbNRhmCoMyolqpgEO3kRJL5AMzis4ajEbee?= =?us-ascii?Q?uUo2pnTS4uvB5o/1Gb/1JmMryuIeRzvnKjYBrpFBAKcZuvS8Y/vgc+wmcIpG?= =?us-ascii?Q?6aIH1BNC/MZjiCAOQplyr+JkBQO8j1ivNUkDkvbxbPbsvgFSvBMYdV+yjfeR?= =?us-ascii?Q?vASU67FypZwebaOY87338i428/OalZduRr1KcY70xUAWMBQyb+wKFhF2QHZq?= =?us-ascii?Q?Tmr76z8ywFfRy4KuOcym91osO1jXEIfROIX1topC/RG8kjivfJxA+yRxprke?= =?us-ascii?Q?eXe9qGMOhl+mViPY0N50wrjhhpnQD2zQfJMp+n4OJOF70677D44w+ikx/gmo?= =?us-ascii?Q?wGPa8tTHSdLuPHPG/GCH/t1oFjX0h0RLouD7F2OyGKmE9aQyQmkatRUk1lzF?= =?us-ascii?Q?BjCwhCaHcGoKueR1JqbzL/baIRZt4vW4oWb4ChuwaerdVQs9uWuDkuVhyG4f?= =?us-ascii?Q?Yut7j96uHq8U6WIl63LXS/fYNp4HnN1N1Crm49SXKUrOVM+SN+Jhi7xwHkyE?= =?us-ascii?Q?3qsodiJBv6pSYNDvEEiDyqiL/QqIcA6KWHPzu7EDJVx5WPEWWz7StS47/QZI?= =?us-ascii?Q?YnEKhAq6LwaDkmVHoyrlPdxxL9p6SR/eA5PmPaJ3DNqaflnYR3/NJ9uqTDfb?= =?us-ascii?Q?GDDHp5L/GkKvLvjA+rnBUwSb5mis+HPwOjXDp+p1zloZxrNR+19+QvIh249a?= =?us-ascii?Q?QQ=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3663cc26-9b1c-4aa1-bddd-08dab0f86fc4 X-MS-Exchange-CrossTenant-AuthSource: HE1PR0402MB3497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 11:03:50.3326 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tpfqVYBgHr3/EnoA20Idzg0MCiJIZcQBwy/HCl1qTbIKjbFNPPLgbZkDbOEXY77OwgCgoS3ZerUM7kOckXr8eg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR04MB7369 Content-Type: text/plain; charset="utf-8" The function mptcp_subflow_process_delegated() uses the input ssk first, while __mptcp_check_push() invokes the packet scheduler first. So this patch adds a new parameter named 'first' for the function __mptcp_subflow_push_pending() to deal with these two cases separately. With this change, the code that invokes the packet scheduler in the function __mptcp_check_push() can be removed, and replaced by invoking __mptcp_subflow_push_pending() directly. Signed-off-by: Geliang Tang Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 11be5b9c379d..ddeb8b36a677 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1593,7 +1593,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned i= nt flags) __mptcp_check_send_data_fin(sk); } =20 -static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk) +static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk= , bool first) { struct mptcp_sock *msk =3D mptcp_sk(sk); struct mptcp_sendmsg_info info =3D { @@ -1602,7 +1602,6 @@ static void __mptcp_subflow_push_pending(struct sock = *sk, struct sock *ssk) struct mptcp_data_frag *dfrag; struct sock *xmit_ssk; int len, copied =3D 0; - bool first =3D true; =20 info.flags =3D 0; while ((dfrag =3D mptcp_send_head(sk))) { @@ -1612,8 +1611,7 @@ static void __mptcp_subflow_push_pending(struct sock = *sk, struct sock *ssk) while (len > 0) { int ret =3D 0; =20 - /* the caller already invoked the packet scheduler, - * check for a different subflow usage only after + /* check for a different subflow usage only after * spooling the first chunk of data */ xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(msk); @@ -3217,16 +3215,10 @@ void __mptcp_check_push(struct sock *sk, struct soc= k *ssk) if (!mptcp_send_head(sk)) return; =20 - if (!sock_owned_by_user(sk)) { - struct sock *xmit_ssk =3D mptcp_subflow_get_send(mptcp_sk(sk)); - - if (xmit_ssk =3D=3D ssk) - __mptcp_subflow_push_pending(sk, ssk); - else if (xmit_ssk) - mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk), MPTCP_DELEGATE_SEND= ); - } else { + if (!sock_owned_by_user(sk)) + __mptcp_subflow_push_pending(sk, ssk, false); + else __set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->cb_flags); - } } =20 #define MPTCP_FLAGS_PROCESS_CTX_NEED (BIT(MPTCP_PUSH_PENDING) | \ @@ -3317,7 +3309,7 @@ void mptcp_subflow_process_delegated(struct sock *ssk) if (test_bit(MPTCP_DELEGATE_SEND, &subflow->delegated_status)) { mptcp_data_lock(sk); if (!sock_owned_by_user(sk)) - __mptcp_subflow_push_pending(sk, ssk); + __mptcp_subflow_push_pending(sk, ssk, true); else __set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->cb_flags); mptcp_data_unlock(sk); --=20 2.35.3 From nobody Thu May 2 04:05:42 2024 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2058.outbound.protection.outlook.com [40.107.21.58]) (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 70D184A24 for ; Tue, 18 Oct 2022 11:04:02 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IiEgQae+uOQ59rI+3wFMMZ/xsbjsvO8EilpE2zfLBoowXnGWU/6RgWAtsLGh6ztX3HwS1Ing1cpDlsG43sG55fsnHVxgfR0ZAup7KiC0E7/V+rrxHWfmg1s5IFs0hMaK5PHQ91LHgd6odSE0hLnC+oxvTF8TSz+ueCapGDf3mpTa8PoJ0ahZ1YWf8MbCnNY11ZQS3v1TRAEt9qN+RbgqEzQoxHm131bbmlj+WnKdikvEHiaJerg3ryoRtOku39IB5WEys47r+7jMXqJqk3TN2Hl4ZQjtGt9mmog7H2ldfVQabEu2pjfUBK8xUFE4Pk9NkU+y+SVxju4P91RzOCZa/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DrWlmUEhJn0bKYM2GwAPAUd234RhNtig5HMwtn4ZLko=; b=CLXLEK8QnZfmQazKf3L5yZe0Q1iiP+4mhw1Rw100k0nUD4gViMZcIBNjNstwQ4XR1TesJGo4+16OIcPZ535ey9njs51gxjOe5BE4vE1/Qdmp+cHFMUyqfbb6fsKHZdhscqMQdbDPnwtJiQZCq8up0nXoMSu1vN9XW7TpNU+USOR9JZPZdC3A+eJEjL0bkSxex+UoBXIrxzpCB91cmoaAupiHnSJ+UTbzxAJM19BihyZntnh4wsN936+PdiX0M53gOEXcXbBuat0LilbA7F2gVaBx3XLexA7v1qDRn5SDqni5DkwBpTBgXyDZhRHNsXsvfHSyDX/RfdSAaMpdZ+yjNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DrWlmUEhJn0bKYM2GwAPAUd234RhNtig5HMwtn4ZLko=; b=ju6QJHqGlJa23bjZWEdP0ZMoz9Qk0LLTq6njr8ORdiXIoSvkKlpPukhFHlrJP/XXd5kjeOTme4U8p980ofR4W9sscIlrBeC3EQA3zmkD3k7cLUGA+pbjNndwioYS43paHhCcZn9BdgU/5NQM2dT38R09UJTXf9jIVMi29dWOp7h64RwIbawdja3PL955UfXDcm+35F0SJHeKO0uHJaBOMqVkcAcJHW3PBtepmbYf2Sao1jZqEB8i1fNgUJuT3OjYd0S6euRLZrFIIM1bvweI9G0BnvmDRUMZkCCMCDDuJDkyfnFYr1A5XIz+vlVA6TlrOohEzZTcLnA0RYk8cWj4yw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) by PR3PR04MB7369.eurprd04.prod.outlook.com (2603:10a6:102:89::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Tue, 18 Oct 2022 11:03:59 +0000 Received: from HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45]) by HE1PR0402MB3497.eurprd04.prod.outlook.com ([fe80::645c:cc06:a616:fe45%7]) with mapi id 15.20.5723.032; Tue, 18 Oct 2022 11:03:59 +0000 From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v9 4/4] mptcp: refactor push_pending logic Date: Tue, 18 Oct 2022 19:03:12 +0800 Message-Id: <20221018110312.22510-5-geliang.tang@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20221018110312.22510-1-geliang.tang@suse.com> References: <20221018110312.22510-1-geliang.tang@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0187.jpnprd01.prod.outlook.com (2603:1096:400:2b0::8) To HE1PR0402MB3497.eurprd04.prod.outlook.com (2603:10a6:7:83::14) Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0402MB3497:EE_|PR3PR04MB7369:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c631100-6c16-439b-e9f9-08dab0f87540 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BWFT2H4X4QpLbm9uIs5fFgIUWxZmMo2c2SXb0fhBsk9aWff/UFTrtWP0gRQj1v819QTzfwsa/h0IfFRWlup3iQH53euQcenVGEBJR2H1OOFNenDqXeJcAMYdCHjhFyw5hiVa1aP9YsIivRPvPnHe4qCV9ukQhYNy9DBHeHCjhHVekVW5MeUGOycElRNhohZbzSJa9mVNJXw6W/qFlHx0RKFNgENa+lpEiH6fQ/3Gn2wNwkRl1xMKh5JeqZapVXM8JPfckKsQJu4YLMgMzm4sByCLPRNYSmTYambSYVldX2HnpCVH7JzUs9VuZelrkz2gTvZmJxQKNgKk6UBmDZW8W420t1V2FYkr/afhadcxHR7E1ykGiQVVHkmsuokkV6+rRMhe6+dayW5glYz6GZg/Rp4MLGF2ENIxV7nMsd2h09YHXRPA13HaJtNa7O21TR/PTE5qyUYARV9Vw8Rhs0AitKx3ltR7qpApqiPvhFLFwxfOCbFIkdI4Np/8/e9wyGtfuvxuxjSdCPmvZxNW/qGKbfsOK93l21HUJjLXnjaQebkWMuP3OnV9ilGxXqe7oeJ+AzIff2YTrY6lmDiy3WyMilWWsekiTMLDUfXGhoE68xghWfo0QAZqAlGztvQXQ4w9Zq557n7Ofbyd6Yy3XGYTZ5vAegcSlTlhEYKEwp1tGTkDcOTT0FbtFQw/HTNPcwn4sBLH4DvJb+sDNICed8mCEptLWbDfN50BXA1IoVKEx1VNSrJ5ykBCBMBfGrRac/wm X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HE1PR0402MB3497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(376002)(346002)(396003)(136003)(39860400002)(451199015)(36756003)(86362001)(107886003)(6666004)(83380400001)(38100700002)(66946007)(66556008)(8676002)(5660300002)(316002)(8936002)(6916009)(44832011)(4326008)(6486002)(2906002)(186003)(1076003)(66476007)(2616005)(6506007)(478600001)(26005)(6512007)(41300700001)(13296009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6x9lIUwzwuS0uqdDUdJqqS3LydDdnFXNYXNlxOqXwn4P4eem4IcGCHJGv9MF?= =?us-ascii?Q?oOk1GajODt5SLZfRnu4knZkS3Qc234D840hgd+VM7nTlRtFA1bvHmBAjHavt?= =?us-ascii?Q?3bfp/8GZ4cCHWwDQxEx5hrwbxTPE4RMfsmAEpIMOlo7u5H98zjVYZTmQoPLY?= =?us-ascii?Q?ppHpcwo2Z0xCVrzBgp9K+e+TY/VXdXTkAKRtKS2oeNJ3/gQsnkYQ4pUpUfRM?= =?us-ascii?Q?htW/y3WNBjAyAKiX/GjhxTRKZ42YA1skpvjux4THA8oVpXr/hNx6QQ4cUtC1?= =?us-ascii?Q?fnipaEnoX9EeJpsIbgPW+3n0kSGcvKZ6tIjU1uOZtFl0WpaR1CFrOdicjFxf?= =?us-ascii?Q?giRRRi6HwI/zUBQ3YiOD6i3B3axRUyWKCXwNsZIQQeJA1l+ldPJ7Ytg1pYTg?= =?us-ascii?Q?VB1H3dvVapdfWshcM+m93NmUNuhm8phQLVFSEYh9a5t/tyOTrUHTOHiBDjTk?= =?us-ascii?Q?vLZLaVaPEIL4WCWAcYoEvt9tjfyz5fydO35Xipl1ZL9FzhGdV32XJg79+Bf6?= =?us-ascii?Q?RGVDwwBrrJ0MKec4Uck2Np/PwOnlrPDD8ZM0cYsp/U8H1LUDXVLmBzi8d1g2?= =?us-ascii?Q?WAjxO7+GxlVI184dfNo/3G5qGNRlK1F/+puHkpdtPvEG8bNHX0kp/aSOvXLJ?= =?us-ascii?Q?W9yUp3WDD3CMkY8J6i7V3Rezr97nPjygnAku7qBLIReciaEE/7zO4UxAzHke?= =?us-ascii?Q?T91L5weD1oVCUe7t+p8bKzfHl000zBh8FY+yDQ442U5oNF07veKSkUWhkL5I?= =?us-ascii?Q?dnXG2D3nZzGHT+fFBjCIihHTklc5JON2K2a1wUpJwU6e6cxT+CwXipsCQSj4?= =?us-ascii?Q?Mt4Nbb73rmfk8JPxYfCZLl+rxQYG0Xht2S4tcBOjIvsQfRRqrLlK4iZELtxK?= =?us-ascii?Q?F5G6HoNe1kz1G2FdFs/GU0WswZq7Vx46brtVUW/tiFuGux+SY5/5pgYuWv+E?= =?us-ascii?Q?IMGeqqS7tkUD8GhQ1uKpkyLemFZnYUX1/FDXxh3eBnhe6ZERK005rI4Qx9PY?= =?us-ascii?Q?aow25QqKQKk3eO3dejgzzotvPCKrOmNNZSFyXok/YRoImywZ8+lPh9dnboDP?= =?us-ascii?Q?sDpEQpmT4J+dwFB3Pm17IGTaVOso/tsY4hz/fHJmrZeVLwrrFghOSi/0hAiV?= =?us-ascii?Q?/Q+KfWuoWTGc0ow/j1aQmMRr0UfAWqXU/9p0BqNcj+VmJyeHTtBaW8D4dPxY?= =?us-ascii?Q?XZf0iz2JcNhhl3BfnDm3SpG2lJkDuGSUtYYqGnd3TXnKCzZf0YalPa/8UWnj?= =?us-ascii?Q?exRdVUM6Pd36McWMw/LSryolG+SiDIyuGO17heMOeeunXv/64w4oTUXrP6cl?= =?us-ascii?Q?E++DQgWLaYEKxhVyu6BLKFIadqPTzqdewMC1HYJBIo5Dh+c628i7oUkq4Tmz?= =?us-ascii?Q?YiAs/K7C2VZUB6VRBX4i3CH+MDMLL/ygk/0ZouLqPgyC2EkKHKlSD6585S0V?= =?us-ascii?Q?TUkApmrLed0sGUW3lFxOVr+G7D4z3yfcGSVkPab8RnX2o91x5ikvFpkZCE+4?= =?us-ascii?Q?ElMG/4YTl1volTwZvWlQaZWE1KqFN2C4w48ObETDIDI1ltZYn9C3BX8eMO8p?= =?us-ascii?Q?WHgANyxsTuPeiQAgrubKHjOBriFvQZEmgfil+idDYq3o3e8R58cVbl67eJxd?= =?us-ascii?Q?vQ=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c631100-6c16-439b-e9f9-08dab0f87540 X-MS-Exchange-CrossTenant-AuthSource: HE1PR0402MB3497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 11:03:59.5506 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PrFJakwUwTYc1h/EoJOeGydIQlt6Jx6ovybc1GIJ7Ser/gRXO8lOobVi5m32bWWeJET/2KuwnIrlsWlGzpFz/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR04MB7369 Content-Type: text/plain; charset="utf-8" To support redundant package schedulers more easily, this patch refactors __mptcp_push_pending() logic from: For each dfrag: While sends succeed: Call the scheduler (selects subflow and msk->snd_burst) Update subflow locks (push/release/acquire as needed) Send the dfrag data with mptcp_sendmsg_frag() Update already_sent, snd_nxt, snd_burst Update msk->first_pending Push/release on final subflow -> While the scheduler selects one subflow: Lock the subflow For each pending dfrag: While sends succeed: Send the dfrag data with mptcp_sendmsg_frag() Update already_sent, snd_nxt, snd_burst Update msk->first_pending Break if required by msk->snd_burst / etc Push and release the subflow Refactors __mptcp_subflow_push_pending logic from: For each dfrag: While sends succeed: Call the scheduler (selects subflow and msk->snd_burst) Send the dfrag data with mptcp_subflow_delegate(), break Send the dfrag data with mptcp_sendmsg_frag() Update dfrag->already_sent, msk->snd_nxt, msk->snd_burst Update msk->first_pending -> While first_pending isn't empty: Call the scheduler (selects subflow and msk->snd_burst) Send the dfrag data with mptcp_subflow_delegate(), break Send the dfrag data with mptcp_sendmsg_frag() For each pending dfrag: While sends succeed: Send the dfrag data with mptcp_sendmsg_frag() Update already_sent, snd_nxt, snd_burst Update msk->first_pending Break if required by msk->snd_burst / etc Move the duplicate code from __mptcp_push_pending() and __mptcp_subflow_push_pending() into a new helper function, named __subflow_push_pending(). Simplify __mptcp_push_pending() and __mptcp_subflow_push_pending() by invoking this helper. Also move the burst check conditions out of the function mptcp_subflow_get_send(), check them in __mptcp_push_pending() and __mptcp_subflow_push_pending() in the inner "for each pending dfrag" loop. Signed-off-by: Geliang Tang Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 155 +++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 85 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index ddeb8b36a677..9b73297f6543 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1417,14 +1417,6 @@ struct sock *mptcp_subflow_get_send(struct mptcp_soc= k *msk) u64 linger_time; long tout =3D 0; =20 - /* re-use last subflow, if the burst allow that */ - if (msk->last_snd && msk->snd_burst > 0 && - sk_stream_memory_free(msk->last_snd) && - mptcp_subflow_active(mptcp_subflow_ctx(msk->last_snd))) { - mptcp_set_timeout(sk); - return msk->last_snd; - } - /* pick the subflow with the lower wmem/wspace ratio */ for (i =3D 0; i < SSK_MODE_MAX; ++i) { send_info[i].ssk =3D NULL; @@ -1491,12 +1483,6 @@ struct sock *mptcp_subflow_get_send(struct mptcp_soc= k *msk) return ssk; } =20 -static void mptcp_push_release(struct sock *ssk, struct mptcp_sendmsg_info= *info) -{ - tcp_push(ssk, 0, info->mss_now, tcp_sk(ssk)->nonagle, info->size_goal); - release_sock(ssk); -} - static void mptcp_update_post_push(struct mptcp_sock *msk, struct mptcp_data_frag *dfrag, u32 sent) @@ -1528,68 +1514,80 @@ void mptcp_check_and_set_pending(struct sock *sk) mptcp_sk(sk)->push_pending |=3D BIT(MPTCP_PUSH_PENDING); } =20 -void __mptcp_push_pending(struct sock *sk, unsigned int flags) +static int __subflow_push_pending(struct sock *sk, struct sock *ssk, + struct mptcp_sendmsg_info *info) { - struct sock *prev_ssk =3D NULL, *ssk =3D NULL; struct mptcp_sock *msk =3D mptcp_sk(sk); - struct mptcp_sendmsg_info info =3D { - .flags =3D flags, - }; - bool do_check_data_fin =3D false; struct mptcp_data_frag *dfrag; - int len; + int len, copied =3D 0, err =3D 0; =20 while ((dfrag =3D mptcp_send_head(sk))) { - info.sent =3D dfrag->already_sent; - info.limit =3D dfrag->data_len; + info->sent =3D dfrag->already_sent; + info->limit =3D dfrag->data_len; len =3D dfrag->data_len - dfrag->already_sent; while (len > 0) { int ret =3D 0; =20 - prev_ssk =3D ssk; - ssk =3D mptcp_subflow_get_send(msk); - - /* First check. If the ssk has changed since - * the last round, release prev_ssk - */ - if (ssk !=3D prev_ssk && prev_ssk) - mptcp_push_release(prev_ssk, &info); - if (!ssk) - goto out; - - /* Need to lock the new subflow only if different - * from the previous one, otherwise we are still - * helding the relevant lock - */ - if (ssk !=3D prev_ssk) - lock_sock(ssk); - - ret =3D mptcp_sendmsg_frag(sk, ssk, dfrag, &info); + ret =3D mptcp_sendmsg_frag(sk, ssk, dfrag, info); if (ret <=3D 0) { - if (ret =3D=3D -EAGAIN) - continue; - mptcp_push_release(ssk, &info); + err =3D copied ? : ret; goto out; } =20 - do_check_data_fin =3D true; - info.sent +=3D ret; + info->sent +=3D ret; + copied +=3D ret; len -=3D ret; =20 mptcp_update_post_push(msk, dfrag, ret); } WRITE_ONCE(msk->first_pending, mptcp_send_next(sk)); + + if (msk->snd_burst <=3D 0 || + !sk_stream_memory_free(ssk) || + !mptcp_subflow_active(mptcp_subflow_ctx(ssk))) { + err =3D copied ? : -EAGAIN; + goto out; + } + mptcp_set_timeout(sk); + } + err =3D copied; + +out: + if (copied) { + tcp_push(ssk, 0, info->mss_now, tcp_sk(ssk)->nonagle, + info->size_goal); } =20 - /* at this point we held the socket lock for the last subflow we used */ - if (ssk) - mptcp_push_release(ssk, &info); + return err; +} + +void __mptcp_push_pending(struct sock *sk, unsigned int flags) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct mptcp_sendmsg_info info =3D { + .flags =3D flags, + }; + struct sock *ssk; + int ret =3D 0; + +again: + while (mptcp_send_head(sk) && (ssk =3D mptcp_subflow_get_send(msk))) { + lock_sock(ssk); + ret =3D __subflow_push_pending(sk, ssk, &info); + release_sock(ssk); + + if (ret <=3D 0) { + if (ret =3D=3D -EAGAIN) + goto again; + goto out; + } + } =20 out: /* ensure the rtx timer is running */ if (!mptcp_timer_pending(sk)) mptcp_reset_timer(sk); - if (do_check_data_fin) + if (ret > 0) __mptcp_check_send_data_fin(sk); } =20 @@ -1599,51 +1597,38 @@ static void __mptcp_subflow_push_pending(struct soc= k *sk, struct sock *ssk, bool struct mptcp_sendmsg_info info =3D { .data_lock_held =3D true, }; - struct mptcp_data_frag *dfrag; struct sock *xmit_ssk; - int len, copied =3D 0; + int ret =3D 0; =20 info.flags =3D 0; - while ((dfrag =3D mptcp_send_head(sk))) { - info.sent =3D dfrag->already_sent; - info.limit =3D dfrag->data_len; - len =3D dfrag->data_len - dfrag->already_sent; - while (len > 0) { - int ret =3D 0; - - /* check for a different subflow usage only after - * spooling the first chunk of data - */ - xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(msk); - if (!xmit_ssk) - goto out; - if (xmit_ssk !=3D ssk) { - mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk), - MPTCP_DELEGATE_SEND); - goto out; - } - - ret =3D mptcp_sendmsg_frag(sk, ssk, dfrag, &info); - if (ret <=3D 0) - goto out; - - info.sent +=3D ret; - copied +=3D ret; - len -=3D ret; - first =3D false; +again: + while (mptcp_send_head(sk)) { + /* check for a different subflow usage only after + * spooling the first chunk of data + */ + xmit_ssk =3D first ? ssk : mptcp_subflow_get_send(msk); + if (!xmit_ssk) + goto out; + if (xmit_ssk !=3D ssk) { + mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk), + MPTCP_DELEGATE_SEND); + goto out; + } =20 - mptcp_update_post_push(msk, dfrag, ret); + ret =3D __subflow_push_pending(sk, ssk, &info); + first =3D false; + if (ret <=3D 0) { + if (ret =3D=3D -EAGAIN) + goto again; + break; } - WRITE_ONCE(msk->first_pending, mptcp_send_next(sk)); } =20 out: /* __mptcp_alloc_tx_skb could have released some wmem and we are * not going to flush it via release_sock() */ - if (copied) { - tcp_push(ssk, 0, info.mss_now, tcp_sk(ssk)->nonagle, - info.size_goal); + if (ret > 0) { if (!mptcp_timer_pending(sk)) mptcp_reset_timer(sk); =20 --=20 2.35.3