From patchwork Thu Feb 27 04:26:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993720 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 71F8314D2B7 for ; Thu, 27 Feb 2025 04:26:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630407; cv=fail; b=IUVkIAH9meQRW7Amoe3fa7cNgFnt9LFRs96EsRlrah8dFBb3V4lhCuoCmynix1mvTQi6k6y1nW5ufJGlSLv9yPsGMFtwYGHavfcHTlnMED4EK0m96VUiZEsV3c961Z35NWrCqwOf2EhBzemGwGiLzW/hmF6q6QbBIk3ioP4Libo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630407; c=relaxed/simple; bh=nOAxAUn+QZu4vZeowyHlXj5Z4komhZxeukLtux2xtjU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=auOmWAE7bRFC3IXeztC6byg3z4DLrmc2jP3Cz9U1mqKrM1N6kpx9dqtMtiKz66sZt3QWxjEza+cT05UFVkwPtZfRKrMiagPJnB41Maxok8yngjA/pVqh/4z2/TL1SHT08DaA2TkijQeRpeqNASz8wBqrm1AsZJVVvuOd8TAdUi8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=K+BFy/Ma; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CAzCiYct; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="K+BFy/Ma"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CAzCiYct" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1fnNJ027569 for ; Thu, 27 Feb 2025 04:26:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=zcUy3ZvSZzHYzYHCJLHxTbVOotZO06E2xO0eHqFhJ2w=; b= K+BFy/MaPfZIZTI29nP90BYvnrCrnn2HDslEY3Mpa/PmZJgp1kkj/TsjaeNPulGv QRbaS8/eo/4Ru1p/ivbDp0Aw9L4M9hYUfiMDiJqVLTM35LvbuPYGnzkBh8r/c1is CM+BWjvFvB9KRcRu2ok8a2szigUzdFufISkhhwOLTW2pXzmX1O0FesbE/i8b+Zy0 TsrKS+ttlmUsZ8fWQy+64/OPc5d5lYx2Xuu+mc1A4XDlEC1JnFkEwzY8TIU6lsfD hOOeushgP8vD/r+yK88A5zBoNL79McGGB1HgP7QpW5ZRIlrEBBzZOAO5VI/rAvwu hEDZ1xL91OdC8MthCmoAJw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451psdjkuc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:43 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R2KOXd024318 for ; Thu, 27 Feb 2025 04:26:43 GMT Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam04lp2048.outbound.protection.outlook.com [104.47.74.48]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44y51bne7p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gPcmpFD0zsFPENJr9dngIiq5QT3KG8WOw9VvvweDElVS+PtSPoH4AZ436aeCTQ+YlqCGL/fb/Ss3s7PtIZOlJSUw8Hc5okk3Ct+lmMlnfjHXA/4RF07WLQbjBuENHGLpD7EC61GFU8FULtGS/stS7/DNWuyHt2LOjQ/UBoT9H4wisVdXRSzRdRbRtoRrIoHZ3s0jzFwS3a7HKBNdSi0jiTpXwpCoSijsJ615lOh12D698yF53qq8QdTsR8ZhnyzxZ02OqlnsepNVZi2NMvK2JeEg6ZF7Y12TONfLRonFjx8RnnYR+/96pZg/pnLFAJB8XxcmLBlyAX59aiygo8pfDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zcUy3ZvSZzHYzYHCJLHxTbVOotZO06E2xO0eHqFhJ2w=; b=mKGf1Jo/7n+Py6FwwyXRFaFvcFUII2CtNTTqVLTo0jlXsceBxDKxZ96ipE/Cf5kHNLjplLEpCe0xOAX5qpw2dCh1s/4fqAJ+rdxvlXlZnC8/meHNbBgs+82JPcgvLvOLS7OPhxlcJ+KOMDmdGRqFPngwT81hbv/CF9N0S2hAiQ8lms58mTVeKAZaxefmCSjUVkWgIx3/iX+sCdklzAdmLU8Tz5liVwMY8gNHb0x9tw9BVRKv2M6MJPPxepkNtIxRyJaAGq2SJKedB6lL1//40/ZcDH09v1h6st0oxEqhQmHwGGtIIlJ0jkRK1hlAWqNfy5Hty+b3TzuyysbMzWEgNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zcUy3ZvSZzHYzYHCJLHxTbVOotZO06E2xO0eHqFhJ2w=; b=CAzCiYctMkaWuyAiE7j+xc0KTgF1HZA4FaV1j1gcGy/I4Kh/pOff5hRVWVD5HBMdwhK9aWKEVPwQz17yiIZOzfjwLddD9zN8BOb0PjhBieHGfITR5zuDmL8rUxhBoY8raUypPtfJrohne/0dztw0lv3lYNOIrUrqBBHv0brjxqQ= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:41 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:41 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 1/6] net/rds: Avoid queuing superfluous send and recv work Date: Wed, 26 Feb 2025 21:26:33 -0700 Message-ID: <20250227042638.82553-2-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P220CA0167.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:33b::9) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: f848b0cd-106b-472f-9019-08dd56e6ef5c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?q?zpgM70d6PGr9re4v4DNCJow6mjf6CRt?= =?utf-8?q?QOtdJiWukX/BZPdWcRNAeEcCi9jis0vDRdKm23v/8GY+F170GHe26siu1QTEfWoe+?= =?utf-8?q?uN7SwxehLxA0tv/5aNe9vBP5+3A4s2WaUgdqi7gshUK1ZufQLJ/fNYd4RRqt1ZKOQ?= =?utf-8?q?IRK7K8+eyxm2ze2Yp6URsf7wKv+H982yt8iA+6cUNlKIlNK7+XQmzq6qonnw7IQQS?= =?utf-8?q?tVA5FjLjYd/Upyb78sniFLEmMmAl6XmoLoVdGSr7gsXeaJAg6J+G/EwGia1TgAe16?= =?utf-8?q?mzGYM5Eo+0+N+cx8+HBg3/FeY8y5Wo/Ov/+MNGW11Kneio1r5vYzZvNPQT2kSocHj?= =?utf-8?q?0vMR0BojVVULs9sIIFx0kkqDkloqS8ioWMfsNpw9YEQ79VAVXy6MCTy4vKP07Gwqt?= =?utf-8?q?XweBgIkA1ZiX5W8SEst6UY5HFn0eWxl09UJVjgBdahpVMjuRzHSq8IkHKfW4phZlP?= =?utf-8?q?Qg6IWGNuoSTfreiz0eDEqBJehVPiQyZPj6ixZ95jmWhRcWmnvKJ6CYsZqYh/oTnGO?= =?utf-8?q?6ADAxmhRX+HP7QuCMMWXqweLZsphWcyX8/XEW8yweYG2kuUAKt6A1No2K8UkAbuh5?= =?utf-8?q?j4lWN9iJT3SWminFkfotGIQflsss+DuDwON4yxKHuifD5CbrQZQ3DbUNO5o4kiVS0?= =?utf-8?q?2UvF+AY5LsI9P7OTXBIG6XyAB+JA0ahzX5hMx89fu9N6XYqW0KOoxJ2sXXmm9OY35?= =?utf-8?q?EJzcn5B72bWXwOJG18lcC8f+cjecV5u9pMUt+BhO8a4PGp8CRpgFXER1c9Xeixvr9?= =?utf-8?q?BMD2v61pMrsgHHs4LkdehVjWU2J2ettlVpdNZBMjQDmhjvg7/rpNJzdckizP1Mi3J?= =?utf-8?q?GrDNL1GMjtrXnaKG2TqzTOEqGK0U2VouyNEA2NEdptQajtiObFy5ydNsuU5J+iVcH?= =?utf-8?q?RHuTepy2A2eUwj/dhl3JT/nkU/9aMbhISpbqhN8c1WYHHi2g6QQBX4ui1RmALjGhi?= =?utf-8?q?yfQQkhGoCf3yp48kZjNE2Y75eC93N7QWYwcEQjnPfdfgXGrAVYYR0DOP8VOuztVMM?= =?utf-8?q?lxoUTD3c5Cky4/bs38e6iD74GWsUzPmG6YbcOHngnuCu5rFDH2xlG2RbAmBbkUrrO?= =?utf-8?q?yFT1N3ofcZLzhf3AROSIeAnHsKqKtiHsrIoKONT1FbZyb9wXAXsunk+tERG44gFZE?= =?utf-8?q?pkVzghg1XWiHHlcH/32QfAhUhkUBVvZjJ9Qrl3DoliJK4KFN4BhciRKqg70LhaQAA?= =?utf-8?q?PGLjz0wYvV5FitUSP5qsDg11OWSSpskxBZgDZBEphFpoZ+5W62SH1pAl8ZKNwxpuA?= =?utf-8?q?62V9I0z/BFX51LRUuykpmlqMNBmktla+F8o2fLurdxk0DetTFuPOfol//o9QsWRhr?= =?utf-8?q?kZwedmny+xWd?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?T8HrquxDF16+g0w8tvYeJOfRzq5S?= =?utf-8?q?zHpOclTzRNf3OCfDxEXDbDhd++0QHjq3h3L0sxFKJ/1y4OK/pFx2+3DN33Mbc+GSI?= =?utf-8?q?mqeNJIMx7BEDMOdlypWDtDTTu2jh2NeZgmfXk10xy1y94Rtxn1tXN06Vklg0DkE57?= =?utf-8?q?HrVuJUKttHqtZW6m0a8Bl1sbKFD+cklFdMkcVdzuWjzDNDHSr0fx+KVMtTdafcwU4?= =?utf-8?q?A/ULxbMUMFGyMwL7/pvwvG1oBtgp290HLt4VxMbvJrY33fboUwnLEWAox3hlizj4C?= =?utf-8?q?xk0JwJiYbjsbdMYZxdh2a2EW0ggO65yw/RK/0q0U/I+ysROZxWyXcPE20obKalaXX?= =?utf-8?q?u1euTiOiuYeQI7VwBtkNCgcpAVh+A2QT9DOztCLs6YRSbMBlXH9Gsis0lpEV6PQ/B?= =?utf-8?q?ZYBJ/ihd20YcY4tdgwKC4NFtJRVdXjzGgnGHWOID+pqnF7H1PAKubMJTceonjQPXJ?= =?utf-8?q?v07VVLORMQz+xekNJ/idercO4sSOS04ARo3DP6o5QtTSadfI0BXfaLxYwsHK+wD5R?= =?utf-8?q?JdvP/B4YaR6WSSlONXH+ponYbpoPasYtp4nKEXBeEBMxy9nt3cp83F2jrXsKPm9Ty?= =?utf-8?q?UrP1C2OmtSJ4kJyLzSsAyagklJ7Fcb9NI8bAGzLKTHlgO1axhycj3/AISdiavWezf?= =?utf-8?q?1ggyRBA4XVo/UnHANjuZNsfEBDAuIQitgIP1TZUEuau5DKQJViBEQtKvAZG5q5pR7?= =?utf-8?q?OzX/U0/1Rq1iOHGC2iKx7efVBNv+McfQG/+ADkGlG3yM9kmJ/wZYnaIfRUmfxI0Yy?= =?utf-8?q?YSj/eLhFdnS178GfuIholu2c8zcCzLJ57vCYJr9JY4JE1sERTeCM13w8KRgBNY/x6?= =?utf-8?q?H9DDRthjoGO5vprYEHyRiQnzYO9+/44NP1A+GxdOeT2CXBZwrUqxlmdbNAjKXA81j?= =?utf-8?q?7BgLxetDIml8W3zG5Uh7CxntG8IQdtsrRMPSHxU8jLxxBxNjpb6F0o/GiNuuAyu90?= =?utf-8?q?1cUX8ROejbx1XqlayJ6Og9XqmsvdRvK9hNtgXLSvvo3z8YYt70ZBVaNNVZHLcQNIc?= =?utf-8?q?RvZjQ1LXgZ23YWyoVFye+NTvxJ9l36j5p6RdYd/fbxE4J57mJ1F1B84kh8c+ZsKoZ?= =?utf-8?q?NQAjAXqsF3M4jPCPTZ/8k9qNqRTAZhrf+56j/mxfd+ZY/3jfd+oVycZbK6PToE2EY?= =?utf-8?q?vupXUoZoUOPXh/NlU5raXoYg4Y6Z0c77ywho2LTowM7Aa9w32fGxOVp6zasiqBJV4?= =?utf-8?q?zGCxCPOO9qDI3EXVI3W1oQwStv7XkvlwmbILMPTqptT86EWocuJ4VkFVx1dDP9DvD?= =?utf-8?q?E1++UH7H7QalLfuJij6Fq4g259N0g4z8UptWN0qhMtS1C/WiRKPmvnJcmPGZI/Ews?= =?utf-8?q?MHbGm3HYxLIJ0/XFzRwPur/7YuJN+6PzKyu2uOCl46JoGotB1o5aQq52b6g0sdYlm?= =?utf-8?q?L5VXotpkXc7L7L9gR+Lp490gZfGnubKLNFnpDnMUHWcvg5IeSNeGn0cvVZ4N92ttP?= =?utf-8?q?nLPpF+jaZre0q9jVgBsUShpMo5KRCI7kTNxm8dFaX6wb+e41bzJJErL8BNgsWCsIo?= =?utf-8?q?wOy1ofrmSby+Nd9a6+FcWxcxQZOXE979OQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: KZ4lbn7wAD1myLvW8rMQiL/qGquhDYVNBRf8ckZR9WyqfRvVBegq5CuwV0Y/XsiyKEGdMkPYZULZIDLFDzLcIRDlqGm6Jne1cRASEITv93wmeovuc4n2aijVPrpUAb126AKZB9Iw2jRPa6Q2HrGNYFCQLDakjptFJ7nro6/hI8cCY+8mmRxV7IF1C6YkEPP5rAblhaFlf2Bw4z/So2XJOySLh9a9QCXe7xcfVVlShR9hbNA6FXUPVYk8DtPCekCbYCDog5szCZREBaWcwZDvgUGmLPmQxNy/XMJk8e+Gqttl/rdjXDn2tvq4ODHDny8TubErZwdqLyS61RIR+Grr8giwl1HdH1FE3fxC0advvCF5iVw6KSXMReXNyWPJqi4NBW4H3OsRl775/WDN8LoK6+f02Y6CKh/m0G+xgy9bWwgP859OilxCg4WvONcm5kfdIFt7UUnuYeurGSIH2wnaOsnYtdhKZbBVmN0KABioK+VDSvaIMfH/pfka8GXUm95bqvh5ySfHaJmblQVxbiQ6igecA5HlkkFDxwVYd8pzqoAfZxqmM6ahdto8zJpKFeQIM7cgVq30z0EMQWqEAKCf/mz09Kwr+xsiAMMnrg7TH9I= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f848b0cd-106b-472f-9019-08dd56e6ef5c X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:41.6446 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UwU9LUHiq0v8sWnPXwXF2p0YDx9YzxSzaEzvOc64JuTl5cNDPRtmeirkGNI/mwyDmCFgOAoOc6uritaUoLsYuUCzT+AcIqRvHaeq8Sg2aRU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-GUID: ohWo2N5X7hmzy9GveFs9BYbr-gLtgwRm X-Proofpoint-ORIG-GUID: ohWo2N5X7hmzy9GveFs9BYbr-gLtgwRm X-Patchwork-Delegate: kuba@kernel.org From: Håkon Bugge Queuing work on the connect path's work-queue is done from a plurality of places and contexts. Two more bits in cp_flags are defined, and together with some helper functions, the work is only queued if not already queued. This to avoid the work queue being overloaded, reducing the connection management performance, since the connection management uses the same work queue. Signed-off-by: Håkon Bugge Signed-off-by: Gerd Rausch Signed-off-by: Allison Henderson --- net/rds/connection.c | 11 ++++++++--- net/rds/ib_recv.c | 2 +- net/rds/ib_send.c | 2 +- net/rds/rds.h | 33 +++++++++++++++++++++++++++++++++ net/rds/send.c | 6 +++--- net/rds/tcp.c | 12 ++++++++++-- net/rds/tcp_recv.c | 2 +- net/rds/tcp_send.c | 2 +- net/rds/threads.c | 25 +++++++++++++++++-------- 9 files changed, 75 insertions(+), 20 deletions(-) diff --git a/net/rds/connection.c b/net/rds/connection.c index c749c5525b40..1d80586fdda2 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -445,9 +445,14 @@ static void rds_conn_path_destroy(struct rds_conn_path *cp) if (!cp->cp_transport_data) return; - /* make sure lingering queued work won't try to ref the conn */ - cancel_delayed_work_sync(&cp->cp_send_w); - cancel_delayed_work_sync(&cp->cp_recv_w); + /* make sure lingering queued work won't try to ref the + * conn. If there is work queued, we cancel it (and set the + * bit to avoid any re-queueing) + */ + if (test_and_set_bit(RDS_SEND_WORK_QUEUED, &cp->cp_flags)) + cancel_delayed_work_sync(&cp->cp_send_w); + if (test_and_set_bit(RDS_RECV_WORK_QUEUED, &cp->cp_flags)) + cancel_delayed_work_sync(&cp->cp_recv_w); rds_conn_path_drop(cp, true); flush_work(&cp->cp_down_w); diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index e53b7f266bd7..4ecee1ff1c26 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c @@ -457,7 +457,7 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp) (must_wake || (can_wait && rds_ib_ring_low(&ic->i_recv_ring)) || rds_ib_ring_empty(&ic->i_recv_ring))) { - queue_delayed_work(rds_wq, &conn->c_recv_w, 1); + rds_cond_queue_recv_work(conn->c_path + 0, 1); } if (can_wait) cond_resched(); diff --git a/net/rds/ib_send.c b/net/rds/ib_send.c index 4190b90ff3b1..95edd4cb8528 100644 --- a/net/rds/ib_send.c +++ b/net/rds/ib_send.c @@ -419,7 +419,7 @@ void rds_ib_send_add_credits(struct rds_connection *conn, unsigned int credits) atomic_add(IB_SET_SEND_CREDITS(credits), &ic->i_credits); if (test_and_clear_bit(RDS_LL_SEND_FULL, &conn->c_flags)) - queue_delayed_work(rds_wq, &conn->c_send_w, 0); + rds_cond_queue_send_work(conn->c_path + 0, 0); WARN_ON(IB_GET_SEND_CREDITS(credits) >= 16384); diff --git a/net/rds/rds.h b/net/rds/rds.h index dc360252c515..c9a22d0e887b 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -90,6 +90,8 @@ enum { #define RDS_IN_XMIT 2 #define RDS_RECV_REFILL 3 #define RDS_DESTROY_PENDING 4 +#define RDS_SEND_WORK_QUEUED 5 +#define RDS_RECV_WORK_QUEUED 6 /* Max number of multipaths per RDS connection. Must be a power of 2 */ #define RDS_MPATH_WORKERS 8 @@ -791,6 +793,37 @@ void __rds_conn_path_error(struct rds_conn_path *cp, const char *, ...); #define rds_conn_path_error(cp, fmt...) \ __rds_conn_path_error(cp, KERN_WARNING "RDS: " fmt) +extern struct workqueue_struct *rds_wq; +static inline void rds_cond_queue_send_work(struct rds_conn_path *cp, unsigned long delay) +{ + if (!test_and_set_bit(RDS_SEND_WORK_QUEUED, &cp->cp_flags)) + queue_delayed_work(rds_wq, &cp->cp_send_w, delay); +} + +static inline void rds_clear_queued_send_work_bit(struct rds_conn_path *cp) +{ + /* clear_bit() does not imply a memory barrier */ + smp_mb__before_atomic(); + clear_bit(RDS_SEND_WORK_QUEUED, &cp->cp_flags); + /* clear_bit() does not imply a memory barrier */ + smp_mb__after_atomic(); +} + +static inline void rds_cond_queue_recv_work(struct rds_conn_path *cp, unsigned long delay) +{ + if (!test_and_set_bit(RDS_RECV_WORK_QUEUED, &cp->cp_flags)) + queue_delayed_work(rds_wq, &cp->cp_recv_w, delay); +} + +static inline void rds_clear_queued_recv_work_bit(struct rds_conn_path *cp) +{ + /* clear_bit() does not imply a memory barrier */ + smp_mb__before_atomic(); + clear_bit(RDS_RECV_WORK_QUEUED, &cp->cp_flags); + /* clear_bit() does not imply a memory barrier */ + smp_mb__after_atomic(); +} + static inline int rds_conn_path_transition(struct rds_conn_path *cp, int old, int new) { diff --git a/net/rds/send.c b/net/rds/send.c index 09a280110654..6329cc8ec246 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -458,7 +458,7 @@ int rds_send_xmit(struct rds_conn_path *cp) if (rds_destroy_pending(cp->cp_conn)) ret = -ENETUNREACH; else - queue_delayed_work(rds_wq, &cp->cp_send_w, 1); + rds_cond_queue_send_work(cp, 1); rcu_read_unlock(); } else if (raced) { rds_stats_inc(s_send_lock_queue_raced); @@ -1380,7 +1380,7 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) if (rds_destroy_pending(cpath->cp_conn)) ret = -ENETUNREACH; else - queue_delayed_work(rds_wq, &cpath->cp_send_w, 1); + rds_cond_queue_send_work(cpath, 1); rcu_read_unlock(); } if (ret) @@ -1473,7 +1473,7 @@ rds_send_probe(struct rds_conn_path *cp, __be16 sport, /* schedule the send work on rds_wq */ rcu_read_lock(); if (!rds_destroy_pending(cp->cp_conn)) - queue_delayed_work(rds_wq, &cp->cp_send_w, 1); + rds_cond_queue_send_work(cp, 0); rcu_read_unlock(); rds_message_put(rm); diff --git a/net/rds/tcp.c b/net/rds/tcp.c index 0581c53e6517..b3f2c6e27b59 100644 --- a/net/rds/tcp.c +++ b/net/rds/tcp.c @@ -168,8 +168,16 @@ void rds_tcp_reset_callbacks(struct socket *sock, atomic_set(&cp->cp_state, RDS_CONN_RESETTING); wait_event(cp->cp_waitq, !test_bit(RDS_IN_XMIT, &cp->cp_flags)); /* reset receive side state for rds_tcp_data_recv() for osock */ - cancel_delayed_work_sync(&cp->cp_send_w); - cancel_delayed_work_sync(&cp->cp_recv_w); + + /* make sure lingering queued work won't try to ref the + * conn. If there is work queued, we cancel it (and set the bit + * to avoid any re-queueing) + */ + + if (test_and_set_bit(RDS_SEND_WORK_QUEUED, &cp->cp_flags)) + cancel_delayed_work_sync(&cp->cp_send_w); + if (test_and_set_bit(RDS_RECV_WORK_QUEUED, &cp->cp_flags)) + cancel_delayed_work_sync(&cp->cp_recv_w); lock_sock(osock->sk); if (tc->t_tinc) { rds_inc_put(&tc->t_tinc->ti_inc); diff --git a/net/rds/tcp_recv.c b/net/rds/tcp_recv.c index 7997a19d1da3..ab9fc150f974 100644 --- a/net/rds/tcp_recv.c +++ b/net/rds/tcp_recv.c @@ -327,7 +327,7 @@ void rds_tcp_data_ready(struct sock *sk) if (rds_tcp_read_sock(cp, GFP_ATOMIC) == -ENOMEM) { rcu_read_lock(); if (!rds_destroy_pending(cp->cp_conn)) - queue_delayed_work(rds_wq, &cp->cp_recv_w, 0); + rds_cond_queue_recv_work(cp, 0); rcu_read_unlock(); } out: diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c index 7d284ac7e81a..cecd3dbde58d 100644 --- a/net/rds/tcp_send.c +++ b/net/rds/tcp_send.c @@ -201,7 +201,7 @@ void rds_tcp_write_space(struct sock *sk) rcu_read_lock(); if ((refcount_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf && !rds_destroy_pending(cp->cp_conn)) - queue_delayed_work(rds_wq, &cp->cp_send_w, 0); + rds_cond_queue_send_work(cp, 0); rcu_read_unlock(); out: diff --git a/net/rds/threads.c b/net/rds/threads.c index 1f424cbfcbb4..eedae5653051 100644 --- a/net/rds/threads.c +++ b/net/rds/threads.c @@ -89,8 +89,10 @@ void rds_connect_path_complete(struct rds_conn_path *cp, int curr) set_bit(0, &cp->cp_conn->c_map_queued); rcu_read_lock(); if (!rds_destroy_pending(cp->cp_conn)) { - queue_delayed_work(rds_wq, &cp->cp_send_w, 0); - queue_delayed_work(rds_wq, &cp->cp_recv_w, 0); + rds_clear_queued_send_work_bit(cp); + rds_cond_queue_send_work(cp, 0); + rds_clear_queued_recv_work_bit(cp); + rds_cond_queue_recv_work(cp, 0); } rcu_read_unlock(); cp->cp_conn->c_proposed_version = RDS_PROTOCOL_VERSION; @@ -193,9 +195,11 @@ void rds_send_worker(struct work_struct *work) struct rds_conn_path *cp = container_of(work, struct rds_conn_path, cp_send_w.work); + unsigned long delay; int ret; if (rds_conn_path_state(cp) == RDS_CONN_UP) { + rds_clear_queued_send_work_bit(cp); clear_bit(RDS_LL_SEND_FULL, &cp->cp_flags); ret = rds_send_xmit(cp); cond_resched(); @@ -203,15 +207,17 @@ void rds_send_worker(struct work_struct *work) switch (ret) { case -EAGAIN: rds_stats_inc(s_send_immediate_retry); - queue_delayed_work(rds_wq, &cp->cp_send_w, 0); + delay = 0; break; case -ENOMEM: rds_stats_inc(s_send_delayed_retry); - queue_delayed_work(rds_wq, &cp->cp_send_w, 2); + delay = 2; break; default: - break; + return; } + + rds_cond_queue_send_work(cp, delay); } } @@ -220,23 +226,26 @@ void rds_recv_worker(struct work_struct *work) struct rds_conn_path *cp = container_of(work, struct rds_conn_path, cp_recv_w.work); + unsigned long delay; int ret; if (rds_conn_path_state(cp) == RDS_CONN_UP) { + rds_clear_queued_recv_work_bit(cp); ret = cp->cp_conn->c_trans->recv_path(cp); rdsdebug("conn %p ret %d\n", cp->cp_conn, ret); switch (ret) { case -EAGAIN: rds_stats_inc(s_recv_immediate_retry); - queue_delayed_work(rds_wq, &cp->cp_recv_w, 0); + delay = 0; break; case -ENOMEM: rds_stats_inc(s_recv_delayed_retry); - queue_delayed_work(rds_wq, &cp->cp_recv_w, 2); + delay = 2; break; default: - break; + return; } + rds_cond_queue_recv_work(cp, delay); } } From patchwork Thu Feb 27 04:26:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993721 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 232E51E833A for ; Thu, 27 Feb 2025 04:26:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630410; cv=fail; b=DGcpG+2ZHBDGv7XdbJzhaAtpWdUlK4f9tkbAmLUrsrMwI6ISOqezT8FgX4N+t6ZyFlgfYSbaY/n8rrbcJ2czw/fzDsWNUw33VFvgqS/AN5OIhDgt96hYIiokMOan4TqT0w15MmxtJytkGeqCdMs+98VN8fh86Wj1sHl23HwnjtY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630410; c=relaxed/simple; bh=1kAIcZFQaP83OKZqO670+TCpX+32YP7f+OrYwTGWjDI=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SgI+inEq+uBMClI4mVw9FXB1D6pvXTYPVvySpi6YhrvODSt+nknN5q75psxlctDxM1C49ZTITD4VswvSfjhtV8LVm6b9ZifHLzuJDAfv9TUQGNkNrPlCw3n0kiVMGgi9hCM0a/EmBdnohnjXB4VIb8BCzk2LVE7IebjJGyDFocw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=bbQ+OWfE; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=V7YOnIPq; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="bbQ+OWfE"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="V7YOnIPq" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1gAwA003113 for ; Thu, 27 Feb 2025 04:26:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=yBTkSA8Hze0Bbqotlo9kvgN2MtjoYlVtVshaQJrRcJg=; b= bbQ+OWfEDnnsihYnoca6ng9ubOl2ERuasTDb4B7BtRJ+wRhExnU/8a9agoYP+3/X p/UsJIzCE1JS4FtmdmZX5E4NhaAfCFn3TeHOfgMxN5Ohp7tZJCJ/023a0GgcuuR6 K0mH06BLRmXVrRdeUn3PFp4gEgG2F42qxwD4JE6IfObTBS6N6EiWVpqBklkTfBkG 9pJXRXB39OWd2rkGpeEj/QEzi2WXjOflTAI8CesttEAPqZ552Vv4qEwRbMHlfY1P oZ7grmcGNVkvLBzXmqNyl7Xz0bRdoX5/m5wDXbQZ+fOZi7mDbpTMpxo3fbg6P2Xq yQyIMAxf/kAzwP1aX7Gpcg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451pse2mmd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:46 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R4DwQC012594 for ; Thu, 27 Feb 2025 04:26:45 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2168.outbound.protection.outlook.com [104.47.56.168]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44y51cuy22-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IKzdhjoBnbEd4hvYsdlYvA66ldubJgcdu/uu9UZ3kLO7Gfxgge2L3drp5yHE7Rm5WJSIeGdisG3Z/HOHP4tP9dWMbME145xaSIjINTN5pJ5STOa8GC5e3CVca52KvqaAVuf7Hy7imgeTIwo1jOn2ZI8j2qLB2KEGNmjP4Am7dwdM4zbnwkaMgePhNoMIdAOLR+M3EM43uekmPnBhI3w+zWPE6XcgR9pVXmeCBPYNfVPD2evtYQRkjdF/hPyXXSLHY9ZAWsawJ/vfroBh6ZYpUQLwSJ59ZrjQxTm1i6rrLysSSJPOiXjkzTSXzq5LdnDJ1R15H6EeC1CZwWy6B91NGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=yBTkSA8Hze0Bbqotlo9kvgN2MtjoYlVtVshaQJrRcJg=; b=CppRyNMIf75oufLpRTjBh/9HwR0BheXturqFp/KEMgmHwFPXon9eKfCGMOLwBjvlmDxzwZJNdndi2mQo2gdQH1rA4lLr7BqSRjjJ0nO9oW7j41N/AET+coIOijHRj0DDBDx509Ux9+9Us2k/CiC1ozPxP11IlHJzZnzsBWdT/3plUGPRmgK6iQAvcW6dnA+tzPfZbF1BH6Bb0c7jR91vvf9yIlXMZwmArmzWBEbOF4H1+EZtxDZaYnGwVC+NCeN9feZlOb5NipKOjyi8vQL78rLOxLij88LZBV1JrgM8mwoPBRcm02vgL1g/X1ESMkhKp2sH+0k1cucbt4LwYoUczg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yBTkSA8Hze0Bbqotlo9kvgN2MtjoYlVtVshaQJrRcJg=; b=V7YOnIPqVXRwbpErVN+JdH+vWmLIXITDc6++lc4tq3oLosmKRLnIAS6SC82aJFOyegytH+tZjBS1W8UpaKS2fwJK9S09QATfCPR9iSWVwvM6yNaGH1MC048hJ0oRTLvDMm41hRcv6054aItLroO0uNmMQStYMGr6mK2hLSMoYvk= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:43 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:43 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 2/6] net/rds: Re-factor and avoid superfluous queuing of reconnect work Date: Wed, 26 Feb 2025 21:26:34 -0700 Message-ID: <20250227042638.82553-3-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P220CA0130.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::14) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: adb19c3e-c3df-4baf-328d-08dd56e6f065 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?q?LPt+2+tQdGJB2bMGbMbi3CxEBl5+MTb?= =?utf-8?q?ngtI788i+82Ps7Ofu8oO0n1tiOcYUU4D22SfnYJFKqKfA1SLbBt7bLHD9rSPY8pKZ?= =?utf-8?q?23dvwegeS1Z3tdAKjWxXbpABQ/kNICjrtEON2SD/Ej4I01tH3fEZ0obcvT8RZDeJ3?= =?utf-8?q?PPuw9l0TIcJzxeLtqZ5c+Nr4hjlJR5UkLdxdcLAd2yEfG1lFIXSFNrI+UQXZ20FZN?= =?utf-8?q?c1Y4cry2TliSUBCuUCNmXoixdlkI6DnidTA2vERlNSzyvcGMk+NO0a5cxyh6nGTtx?= =?utf-8?q?D/yYb/49kPAM0GWXBZZHvWX4v1B0Owwum0p/h8B1y/hO0ybSrE51aT3vJi6grfZ/d?= =?utf-8?q?isju3tHMiyKOt4bRzMTsaqwzhW1SqkUk/tkJya2JS7XEfglBkDpk+0uKlkJVABkv1?= =?utf-8?q?cUeypIPVvEJ2T6CfKQMTUCfNoMfB+lyQZcy1Kh0BwxhDQMrGdS2rioOpFZP/aiqpY?= =?utf-8?q?6qDvA7Mkc/DSTPw/XkRiS5NyTz5LqG6o1GUjT1EeNZCNJna8zvwDibhYHHDGxR9Uq?= =?utf-8?q?dji7gFWQBHi4aoxav0WC1UmH5tJlE37Vqt3mmF8bA1gHq6bMNllJ006f92A3Cc5YK?= =?utf-8?q?DTAKut8aGpw2tS8Br8oajLUyBhK6nkZy/GHE2jhpt6FJCnMQrBpqLKHQm3EHnjfWQ?= =?utf-8?q?yU5axv9czLoo83GJo63DhcW2ZI3/Rwa9iLStC2Qms4WYsuqbtl0PsIbF1As7RlM4P?= =?utf-8?q?fg5B4M7s/oucnmB5J+zHQtTjtfPlgtGujh0HXFu1ME5j0v1ovXJxPOSDjLBqYDQ0S?= =?utf-8?q?q42Z3dmGASib4OXtPf4MCQ7qRcZSW2oFzT4m/18L2OoeyQjQXhHqYb7ED27JMKXws?= =?utf-8?q?JufmFmv3Fh4U8syymHFpBP3WDkzMUeo6lkHDOHZoZkz3Km93FN9iFlrkTyv7qcAxI?= =?utf-8?q?xQne9O0/c4gAV6CX/eeVcuMjtA0uS7VxB3RDDFnRhzUyWohOKEoUVl5SoaRXZVkJp?= =?utf-8?q?7kykD1gJ/L24trnos545E5RQR3yrgG5mTRLycWzOCuja0Dm0i7SonpKSg4oRwuOG4?= =?utf-8?q?OGMdI/DMkILVueL69bkld8Kd5cKsD4O6/krObWYLCLrVI/JK4z2AH2ILDgrj6A/ZK?= =?utf-8?q?NsVLTSp+OEagmnln7+rP0PDzIx1XOnlFm0+O5hQg9P8LovSDtSKcNrP3fCrVQ/21r?= =?utf-8?q?oNNrwFdbBCbfvADuvThn57d86gsAZhcKxWfgc+8e3XIaq7HyP1bJBxadbti0vDiyP?= =?utf-8?q?f+Hp3urghwV4EgeNPAZaPz0UrGTmjSyJwz2Cn8UUw6rSptVph0RCSTm8ljSxDOLVJ?= =?utf-8?q?AZUjTjJMN6jyTgmSEgmwxTsvZnsKQzTPct7z9eL0RkDBmFqoJ75N72f//aCQCocIT?= =?utf-8?q?nc46dixocS75?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?UyQ0NTGCGE2l/sDnRcGxO1oybuxL?= =?utf-8?q?xh4w9lFMMIfCZYWIQwZ/pj8oN8OcIiElGd+boAg+bnmD9J93vOjyPJ5HzmNzpyFdB?= =?utf-8?q?KxohdXyfnNebKI3WqhXr0cN0EChIcOZR0oEJgHbCcCHCAlVMIe3Tr4oVc6uZvIrfU?= =?utf-8?q?uIdNsU7Ev3RR+GqR6RKD20aWGSX2+nJcJ2WpKrAht/QHsmGFzGXEHPeFvL23zPdmo?= =?utf-8?q?XG2NnkAL2jMXpPB6kk/qIc+DWvQ32WbhPv+hlko15505BAgMUsua/4VgLVmXtS13f?= =?utf-8?q?JS1symI7hvxGWGcFBMx2Oc+OGiBvAHxnZAWaNawZRRUMLMTlzQbm6H6wMZqkyG0b+?= =?utf-8?q?qBqU7G5STPEsvEBvbASMM+HNQV9Z0fwgPHYNCbHwon9JreUoQ/fr9ljYwO6xAKNrS?= =?utf-8?q?j3ulViHlp2qStZl59L4quAkURV9ydD+bnWYqUP/axJkOOunh7IkUC8wAlkZR+Kjnc?= =?utf-8?q?7PQWWhT6LxDyqYcg9qKs0RmWhfXmdqAabwt0iF1ZJw6u1O3RUrUG0tuDtlRtguxCc?= =?utf-8?q?2jldoKsVzvr4M+xbQDL4wP47j5Fw6oPQOeOm61BdwDudnAZ4voLbPqFKVI4cXhwpE?= =?utf-8?q?tLe4lvGHtcv8HZVc/LRx+D4L/YEgKSVaFtOAACTpRPH1k1p+2i09mwBntOXcCISRn?= =?utf-8?q?H6Wy0/VMsDlyHUJAvtbxIw+W1pVYLKzB9guuOValDWBUX60X11R9zhf/O2YvW1og/?= =?utf-8?q?V5T/HK2fXjQOM4ltqXsk72D0MYhEyJFV+LuYobxuPFakA++SNXXrY782kLXVtnHv9?= =?utf-8?q?M50UQk3FRACjYHMXPyzrQlzCLig0V+gLFA7y4SET8vwOnlhU2BrCrDGBFFIQS1SQW?= =?utf-8?q?vSJiBI0Ri+NQaMqCGEXsCLxNesbWo2tP/qUJS2T1bC+9vEgpK8lvvvUFp4XmBJTFj?= =?utf-8?q?lmhFuN62Y0GuHGEEr7H/LjzOJ4MI6uVpzdpp4D9JILcTK3ePuYZ4dFPoy2dXQ2fDC?= =?utf-8?q?p3aMf6ixWKY+JlZ1Yz5n3klNCPVB3rQugRrAKf60EBWW2LGWV40IHf2xnEXjlbZ9D?= =?utf-8?q?C5TRxGB+covTfGfbGI7gScWWSivxRnYnYpXrEbFvwTCDdsQBMm/3XK8lDaj/cGSqi?= =?utf-8?q?SOGINSaTSSId122uzWgkTgdKZdBGpUgvmbacvgvBKBv5Zl3/k/so1n4L8q4fg4gsH?= =?utf-8?q?WlTe3PVyn58qlhz75W3upqROXRgMGHQOMjmEqNj4czK1M6b40CjJZmL/KGE2eqSmr?= =?utf-8?q?ny/oxPJGFmPkW31nTB3HfGjMe1uIejiX1m5UQGe7JA4d6gGhfK4WSBc71LPc4Q6/O?= =?utf-8?q?jPcUPgR/iKoxpknurGAnDqpTNB27ba+nz4jyKPJWi3QZQO46YhRel83JYb/GDcRyn?= =?utf-8?q?t9bsO1CHXc65M+6IhT6I4jjgIa2bWor3/SrIk9te5seRKKUmKta+N8fe85Q0KYi9C?= =?utf-8?q?HAnW+BgBZZTXgZJLb7J+v09FYqLVVTiPyD2rwrhHmVgU1rbEE+JAQTkXaUudOapRA?= =?utf-8?q?F+Sh0Dmprg7K/UqX+nsfo9YyV2ubkM6izAODYnOzxX4SRRngy5Th4Yy6hMjTmxdAA?= =?utf-8?q?UiNHoU6iiFLf6RY5jiKSw0RI2dXE5c9Rlw=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: wpEwyPxbHAh2T9sPTT/iBser3czk3mG6NpLIWUOLMQmJPBN+XsOkOM/zZSx0yjEBT5wp2YCk7DHfcDfQJWox4HK4s+fIM7z1eVlEWWyW7/+l9A248ldROFdkuwokJer2jx35voNQX51WL9/3TVrqaDTmMChr4Ij6rrheVvfDZvGxnkiLSb3yDLcyXHa84HwrgjGVCgMlwxgRjaFmwrszRUIUzz564s5yOKA63HIHkF2MtVileLBUricTwObAq4c58Liy8fzci8dIC13ssCcK6tQgDlk0Ajtw6uR3UqH+HhujwQy0F4pPdiZbjFE645KjLDl6h8ObKMy/JbbXQDlcdreq4Lpcm8VPu0o8fxugon6DbqqAfiNq7ak03lCiKgrBQ4gaP6kExjp/D9/5TRJgpDnwmw7imIrQzZZRNt3GfuZF6iaqvKkSphJQQdqHP+eKi7DTQ5IpIWM0QzmT4rX4eoAqXmqz35TWaxCArJKyFOCSA4BrtEnzhK0/h/VaciCN6MxL2GaoPkfqJLrH2+3wiIGJCMbut1rkRmwn4IqysSUoChL0riEozQxV9y5GA9DtrAVHsr1iYo9yZAH/kSPVxupWm9+Q8UyctXdIMpJvtaQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: adb19c3e-c3df-4baf-328d-08dd56e6f065 X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:43.3469 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rc9v0kzS+Zl1LuEBRp2TjOLP0jY0+UbSaum2JDID81z/yRXRmY7lt+MOq9k3xvWrSxmsd0139MkdJaHOs0P5RgTX/iL88v12PWSr2ulTS8E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-ORIG-GUID: Xz0bjQRZkG9Fck-lyciKg2NTjeMO6k05 X-Proofpoint-GUID: Xz0bjQRZkG9Fck-lyciKg2NTjeMO6k05 X-Patchwork-Delegate: kuba@kernel.org From: Håkon Bugge rds_conn_path_connect_if_down() queues reconnect work with a zero delay, not checking if it is a passive or active connector. Re-factor by calling rds_queue_reconnect(). The zero re-connect delay on the passive side may cause a connect race. Helper functions are added to conditionally queue reconnect and properly clear the RDS_RECONNECT_PENDING bit. The clearing of said bit is moved to the end of the rds_connect_worker() function and by that also fixing a bug when rds_tcp is used, where the bit was never cleared. Signed-off-by: Håkon Bugge Signed-off-by: Gerd Rausch Signed-off-by: Allison Henderson --- net/rds/connection.c | 5 ++--- net/rds/rds.h | 15 +++++++++++++++ net/rds/threads.c | 9 +++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/net/rds/connection.c b/net/rds/connection.c index 1d80586fdda2..73de221bd7c2 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -913,9 +913,8 @@ void rds_conn_path_connect_if_down(struct rds_conn_path *cp) rcu_read_unlock(); return; } - if (rds_conn_path_state(cp) == RDS_CONN_DOWN && - !test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) - queue_delayed_work(rds_wq, &cp->cp_conn_w, 0); + if (rds_conn_path_state(cp) == RDS_CONN_DOWN) + rds_queue_reconnect(cp); rcu_read_unlock(); } EXPORT_SYMBOL_GPL(rds_conn_path_connect_if_down); diff --git a/net/rds/rds.h b/net/rds/rds.h index c9a22d0e887b..1fb27e1a2e46 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -794,6 +794,21 @@ void __rds_conn_path_error(struct rds_conn_path *cp, const char *, ...); __rds_conn_path_error(cp, KERN_WARNING "RDS: " fmt) extern struct workqueue_struct *rds_wq; +static inline void rds_cond_queue_reconnect_work(struct rds_conn_path *cp, unsigned long delay) +{ + if (!test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) + queue_delayed_work(rds_wq, &cp->cp_conn_w, delay); +} + +static inline void rds_clear_reconnect_pending_work_bit(struct rds_conn_path *cp) +{ + /* clear_bit() does not imply a memory barrier */ + smp_mb__before_atomic(); + clear_bit(RDS_RECONNECT_PENDING, &cp->cp_flags); + /* clear_bit() does not imply a memory barrier */ + smp_mb__after_atomic(); +} + static inline void rds_cond_queue_send_work(struct rds_conn_path *cp, unsigned long delay) { if (!test_and_set_bit(RDS_SEND_WORK_QUEUED, &cp->cp_flags)) diff --git a/net/rds/threads.c b/net/rds/threads.c index eedae5653051..634e9f431fd6 100644 --- a/net/rds/threads.c +++ b/net/rds/threads.c @@ -153,8 +153,8 @@ void rds_queue_reconnect(struct rds_conn_path *cp) conn, &conn->c_laddr, &conn->c_faddr); rcu_read_lock(); if (!rds_destroy_pending(cp->cp_conn)) - queue_delayed_work(rds_wq, &cp->cp_conn_w, - rand % cp->cp_reconnect_jiffies); + rds_cond_queue_reconnect_work(cp, + rand % cp->cp_reconnect_jiffies); rcu_read_unlock(); cp->cp_reconnect_jiffies = min(cp->cp_reconnect_jiffies * 2, @@ -171,8 +171,7 @@ void rds_connect_worker(struct work_struct *work) if (cp->cp_index > 0 && rds_addr_cmp(&cp->cp_conn->c_laddr, &cp->cp_conn->c_faddr) >= 0) - return; - clear_bit(RDS_RECONNECT_PENDING, &cp->cp_flags); + goto out; ret = rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_CONNECTING); if (ret) { ret = conn->c_trans->conn_path_connect(cp); @@ -188,6 +187,8 @@ void rds_connect_worker(struct work_struct *work) rds_conn_path_error(cp, "connect failed\n"); } } +out: + rds_clear_reconnect_pending_work_bit(cp); } void rds_send_worker(struct work_struct *work) From patchwork Thu Feb 27 04:26:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993722 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 89FB21EB5C8 for ; Thu, 27 Feb 2025 04:26:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630411; cv=fail; b=Hgglkals1Ws2ZKCP3NeG78VniMIXu1ZDsiVNY7r1vfIbmx2MaDDwsA07pyEpnjOQyvt9uK+qvZ+1Y3dUQ1+aa8ts9FvmFIGeR8XuMAOguUXzv5mMiOxIJVRPZKgnJCfkRQbRcg6m3X2uTGEsW25vw6B4kg4Q/Q3256oN+bmAlD8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630411; c=relaxed/simple; bh=0kbc7CKMJlm+xG8z8Yd5UhGI94Ajkcsl9/SSgptX0tM=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LRFRvY344yA9CYJKcMEsCaCD8nH/spHfSYp038LUpRI1rZInKu/veQ2ML6dfffsELK3EARtxJKTwSyIhZJcamIEvAsQmW3RHP69usRV7gPD9bQ5Fz2IK3p/P00VKA/WCBkhlviIkTKoFR5NHU03iVL6m0XrEJWvtsIjPNjuysGU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=fQ6H3nhD; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ieKA6gyk; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="fQ6H3nhD"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ieKA6gyk" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1gJij021508 for ; Thu, 27 Feb 2025 04:26:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=iZ5NBE9I70djLF74sN+w6odIO+OfqXLNUweyhByekHQ=; b= fQ6H3nhDXQ4UvFdQWmwFezokgJzK8npUOKObGSKLEuoq+gPhdBdbaraddkn4ipJw CCEimeaWfXk9VwWxX3obJ+Mzs645tMDBeDAc/rCWvUgK5tpRdYtxj8Sb3cQXSqCr xRuf+sc/lfpOJuH33qs2euK1jx54w1GRXL6vuI69AMTY77yj/J3a9cXqbmLP3HXz lIPW89CfpyNaiTOQw6WyCbh7Ld7EyWr4i5JIulZjt8tMrbYdQiWYJhwFDFSHC/3B +drI0NHrIyYq1Wzs7E0C5j3PqzikaL5C49HurAojce7nC2TSYVR50tZZeKnZyeIr zS4nGimejOw1AQkYL4uwbg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451pscandd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:48 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R2eOKf002697 for ; Thu, 27 Feb 2025 04:26:47 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2172.outbound.protection.outlook.com [104.47.56.172]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44y51buaaf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yV/FWf+4taAFOSjcFTyE48cH5Afpdqd5O04tZvJN8ZnjFZ+QZsHq07HParugqS90vrRRJK6SyaLNEoVVa4099cJ4Uu+zlq2kAG5kRewz56hdKmp0bSCdFkrnXZEWF9FcUNMrboC/yJMOR/RK9a7HVMjv9GrYdes3VbYdnaHbMCZzplADI+qEQYd2SxE0hM3TtIVmn96GUq1xlfpeKUmjIkz72yd4hyVmG3gCABimo7PFA0SDwTw4fB945ElpfVn6wJnkjF7lCmslEPmfIcsUQmxix0rRTeVKzTsuzLsbAWLNA5TzqvVeaL1b/2Riw2X4UPH/QLSIR+07CwSfvw10VQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=iZ5NBE9I70djLF74sN+w6odIO+OfqXLNUweyhByekHQ=; b=ZCBdLs9KR9y5/pzRYWEwwNntnFhD4dB162nKznyBT//k3FoXiirKuCN/IoVOtCkR5K9tNRja25+9Hw++GQwvg/krN/vSvwOeCpfTKomAj3IhEaZzy1Col1H2iV+Xsv3e/cDAMXtDJEUSDt30p7DADz8Z+nA5YSCDQsgwZDKY5hVFgU1Vj7K8ie7HcWp+XjG1I8s8La7v3jXwrLsxcWqY6ts2J0bMimOkRL0DmTTDsbWpcV3yqeoGW5eLik560iBamZRLVb1WgNycwfBpRc63ApZNst1jH5Ns5OaWxPv6B5F6bSP+LbNgcuIHA9jGjxyraBkqE9SZartM72K/Zc69hw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iZ5NBE9I70djLF74sN+w6odIO+OfqXLNUweyhByekHQ=; b=ieKA6gykazwD5z1e6L0IPlNckxjmcUYhLQv2NjLzLkzDN0/L2ZY/j9OJ65EdZkm0rHGGO1dYijkZgFkJLgns2lEMPn7AuOyXQ9qHwv0ga//neL0/w2xJULl7wL74lrhvLX5n58ci4u5vdAUqGmeQni09c021rhoUW/TUVVVZzwY= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:45 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:45 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 3/6] net/rds: RDS/TCP does not initiate a connection Date: Wed, 26 Feb 2025 21:26:35 -0700 Message-ID: <20250227042638.82553-4-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P220CA0137.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::22) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b73737f-cc27-469a-ca6f-08dd56e6f16e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: 6vxdNr+Yza19bNPeQ+/GODWw3IlFc/SkfyleeRnfU7Ggr8Y1khpjgttbrSaq8XVwxXNI/1B8CYCuDNKK5EBfcZ1qvax9nSi9mD+PPeDzf0ovMsuhHsGdDmkPofev+0WIZHPFC8ukasGZyhuHRvEfyo4qHTGPGEaACR4r73z2Ov6CQq326Y6NrPexMDW6G3laKGgKriBycq3CpUrPBSsa4asNffhG961emCx3zvkzomabUWruPSSQgf4NGVoGUJi3iyJvb/7Hhao8C81aa3UIEdM+LIH5etWxY9H34B/i2EAXIz1JF7wGPVJXANznLukEhKO917VRrcpGKQMII4UXOuT4RIN3Q+E5Q8OU6DPOSd4qVhYJevYKXVIKheFbRu4N38Z9q5KnR9meBFzXXtQJ/7epP19JwCKj/jk96RJvrkej3/y3JvPlSQIaEpsYy6CDoW5rnZy9U9OOJnw0hBca7ACJ0K4qEp+fY5dac0DwaoYSLPrUnRkTIwduQV6cULf2weIY4BDhbEQpEdLWw4qngyqw/zBMcHUpymTSnqI2YBpn82ri7/WZsVDXKKn0TmwiSu/SdjZrzgaQuJAAxiUozcc9WKiZ/Pzbdkfz1ct11FBQK5PsMXhsd1+52D+XQk355p8cLuPUZvDd6rRnwerg/bXXgnxWYCxE0zcoToptksI8t/v7OLFOus9fy6F5s0+pGoW0iJ7muwai5JPw/hE697XU4eyk0rnnTa6bS7AQ8O33zUC8gKauwCKm7YyLOufRKuhdEA3bgqRjPKpV39awuqoFAPpEtxWMXe34qPXnpsgB/KSfgjWSSOsBMVCDqTcAhcLsRE2CUPHV9LnjYGZUWYzlcqahzomT+Ys/rNq1ViBffQEAd8G1gGLYMjAqJ1bMYlKgHNyp0xmy9wvG5m/ZqaWIhVCU2u8OmKJ31UkxccCSb0kghUcHGSY0Wd169Hxjp1KnQzCn3HM3Q7uBmOJrS1Jdr7dtG098T+v76cQu3zgMDm/hu8SoVZE3+wWITeyI4fvWU0aKWAP4E4RnZLX7pXYZsYcNBwdXaDYP1rcctD2x5dKCyiLW9MzWpbID8YwvVCYUgecGL6y/nEuWdy7YdH6UNyE1a4+xCCLMMiBVNKC0jvEFrFl4GEgoDFouJvd/YOmDIEaY5pxDHE7WljfpKp65+1fcLUU1C4hUUYsJfHT5gX87z5cAdRND1pGfQlbCHAMaf3bg/2N9BlvbWow9o7BStLxTo9G+BApUsj7Iy8r6ciufeVqurrgGnN16XYHwMUHAPzy8fh8FmUNZ3HAv0eG7+v1jtrsrNLg2hBLO6YgCrCmsvnzFh1spiQVQ1WZFjdnMVvlpp4G9WGqAgl2q9X0KvR1wUkdxKT03xv+Hgr45yAWTScCQRDCsbaH1R7M5 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UruOV5Rvqc6OOWmuImDPoE+2w62ZEq2YfRyLtEDCSe6qbBEpGVaolK3tGAD9mN7prWx1WElQPPtNmZs+FgHxl8aHa1FUxGyrCmwGjJuNQEsxxAueqXpRYivxeDWTAhCEquJx773svCfrjbLKRosyt5aTFhsuWwKrc9xj/RGufCqYGC1Cb3SW1UQB8VYn03/V2ZADRqb7FV8zz8c8Ks1n7lXz0TvN84e9BgY+1dZssCHgnqrnclCzgcmKNDww7oFIU0RNJ2UMy5j7kGmspSs2Sowv0MJDiJv550Bf0it+jHaED0I7kXLZupSoeqMLR6HBnkOFaQO5hRVr8qO6WtmaZGzpshry5GhSzkvoQmNJxR8w7sENkxKIPGILcHE5pUfR8uFVZKiiTZmod4Djbta1icHubE8AznxsLNobBW3OatOH83VDrJws+SBQ/ZZpj+lXqdDNbDsu73t7zxBAJOWL5DSgr9nkLjy0uQuE0yyE6Cm4iBS01tSxZeN4iL/bXyB/GF6w63afD04WiNcNqreMbbv2W4oNBid1nyk8mM5xr8dgijF+zJR2aMDvnjIIzP1mnkf72R+mpdiZ7XRkc5UbNwDOT8R/qvlBmnpBqCSXv5b3yF3nAf0stKSAgATHeEvXFpQhJgnaGtM80M5LKe3TvglWdBy9pIl9qHfcO89Tb0ER1+h3bOT4rqwsG7Hpa0R/FqkxrbYUcLlKtIal5+erHR78qZ+/Taz0r+pWKhzlqX7WxLNqq+Uueqr2FkQpIJqfsaeX/hMbe4YbWPUsPoFH86BpIwR57JXBimXVCOnauZuWgXfPzEbHQ64vljZOLi4jJZoJRLO/aW+IJTdoyBBiGbk19IsmCX46AWMwTNooPu5yiqfl0Kd9Fv1g5HHVy/amUIFPVt5AfbpGxEb7RZiWx+JtQbZEEe6mtAC2Tojhv1z8EJwV2dIwryS6/nUzM4Yki/JmDkBfbQPHBsVpodbNBABpgchnaYQm2BtR1UwPMCR+WRH0Rou7zBaNMJrvxCAMD04FN7WqiAMge20ZG2bWnPHeJ4wJ/r6t5P2uv/PblhgFoxbAJfgP38btcKhf4CJ+CqdHsVSuLysUWZbQr+nuycLhila7hOfSW4I9iqqF/vDpceEtDk1QZXFZZKEK+qJXk9QK6mtBZLayw47NDdmVI7yLLiKSP7jV5IW9Bjt0L0tWTRAFRRj856cOUL6r7EpU3GwVh3hMIaE0CWOcRmwOstDsCRfdNjhFn7OOvMKrltcomhe0a1yD/1z5KWsuvjTYyq6AGfA/arnBR+da28DrCnFhmCg6Uppsx9byJwj3BvdxVd3C5E8ZyJDy5PB183yJnS46PcxqRbqaZqSBG8o6h4pHt//X8mZIJ+O43KkDlQzqtQgCf0jojAm393CHImYHC6sqauM4+pbru7VmD0eUD4XNUxwWBqtlU1XSvwhIsVBr8XpGLwqaizZUkN45lwfbfL5XNzdPIiRBzKFooh/vYUnicleSxA3d3/t81WULNXeG4iyn7vTlJl2oCSlQ7DiV1daZC7hLByvSNkBP/BCmpF/CE5P/4Csi+aKDAL4AbgDoQKc6V98j4i4CScfFHybI2EpLmssQONGPMnvmwk1Bmg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: STrOx3KNvri9Vhf7uQENEIbHhia63zJVJ7L+Yk/el3CdgvaA5iobhBCNd2/9Qhs8osMVk+urZd9xB0vIERu6e74pidOLR3oTOKrTvmAXK1vKh3p7Ufj5Xd7OqRKNmpVIIt3RO9+QxpEd+8VuzCHhZwrY3lPkKecfpHvODH0OvdNRnDsAGRM+6R4Gl8zuu/VuzC8OXgVF5F9K/yum+cSKXlt1FTx6ae+tYFulyIwh0fCEyoDJfHRdikcKvvzpgetxuYbjl9iVW3Wn2dXhTgnAt0J/lV3egFULeIBRFS0XpjY4DSPl4uSe5J4b7YCF3rLeMXlpQlGx7M0HgFWanCz6AeYEsRcW+HPYpd3a4mQU+qHHUcC0C7D4alRKF3RXNWhlhTuW6pJl7g/rU7YdMkihgAQaUQFbZ87UM+5F9lnTRnW8YAHScQPN0PBZd8Q5PNyA1nZZqiY4em5tVpB0EqEt6DvKG+m32bEawpjWhnC7ixBnvf+8yB4KNF011uknbEStZuDuaROZwaPGM0ZWoxBhof5BDK9seOhCP1c/V4ga0dOx40imqoX0yV4FS7xcLkshA4uFBFspBGDWVUR3Cbej8kPyDL73Gtn4QtJ3MUS1oSs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b73737f-cc27-469a-ca6f-08dd56e6f16e X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:45.1118 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vBb97IVLxGHsBOgK9rTLXWEd11a2eubbZVNylvEmotE02cC1LLF8VHC/C1Wrq09cZvNPzrApacrdSzMIv0pXluvxy8TcotNUFAaCx7aB6qI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxscore=0 adultscore=0 bulkscore=0 phishscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-GUID: TP6kppX67gyF6n42LxSFtIrhiOIEyA4I X-Proofpoint-ORIG-GUID: TP6kppX67gyF6n42LxSFtIrhiOIEyA4I X-Patchwork-Delegate: kuba@kernel.org From: Ka-Cheong Poon Commit ("rds: Re-factor and avoid superfluous queuing of shutdown work") changed rds_conn_path_connect_if_down() to call rds_queue_reconnect() instead of queueing the connection request. In rds_queue_reconnect(), if the connection's transport is TCP and if the local address is "bigger" than the peer's, no request is queued. Beucause of this, no connection will be initiated to the peer. This patch keeps the code re-factoring of that commit. But it initiates a connection request right away to make sure that a connection is set up to the peer. Signed-off-by: Ka-Cheong Poon Signed-off-by: Somasundaram Krishnasamy Signed-off-by: Gerd Rausch Signed-off-by: Allison Henderson --- net/rds/af_rds.c | 1 + net/rds/connection.c | 3 ++- net/rds/rds.h | 7 +++++-- net/rds/send.c | 46 +++++++++++++++++++++++++++++++++---------- net/rds/tcp_connect.c | 1 + net/rds/tcp_listen.c | 1 + 6 files changed, 46 insertions(+), 13 deletions(-) diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c index 8435a20968ef..d6cba98f3d45 100644 --- a/net/rds/af_rds.c +++ b/net/rds/af_rds.c @@ -685,6 +685,7 @@ static int __rds_create(struct socket *sock, struct sock *sk, int protocol) rs->rs_rx_traces = 0; rs->rs_tos = 0; rs->rs_conn = NULL; + rs->rs_conn_path = NULL; spin_lock_bh(&rds_sock_lock); list_add_tail(&rs->rs_item, &rds_sock_list); diff --git a/net/rds/connection.c b/net/rds/connection.c index 73de221bd7c2..84034a3c69bd 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -147,6 +147,7 @@ static void __rds_conn_path_init(struct rds_connection *conn, INIT_WORK(&cp->cp_down_w, rds_shutdown_worker); mutex_init(&cp->cp_cm_lock); cp->cp_flags = 0; + init_waitqueue_head(&cp->cp_up_waitq); } /* @@ -913,7 +914,7 @@ void rds_conn_path_connect_if_down(struct rds_conn_path *cp) rcu_read_unlock(); return; } - if (rds_conn_path_state(cp) == RDS_CONN_DOWN) + if (rds_conn_path_down(cp)) rds_queue_reconnect(cp); rcu_read_unlock(); } diff --git a/net/rds/rds.h b/net/rds/rds.h index 1fb27e1a2e46..85b47ce52266 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -134,6 +134,8 @@ struct rds_conn_path { unsigned int cp_unacked_packets; unsigned int cp_unacked_bytes; unsigned int cp_index; + + wait_queue_head_t cp_up_waitq; /* start up waitq */ }; /* One rds_connection per RDS address pair */ @@ -607,10 +609,11 @@ struct rds_sock { struct rds_transport *rs_transport; /* - * rds_sendmsg caches the conn it used the last time around. - * This helps avoid costly lookups. + * rds_sendmsg caches the conn and conn_path it used the last time + * around. This helps avoid costly lookups. */ struct rds_connection *rs_conn; + struct rds_conn_path *rs_conn_path; /* flag indicating we were congested or not */ int rs_congested; diff --git a/net/rds/send.c b/net/rds/send.c index 6329cc8ec246..85ab9e32105e 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -1044,15 +1044,15 @@ static int rds_cmsg_send(struct rds_sock *rs, struct rds_message *rm, static int rds_send_mprds_hash(struct rds_sock *rs, struct rds_connection *conn, int nonblock) { + struct rds_conn_path *cp; int hash; if (conn->c_npaths == 0) hash = RDS_MPATH_HASH(rs, RDS_MPATH_WORKERS); else hash = RDS_MPATH_HASH(rs, conn->c_npaths); - if (conn->c_npaths == 0 && hash != 0) { - rds_send_ping(conn, 0); - + cp = &conn->c_path[hash]; + if (!conn->c_npaths && rds_conn_path_down(cp)) { /* The underlying connection is not up yet. Need to wait * until it is up to be sure that the non-zero c_path can be * used. But if we are interrupted, we have to use the zero @@ -1066,10 +1066,19 @@ static int rds_send_mprds_hash(struct rds_sock *rs, return 0; if (wait_event_interruptible(conn->c_hs_waitq, conn->c_npaths != 0)) - hash = 0; + return 0; } if (conn->c_npaths == 1) hash = 0; + + /* Wait until the chosen path is up. If it is interrupted, + * just return as this is an optimization to make sure that + * the message is sent. + */ + cp = &conn->c_path[hash]; + if (rds_conn_path_down(cp)) + wait_event_interruptible(cp->cp_up_waitq, + !rds_conn_path_down(cp)); } return hash; } @@ -1290,6 +1299,7 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) if (rs->rs_conn && ipv6_addr_equal(&rs->rs_conn->c_faddr, &daddr) && rs->rs_tos == rs->rs_conn->c_tos) { conn = rs->rs_conn; + cpath = rs->rs_conn_path; } else { conn = rds_conn_create_outgoing(sock_net(sock->sk), &rs->rs_bound_addr, &daddr, @@ -1300,14 +1310,30 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) ret = PTR_ERR(conn); goto out; } + if (conn->c_trans->t_mp_capable) { + /* c_npaths == 0 if we have not talked to this peer + * before. Initiate a connection request to the + * peer right away. + */ + if (!conn->c_npaths && + rds_conn_path_down(&conn->c_path[0])) { + /* rds_connd_queue_reconnect_work() ensures + * that only one request is queued. And + * rds_send_ping() ensures that only one ping + * is outstanding. + */ + rds_cond_queue_reconnect_work(&conn->c_path[0], + 0); + rds_send_ping(conn, 0); + } + cpath = &conn->c_path[rds_send_mprds_hash(rs, conn, 0)]; + } else { + cpath = &conn->c_path[0]; + } rs->rs_conn = conn; + rs->rs_conn_path = cpath; } - if (conn->c_trans->t_mp_capable) - cpath = &conn->c_path[rds_send_mprds_hash(rs, conn, nonblock)]; - else - cpath = &conn->c_path[0]; - rm->m_conn_path = cpath; /* Parse any control messages the user may have included. */ @@ -1335,7 +1361,7 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) } if (rds_conn_path_down(cpath)) - rds_check_all_paths(conn); + rds_conn_path_connect_if_down(cpath); ret = rds_cong_wait(conn->c_fcong, dport, nonblock, rs); if (ret) { diff --git a/net/rds/tcp_connect.c b/net/rds/tcp_connect.c index a0046e99d6df..97596a3c346a 100644 --- a/net/rds/tcp_connect.c +++ b/net/rds/tcp_connect.c @@ -73,6 +73,7 @@ void rds_tcp_state_change(struct sock *sk) rds_conn_path_drop(cp, false); } else { rds_connect_path_complete(cp, RDS_CONN_CONNECTING); + wake_up(&cp->cp_up_waitq); } break; case TCP_CLOSE_WAIT: diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index d89bd8d0c354..60c52322b896 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -211,6 +211,7 @@ int rds_tcp_accept_one(struct socket *sock) } else { rds_tcp_set_callbacks(new_sock, cp); rds_connect_path_complete(cp, RDS_CONN_CONNECTING); + wake_up(&cp->cp_up_waitq); } new_sock = NULL; ret = 0; From patchwork Thu Feb 27 04:26:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993723 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 89F971EB5F6 for ; Thu, 27 Feb 2025 04:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630413; cv=fail; b=cOhfPVlzUalsuEkehI6s3EwqkzzU1Q+dSd3MaH0ieTdqluOrq4NrP1k27giPP8truXJWB61NODW8Wxk0ibEO+7G2jDUY+nhv7Q6cqxA3/fNzu66FMd0yB5/n/jcAQGuqusaCxwYhAKDZwdx/2WC297DutQ8Go+LONe/C3+vnHfo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630413; c=relaxed/simple; bh=u8TNcM5GZe9CxOPgI/so8BMLQTdOhzOl/MFnpuUmoHc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=IY5vo9FN0NOSKWWs+WRi01gLaQS65CRRgXbwxWmi4u54SoctE/PkTeHSsibnUU+W7dWIFeQkk5v1Z2wsezcQWuAn97uXRQ+J9eCRlO9h75YBqFg+XvUepxB8xjZkgrev/D+1X+wgA2z2DBZVfYWEX1pFHMTsXcFaTtgeVJwOJok= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=F4+BP5xc; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=NS8b8EH2; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="F4+BP5xc"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="NS8b8EH2" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1fs4k027616 for ; Thu, 27 Feb 2025 04:26:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=Jy0UIDj2jf9ADtWk3KVXlP9OQMSqaD0e7Dn95+8ojJk=; b= F4+BP5xcqz6z2dF6PIakCC6Y4h0US7RvK7XHCB0cybaxLSYBFwd2len/BZhS69lC Xp1J48+SFBFCYeGcLAFHW6nfmXysT+Kc7KIk2l7TIcbhCaXNpJGK4FTgr3ehjubJ 0LvhVgFsOhHcnQmKFjTGRbHz/MsDOQIKx/Xj511H4Yq2d5E9PK6NRc6CkGScGbvC L6eFd1IHoDfL6r4cenQiFsggvum3wu8xjYKlkNLcJt8z06BE4lJlQjaoWfiiFD4w ry85c6s4DGwQISRQP3eaDa1NOBRrInzJ223yD7veHsK4xBpzPM/nVvvA40KaQ9qH D5VsqTIJOqdhECBJN4gC5A== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451psdjkug-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:50 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R3o4lq012657 for ; Thu, 27 Feb 2025 04:26:49 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2175.outbound.protection.outlook.com [104.47.56.175]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44y51cuy3j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j2URw9nlyvI/DbQ/bOAZ13lmhVNK/UC+9Bn0BJ8RcpaPM+TYwjk4+y3v09SJILrbkKz4oN1TVepqKeXLRayPHHf0nVtIvH+cfCOVvo6MP3ivz46gLgm2Hxfsq1uwwmEf4jL5IIbGP+YGw1vN33ct+mojrrfxlFpMKwbzIEEQu1WXV4KsDkHAKR2gf7qou0xbDOMrCc2Z3HNWsam2jrpRo9LMMhDNfvF8B2kIGR0U5CcvBn6X2RchvgWw6G1yUMCKhUR+CxCYPeBQayPK24/iE5gJiS/TiYoeLOpfauC1X1pZxVEtdz0r+qR2jVgTF1WrXz/t4haZo1JQ5pGV0Jx7+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Jy0UIDj2jf9ADtWk3KVXlP9OQMSqaD0e7Dn95+8ojJk=; b=CdTP6YjK2B5oN3JifpBKBfXsFkqwTAkYyC9Lt6xK5MPdMTYcu26wTpemlEO60HaL0DuRd8ACwEmuw866zM6PDPItEARdAXfMFYlp6m2FQSwckdXfqJSqfEFVwLLAgM00QjYI2S9/x0gPi/KTgyXhzuvh4VaxAuAZIqwo8RM6Ca6TLJ7Mev5wbA1WjfUlrLpHF03rD7xPGFSvHklUnW/cGvYYDZ9npGFyZtHScqnYG146zNLNaJC+hsX39KqlOB+ZMjK0N5SPkNxaN17yM4WZglyG+Z8GVYQ2oOtqf+lfV8sVMRACbgz66zzC7Rihis3ZEv9MG1Bd5Nf5Bkt2gt9FFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jy0UIDj2jf9ADtWk3KVXlP9OQMSqaD0e7Dn95+8ojJk=; b=NS8b8EH2kPGL5GOddWml/LSGjN+qGIV1ECQIeDKfQ1IZUZZ22qlRvMxdP8Muh/RZn15bsu9yE/6oDe+2W1+lf43qHlqOCQIUddteRhHio2mePVEh8gi05PO/Qo0NGz3FSDcH7H1KxUD1rAvSGCoLl1/I4DLDW6HsXPAQ2noVAnw= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:46 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:46 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 4/6] net/rds: No shortcut out of RDS_CONN_ERROR Date: Wed, 26 Feb 2025 21:26:36 -0700 Message-ID: <20250227042638.82553-5-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P221CA0047.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:33c::19) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: ad487944-60d7-4716-751f-08dd56e6f26b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: I6L7930YkTVQ+OlV32PzbFMTS+WysRJuY8wXIXlLtH55yIdgTAkpSQsUbnczJ5vxnAGnH4zqKRJVvqZxW8oyVsP+smFLNsScm0DH8KIU75anMgqPk2HS5nalu0bPh2252d5ReX/Bpu+ExprtH5yE6+4U8zZxv5KyQ453tpsojwqjXFUb7U751YiGGcdZ5o4PcQ1yki+vkjdHUNzoP8p/fwLU55i61FCW2nFhIqPq4CgU2E2tU8stM0Mx0kZZDHaZf1v82XQUoEIEyKmxB2k9kvAU+RQqNz5qWZrgmncNrBzY4UsUW0UJuGXu4qa0xrxBU1eQ/YvIqH9f9FOLMlmX5w9g23ylHKdpyNQ0kgZq1yCzMX+zx1ZnKYoFQ4DeNxSnviWvMjlnWJEsq0wbx4Fdhc6w4gZuhyI0jTE2sNSrmJjfK7lodvRInfp8PoxeXDK04RjzAZBSjI+HNDGsfuvnJZhdqrYku+44SLGNDyB7ER7xr7h9su8qtixRBojfBaCHk1Q6oTr2ML6exk3KEyQ5ZdYAToZwmmQlz89ocL63atOC9yKLt/Ozo7g9TEUODQw4cKtu017iRAdEgTQVJMfHK9nRd9/mNaNaiom11C1r31RbvVyt3E+bv6Uv41F7yz2sRxWy++pfyXVLOkDBWcgVqkIQVI+36Zw9Ns9DKxBlQA/D6EkWXPaprhPty8P3hppfB5WVmFCtmZksLzziWfw+xL54IS7hviCq/c+IZieOJwqZCzt7KFFWE6jTe3PaNA0ewafpeEH5DvVnqqxuB5Ztu0l9qwP4w/8dYFGw9n8CS7knqeP1XKAM0xZGMFD5KHzmL35r+8t4Blye3W1Z30EnmBKb9Dg+XBbfTe4Dat5rjNKsmWU+QaySGh6uGU58VAiEF6SsBI1ygVC7ZonD/7I9wcWUAvpo/kz3JHu4xIcJGT8nfj49n2h9Hru2VGuflv/QKdH4XOD4mTjBxPXqNBkD5hPRMo+Nd5VdQbVxn3B60j4eIW3w3rtrFFco/UNkT6Y0r8oBVr3oUWAub1aXgPlvVRw3QLusJJfgdY11hWzQe9RAfWGoAiPKRZhQhHexHFbZpEmZDKFBfJqJ7SwDI7ISamdfTufjCYI6MzhRmmF8hJf3hHE6vIThuybIGQETlYarlUpf76KDiEok0/Lmv3xtiKMm9ora3AvSkSEFVUQ6+zQvEMpIM3Vs5BDdqe5SdMvWO3lgLaFOyTL/n8cNcfzebzfKV0RcaPiXGqPsUKwY3VIA3do0Xf1nE6RhTbj0fsRH0Wh4LUvu+oT6LXuisc/WkyEQn8TGwlIi9iSeDKQRM+7Qg8DcF86wkK1YUxwhIUJOs8xplR7rdGjhO7pdi9r0lstDuP7DbNIrC9s7aI1Ovki/4gv9XOgteQNzQx9Dy140 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SQ6xfWp6g4UWiiSfBrHWqxneAT940OCSRFDlQmY6DfKLszBmCJFHoyY+N6yV8gsFS24ALB/pPmrOi5CJxzt8jnkHJgkg4h9+YSzYR425xIBo7m52LfD/U1jzMNYT/zr9UfMJ7BBdPj6plm1Pt1x1lb+hoFNNJJDcmoWrX7xrUW3SNXb+mGhPJrNYn3nmnGpnNhdOM/4MANt4n0GDpanaAgQdBRsxhzBfg6MDEgdTa5Zz77ikjd1XiervDR2s17jrUiP39A3Jb2KIxpHtekfGdMcqwXHVRUb9jswQ3bhH8vAX+4isACEM67QGIFwH3q4bzLsq9jjHklmVNy38unMUowKMLS799weg0+fgq+lf4aKXNC5aADz/KnsVT2c9WGQjwzLZbxXnZgflfu8OpJ6mAMA9xhErNELHboVa+tSaKVUTq2iz4wO24qy9lAymE2VQkrq+tS5ceITvVddaEIy5iXDaz9jTc82a6vgtvip6Lpclcuq+Ky2aGWgsdvvyTviAD1zZ/QLaSIq1z68u5aQi5vyYHFJSs1rvbxY3FntJtnVSqVFptqY1sScTzYm32DVJ4hw0sByPNMYVn1phLw9wths1P/373LBnJSUQeBOPhKOpvL/aCbQ9Q3BhspAyo9lCNZzcG6wIduEM1bC33yyldtBSrU12piBWVWOxhJg9zLyj6oFdvpbcElh6rAZbsCUpGOCn7K88JvCDYmnaKN1DKPVRYpaAPgwbv2YRGMoP62sKT1CyO/gdAm1MXapKkeebCId2YyWRCijEW5bdJqGievxspdEPZ3H4MRBKiWWrgPgqLAH4ssnBNa47QR0pWwTestawenagCyKTRnEXLqoC8VGs+Giz3nmGvxlwfveZS9dY/89D4wpysjN4wwpbi2QO3y3e6BC5O0LsZMXOQ08qifDyAqtn03b3zk7QhADiltT6wmXfQSokfHyXhvQbQy2hNFo7887TChgoPcdbxMJ2ocNTzHjqj+nKTJO86YTo43rl//02+xCaLVaFDs3TfgXRrDioQjom9FZgatABGbI0DAhRcMBJLRDmfBekhNO0Uhn0rcSDI1vJx/VMdHPQXABTO9ocugZe3yRwhme5GzAX2eR+sXvd9XZc+fbveaCP2CgPe+b55haLrtfzMlaiwE7NExUiAy1A7DFkW8aIMcAg3qJPocd5P1eBIHqr7hKBi3B4N60HlTtfI4erac7RYSAPiefpiLqniSSOghxGzkwt8DjBKOfLpoApBw6L7FgpMwZg5T14nQkFvrhpcCD/EvgYz8P+8cab0eK1LCTwUs99zIy8239bV/GgdDsn1IRcIzINlBPlnC0wnn3pOdHdE9tso75q43psbwas60LJPbllxgyeXhSComElwl6lN8Dnd4lNaXkrxvs2ACvjbgKiF3e+eDVnUoHTth9ATxjb07Rada7Eru8tse6JdH4pHiwiWOTAzFmdht017Eg/q0gYF/v5jGcXzJrayGsD6QUL5qWGm8Z6HTPWAUgBS1fchTwLNlqoehw0JYBi/xp/N6V4ftCOJbY7vFwAv/pJw0J2Rk92PTla8/m/OxBkUEPb/UmdqgJrtRJDcB+HgxVywxqrgZBHexkm5asgYuB/W/yMtpWpMA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: mzAikN6VJRx359c5GMDlt2y7Q9/AZWCJH2CwqL7kwmsB9Oyva4AOsUVQGMpEOPQeAzd5rjUMgYceqZFKqhV6GNcw5Ztt4n1orUznOfU+XhumB4LYyFdaqf/NbRTrNT1GjcUY+WKZnmrtC7dAFyvhYbCNp1hAiwvk5IADIiQW4/2ZDySpeq4RbHeWI1Lx2RdVthEd14mKXE0cd7UTK7vCxOOx0cbOxYqYArJMEm6y3cXDwvO4IbUqVX72BQLf7rCE8RwDmaAG+G6ICH1YMKTIhraIrg/6tVoQoTUTZCqr8gba9O+3RA5PR1sc9/ERimKcAE1XzoB08xAdkUEx6IHCzoTRX+H60JFtHoYy43FoGy5DRQJFIgkiH4SKvX6kteGw4lv+q5JPxAQ6FltJK+Mr1lwTbEyRo/Ov5zYzerW/uicd9Iilvkjir2ZcR4D/j4a2ZOqXNOS6LFFveWixbBhcPBJGWASPh+Pzcx9tEzKnd2eXr2DVfKYRZCt7p9yJ8i5TUVEcvQh6GHyy/SufZHOPJSpJoZyChMlUihQo5YxfDjwR7vX0VtPROSK6lrWZlH0rM0Et5Dfs3AUts7bALcztXVBKxI7+KY9hYZn1iT8KTqU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad487944-60d7-4716-751f-08dd56e6f26b X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:46.7653 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MuhWW1P95kkC9AbjArg271xqMoqlmG7+9NPDrTYCCDdV0IyGRsEmV/KDombDSMen3gx2IMniqFoDL9SItxzQz2D5iN83nTe3oS0fTgyY/NE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-GUID: ceNKNPLRyuxZX9FZ8pSi-yzXWfEG8uex X-Proofpoint-ORIG-GUID: ceNKNPLRyuxZX9FZ8pSi-yzXWfEG8uex X-Patchwork-Delegate: kuba@kernel.org From: Gerd Rausch RDS connections carry a state "rds_conn_path::cp_state" and transitions from one state to another are conditional upon an expected state: "rds_conn_path_transition" There is one exception to this conditionality, which is "RDS_CONN_ERROR" that can be enforced by "rds_conn_path_drop" regardless of what state the condition is currently in. But as soon as a connection enters state "RDS_CONN_ERROR", the connection handling code expects it to go through the shutdown-path. The RDS/TCP multipath changes added a shortcut out of "RDS_CONN_ERROR" straight back to "RDS_CONN_CONNECTING" via "rds_tcp_accept_one_path" (e.g. after "rds_tcp_state_change"). A subsequent "rds_tcp_reset_callbacks" can then transition the state to "RDS_CONN_RESETTING" with a shutdown-worker queued. That'll trip up "rds_conn_init_shutdown", which was never adjust to handle "RDS_CONN_RESETTING" and subsequently drops the connection and leaves "RDS_SHUTDOWN_WORK_QUEUED" on forever. So we do two things here: a) Don't shortcut "RDS_CONN_ERROR", but take the longer path through the shutdown code. b) Add "RDS_CONN_RESETTING" to the expected states in "rds_conn_init_shutdown" so that we won't get stuck, if we ever hit weird state transitions like this again. Fixes: ("RDS: TCP: fix race windows in send-path quiescence by rds_tcp_accept_one()") Signed-off-by: Gerd Rausch Signed-off-by: Allison Henderson --- net/rds/connection.c | 2 ++ net/rds/tcp_listen.c | 5 ----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/net/rds/connection.c b/net/rds/connection.c index 84034a3c69bd..b262e6ef6b41 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -382,6 +382,8 @@ void rds_conn_shutdown(struct rds_conn_path *cp) if (!rds_conn_path_transition(cp, RDS_CONN_UP, RDS_CONN_DISCONNECTING) && !rds_conn_path_transition(cp, RDS_CONN_ERROR, + RDS_CONN_DISCONNECTING) && + !rds_conn_path_transition(cp, RDS_CONN_RESETTING, RDS_CONN_DISCONNECTING)) { rds_conn_path_error(cp, "shutdown called in state %d\n", diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index 60c52322b896..886b5373843e 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -59,9 +59,6 @@ void rds_tcp_keepalive(struct socket *sock) * socket and force a reconneect from smaller -> larger ip addr. The reason * we special case cp_index 0 is to allow the rds probe ping itself to itself * get through efficiently. - * Since reconnects are only initiated from the node with the numerically - * smaller ip address, we recycle conns in RDS_CONN_ERROR on the passive side - * by moving them to CONNECTING in this function. */ static struct rds_tcp_connection *rds_tcp_accept_one_path(struct rds_connection *conn) @@ -86,8 +83,6 @@ struct rds_tcp_connection *rds_tcp_accept_one_path(struct rds_connection *conn) struct rds_conn_path *cp = &conn->c_path[i]; if (rds_conn_path_transition(cp, RDS_CONN_DOWN, - RDS_CONN_CONNECTING) || - rds_conn_path_transition(cp, RDS_CONN_ERROR, RDS_CONN_CONNECTING)) { return cp->cp_transport_data; } From patchwork Thu Feb 27 04:26:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993724 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 550FC1EFF86 for ; Thu, 27 Feb 2025 04:26:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630415; cv=fail; b=BAqIFS7FQ1Pdlpx9C8A6IAxRtspw7W2jNzX1YtWMyqg0vJ10q22MSQpBbeBexVbrCg8VMM6mNjTdcoa35dCwuT+SXUKxP8gZGIoOzW5i3P9ASlbjS2UHa5JMcJLq59AfF868ALun5/uvBCi7hkDeAKXQrX5yaD++S8yL9OMTvo8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630415; c=relaxed/simple; bh=eHJ9miyqCmWJROMQwXpnPU15CjyZz7/5lYylGhBT86Y=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=VyDYtmMhNN+oPdzJaI/a62B6r3eZcaJG6SJvjr1nwyXyt3TshJFxMDiZT1afx/gdYA0oVlJUrZWCKK96vRzHIR/1v/8uqEF9EQU+pM3P61n38jFkaUC0RpuyYNxWcac/gHbLPG9Uy+vaEzdy7vAY7ka0UJ4O5h5VvSPaZV5zr+4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Ywakwh7L; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=jvlsbOgl; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Ywakwh7L"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="jvlsbOgl" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1fs4l027616 for ; Thu, 27 Feb 2025 04:26:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=mJVzXxwATltQmCAeoZlMlT6VvItm3C5h0v5QdPB50SI=; b= Ywakwh7LePaUvYcdsSjc5DtEeNAw5EQlgO0cnBv9UXe4XI+DSu0SoGcSFnraIy3d 2V6OroFG3ij9xkcwvgRGD/HdDCbeYRCZRWzawerWp7eZ+k/Mwy9CMWZr6E2wzK3T D4jFj9ARYJKPosnosx/JzUclCDPFA39dauTyk85FaGgQM26g5b7tFWYQBaxJ5bFo luESCf7Rw1H4S0fwL8Kw2aACpRprobnj6Kl0FUW2AaTdXf4oi5oFrtHe3mH0JR3L uzmk56porcfp+NVkIcCHpreXwgrluwefCL4xJppSrmnnAx3RjnYONVvKbIxVUWid 5rMaXOHejS7AAjyE/Hv9Nw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451psdjkuh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:51 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R2vb68025416 for ; Thu, 27 Feb 2025 04:26:51 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2173.outbound.protection.outlook.com [104.47.56.173]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44y51j6m20-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WIGfZR0kHOo9ydjMLafSE1cKG4kT3MxqpdQJzSy8SGLb6l1nuH58q0Wj9to1aQa8ztPN4ExDnCLPThtw1yMrisWNxlSEyGyWkPmS7Lfz7UVqSKNoARWdL8qw6MdliLn7KNFi0V2IMy3a+lEOJtUWgKHZ3MmazU8WEO6XRrCEbovj4CKQKBRTg+xsvteCpYecwP6aGwBCYAQGujfS9nk88tLrzMYCy+KZx4qrmVwM1R05wAlcHINn+B2tmkk4Q0slfydeqUZDxZujbSJSa3pPaDzxO6kKzycXoW8vru44iICeGqpA3TC8ucX9yTqCNwyULPak35L9U/J+G/fDHXtrng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=mJVzXxwATltQmCAeoZlMlT6VvItm3C5h0v5QdPB50SI=; b=vcXa9vGFOpmzJ0gqRwRM/wLnGmKbGyGRZFOXZXi5R8Znr5CVVEs9B/t1x2BDVdyBTjwPhSxEUWy69MfKFMawsgNW5ZsqyFy8stqGCfmmMk4LnmuCEwM8ZZ8+60Yigkz6sZS8JtfRAXth8Yk2lri6CuGKUJsgiIZnGim+zx+MZSKg5EpCL8LbIPnVxWw31+3/RhIPwymoT5nldrmQzTOzlhjPvlmYcJn5vREgDL1HFl8AZqhCrMgCAUBABg7eJuuirad7qEggNRl6HIURbFm1w16vwql19aRJdwLC/uipd9syukR9GcsnGgARKFikz106S4if74F+d8P/sozcgDb8XA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mJVzXxwATltQmCAeoZlMlT6VvItm3C5h0v5QdPB50SI=; b=jvlsbOglve1G4rREwLyrP+YKjmlspmsZQ3JnumfbYmWsnOK4ajHdx8RG8t75CywmLkUAyBkOq4YdKtbAGjKTpHrto4Uds5EgsiEUGwUkWEQZ0VzJjqEcjtMcBkmZnicAA7xvPTJ/B7UhUhogjbNAfqP3lApyZqx3b7lm/HfM8ow= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:48 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:48 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 5/6] net/rds: rds_tcp_accept_one ought to not discard messages Date: Wed, 26 Feb 2025 21:26:37 -0700 Message-ID: <20250227042638.82553-6-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P221CA0033.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:33c::25) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b9e4c71-a08d-470d-dcec-08dd56e6f371 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: QuS530iv6/JJPbtslWgrT/7/vgihBSAMiO9jtFvIrNMDF5cGnoOQNSjBqmdQ0+YSmnNkEl27p28f9UP4DDxjipBu18eZnPW/fW6lCReQkLRjWAHPxOIYxmdZvhGcxHkQKK15Lf0EeGfN2EC4Nq85Ha30iagq2H+bEgrVoPbuVuPJilU4Qy21NbcsfaXGD8BIwcUCLxBmrBwn+C32vyjewlBZBzv2xqRdrnOwFJZeG5hcOzJOLzku8hQoem6zCPg94l1lHlAB++CFMCN8D+Hn8qU6XaMwfDEG75x1jOafLDdQfOqhyTvaRLd9/Z8mlXnP3PB3oS1HdeyIl3vX8TrQ30lkqw5VRsJuPOTVHWKHfDUyOA4ZyuR0NA7MunGn/K0pHw6AIUwOy0IFiJQ4IiHxXuVe3T8h/fjGchwlNoYlUzaBQKe1ApCQT/6URZkqf7Cw2VkT/8zBkH2fFDKPjK6BfAJhxvm0Y+drOJLmpn6+/5ubbVBz1Q13hU5y1ulrGjmfM42EIx4hcJBE4dElvWEoqZOzHvV8msFIW8aBc28pu0UtRo9eAxX9fnWCJSKMTaavsUSu91T2DlQTIix/dOnZLM+yw0qdQSiJvIAbfjPiYFBqMXW77RSg05Z9jKE2A7NUQiKj8dfI/n9m4E7/rjubpDDJvGVfL+SvILRihqKMB8xKywpSD5bPJ5iMth6PyrPSVklvq6DTGUogJqxh20ccO8VoscSbfhKpHDWkzK3ZdFj8uUOv9fECh6ZFieJyeZ/XPiwZXcB2hLFpf6NrnQRvfyKWYcJPt/eaZ/4msrnHVvLQlkO48JvzuHPTiFBFZTk2bdjwcEhR7/rwik4P9fnpsn4YrvIntUhEw8zXTguk4dN1OpMpMeOz1nWfJI1NVXZ+Kjr73foeRYT+j1horGPU7zrV5TMZBSOMGe3dFWnupIpsINFgcJjoHRglugfla7afBJsjmds5/goFd91Mor+1ytBPtUTNHEJyTmjpM3PCe3jEasw8h1Y0K9u6PBsndhvuT8m8xWPZ3/gnFL8vqnFPUMhJ6pYUzMSwoFUrHOLnD4V2nW2xW1x2vZcZogK6vlIEN31k1wftJWDZqxRYayWCXdTj8GmV7Lg+cgNl6qubphgtQ/MObHTN7QkjJ96KgEWlE38x0JgzlnJ/42xcSNh7QRGKDnmPPJCRQYtXFq2fWkF+0tOBXJdz2VgKSFXt930zup0FVjimuNCtX2Nd0Kk7WA3oshmrHqsfVA37H7GMnLkwwAZyqR/de3stMfVEVjL9MP1M4joUM/VnUE2fO3vG+MQSyPW2OtQCY0+3f7Ks6zMGksKSEw4xnRnmt0Bq2Wcp2HztwRSewokBuFJy5aQrys7sGiODySADOHmyEEd6RIBl6m5A13Yka3+AzGa3RVr2 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eQVMWlaxfA+gEftoErVVWsAXoFMdZDrVci4LDpOXvfJ7xHae+fgZYIYoKGmO0ipJOqMlacpnf2x/iy/9aVCsjax06zzS9vok9JAm2k7pCSZVFUJbpvIwjL8jDMmTAV/WDchHCMKTDU2LEoWYa7Nu6bGLi3FSl57vqLJ4rp2aMexOhOPAbSx+zEvdESjNL0lxz3N5upulOzDaeRFyIBkLI576rMHXl77Ukw4T6WdwQMZpBOk3dV/gaAN1dnN1tJzGqbswBiiSdiQmvkt6kV//yt0HBeDUWJHuLQBwWSVB9VFVy3NWeMqokJhojuP8hrpsVnRLps/ZFwYEHQ+6MHxKDmpTx5qoGnRT7fh8s3e7lxqxbyF7kJjr3B77RL37Jq08LOG3wnBvAR6Eqc6H0xiTVVm5NMMonfnyrsRLTkKTgPVC7k1kskRFSTSU8liQThyEncwcKcISFiWQxqvsIAkNp0ZmVukXZjp+ExA5cGWNEvEWDLo11X5U29MVWFAKLGUN4MDL90DTXSPn2umqFGHGh5q8F7tFtytu/UUOHNXPstzRsD3yFb22gbSRQ+j/flF8x+PktT5ydsel4BKBf7LUdEb4sOs9S4zFAWUdkJbKob65UZ8YxtcRLjj2ACk6JuHeORg5Ej7/w3LNmyyq6OQka1HDuHWmMwX42btnXZpj+X+9RnB3rt/gIhASkgxXk51WYkB8bwWvqN6O2+p6ev2hfs1yGCyhDvNu/tZzSQLmr6ZFtvcuV43LM5BFeWOsDqrzR9zA6jymTEqLa+0UA31fZkTRS+NtRU5R2atV5Ce1Dndk4RDBOKzUPqXEdO2EVLLWbAwBzsTUTMWheLLUVkOsUTkOSXsKT6xiFLY6NcjsHJJeHG/wFm3WH+w7llqeNLPqQCCIcIkmQyDFyRwfM+9EwTAhoAKx/qAyUeVJ/3Z6op0eXRiY4HBe55v+vEENJoAUiA36agLHwNcTWe2WgMkXc7Eb/H6UFgr/1yUdk0NsjttYidSXV1LXnTrGAZOwWDOFcrwixmXfI171buULb/mjV7XEhABOErI90NT3HSo6Xr/VsNycC8Yv6K+auNx6kD/6CuEmvgQ7B0imU2rpO2DQtycBHgQ6D3DKM1k5JFeFhsKoz8EDJdpDq6R8ixsJ/0ebAvRHI30OzCRHUrEPonnQPWzGA9JL0EZ8AakBDgePh0aSnxE70zhlCH/aVqW7fpv47wL21SCO/PhJj3sYSIWIlrDC6jbertfMCQWOhllt76+HlMa/dtSLQfAYACvb2eZY+regVysQ3ws6HFwOPaH1xYOc45cCbkhqDFv4r25ZEbfvslyzPIfL8Xd7fx2smDxwKlEtMSBNOoeE/qNs22awuTIFHq28lWoWdpfesG9F7Hdw0iPafj8+OAno0PuBM2T4BluZ6IybA6tntvMdQZ27Ho/cztgy6IG9z767g6uiAlYJtZE41C1klVXopz3u1F/HZd8oCHFFCbIkz4Eo9JnwCkNcXQHMlwnrQB3lkfqLVKXxBg4imKH8ZRlgMNtapNF7BzH+aJePNWWNcspeV6tyS2bQM8XEfAtme3nUff1GhPSooxfNkiZliK+ER6Fe91E75db+LWLSlWh6UcMNr2WDSw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: rVYpOaMH1bCFdNkhpYT3qPp3lnKJ5J+TGBVSNpL6h4RMIL9RpjoGaViEmgScNQE1f6fqQhK7ktUOw79kfdfW5bwTSlUv2CmzBeOOYibPxMtmtuhx3PvNXXqaAzGz/Qn1h2NKU1ndNVZOqYcF5LF0tJtnspM1z+eYxhcElqZEALOLQMMdL8LaiGLE8D1FxeTBFTh5hnF1nN3ZeRJNOOCjAwXA6ncyR6Eci4zXAqNGUBdWMcks9527psVND4RQukP1Co6QS+dVNPQQFD5dly8DCoYvMvkAeiYapxhD5Iy7zDXbjCm2hQxRToQJtbqeWwPoyB9kQvn7frEwsa9pB1TgSOxykEEMoQAC+QRdAV6IFiN9+9Cp9w01m9bmF9eak1EdyuZP4RV/WB3cpruWvuLzxaP8lvKiWE52k+K8MZFC2VF4LuYA82bsizb+6EK6iWXRnWhqvBPPUyIa8y22ya6jpLyPeZbvyJaozD2r9oi9cVHX0GaWJaYAjVz8mHZc643rj3vPHSYR6goaFm/KpGS/8HlMP5YTJEvDKdKuCzbjAWbNZ9c8Z9PxELK7Y3ES8i314fhLDcnpkuAo8BCFNBDK2t7eAjZDveieoP5E8dxbicU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b9e4c71-a08d-470d-dcec-08dd56e6f371 X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:48.5594 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hF1rXl5UWOGVUd6WS+WjpJkHsLL6GBC2WVGxjJFS3RQ2ssOj2BzhEdcwX1gfy4FuhGLqm0nOkBUU9Zw5jr/TK5GlEShFZoqxv4sgFhOogfA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 suspectscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-GUID: s-znaGNyUJM_n4aO4flUBJvXY0_wJ4ye X-Proofpoint-ORIG-GUID: s-znaGNyUJM_n4aO4flUBJvXY0_wJ4ye X-Patchwork-Delegate: kuba@kernel.org From: Gerd Rausch RDS/TCP differs from RDS/RDMA in that message acknowledgment is done based on TCP sequence numbers: As soon as the last byte of a message has been acknowledged by the TCP stack of a peer, "rds_tcp_write_space()" goes on to discard prior messages from the send queue. Which is fine, for as long as the receiver never throws any messages away. Unfortunately, that is *not* the case since the introduction of MPRDS: commit "RDS: TCP: Enable multipath RDS for TCP" A new function "rds_tcp_accept_one_path" was introduced, which is entitled to return "NULL", if no connection path is currently available. Unfortunately, this happens after the "->accept()" call, and the new socket often already contains messages, since the peer already transitioned to "RDS_CONN_UP" on behalf of "TCP_ESTABLISHED". That's also the case after this [1]: commit "RDS: TCP: Force every connection to be initiated by numerically smaller IP address" which tried to address the situation of pending data by only transitioning connections from a smaller IP address to "RDS_CONN_UP". But even in those cases, and in particular if the "RDS_EXTHDR_NPATHS" handshake has not occurred yet, and therefore we're working with "c_npaths <= 1", "c_conn[0]" may be in a state distinct from "RDS_CONN_DOWN", and therefore all messages on the just accepted socket will be tossed away. This fix changes "rds_tcp_accept_one": * If connected from a peer with a larger IP address, the new socket will continue to get closed right away. With commit [1] above, there should not be any messages in the socket receive buffer, since the peer never transitioned to "RDS_CONN_UP". Therefore it should be okay to not make any efforts to dispatch the socket receive buffer. * If connected from a peer with a smaller IP address, we call "rds_tcp_accept_one_path" to find a free slot/"path". If found, business goes on as usual. If none was found, we save/stash the newly accepted socket into "rds_tcp_accepted_sock", in order to not lose any messages that may have arrived already. We then return from "rds_tcp_accept_one" with "-ENOBUFS". Later on, when a slot/"path" does become available again (e.g. state transitioned to "RDS_CONN_DOWN", or HS extension header was received with "c_npaths > 1") we call "rds_tcp_conn_slots_available" that simply re-issues a "rds_tcp_accept_one_path" worker-callback and picks up the new socket from "rds_tcp_accepted_sock", and thereby continuing where it left with "-ENOBUFS" last time. Since a new slot has become available, those messages won't be lost, since processing proceeds as if that slot had been available the first time around. Signed-off-by: Gerd Rausch Signed-off-by: Jack Vogel Signed-off-by: Allison Henderson --- net/rds/rds.h | 1 + net/rds/recv.c | 4 ++ net/rds/tcp.c | 27 +++----- net/rds/tcp.h | 22 +++++- net/rds/tcp_listen.c | 160 ++++++++++++++++++++++++++++++------------- 5 files changed, 148 insertions(+), 66 deletions(-) diff --git a/net/rds/rds.h b/net/rds/rds.h index 85b47ce52266..422d5e26410e 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -548,6 +548,7 @@ struct rds_transport { __u32 scope_id); int (*conn_alloc)(struct rds_connection *conn, gfp_t gfp); void (*conn_free)(void *data); + void (*conn_slots_available)(struct rds_connection *conn); int (*conn_path_connect)(struct rds_conn_path *cp); void (*conn_path_shutdown)(struct rds_conn_path *conn); void (*xmit_path_prepare)(struct rds_conn_path *cp); diff --git a/net/rds/recv.c b/net/rds/recv.c index 5627f80013f8..c0a89af29d1b 100644 --- a/net/rds/recv.c +++ b/net/rds/recv.c @@ -230,6 +230,10 @@ static void rds_recv_hs_exthdrs(struct rds_header *hdr, conn->c_npaths = max_t(int, conn->c_npaths, 1); conn->c_ping_triggered = 0; rds_conn_peer_gen_update(conn, new_peer_gen_num); + + if (conn->c_npaths > 1 && + conn->c_trans->conn_slots_available) + conn->c_trans->conn_slots_available(conn); } /* rds_start_mprds() will synchronously start multiple paths when appropriate. diff --git a/net/rds/tcp.c b/net/rds/tcp.c index b3f2c6e27b59..915b35136693 100644 --- a/net/rds/tcp.c +++ b/net/rds/tcp.c @@ -221,6 +221,8 @@ void rds_tcp_set_callbacks(struct socket *sock, struct rds_conn_path *cp) sock->sk->sk_data_ready = sock->sk->sk_user_data; tc->t_sock = sock; + if (!tc->t_rtn) + tc->t_rtn = net_generic(sock_net(sock->sk), rds_tcp_netid); tc->t_cpath = cp; tc->t_orig_data_ready = sock->sk->sk_data_ready; tc->t_orig_write_space = sock->sk->sk_write_space; @@ -386,6 +388,7 @@ static int rds_tcp_conn_alloc(struct rds_connection *conn, gfp_t gfp) } mutex_init(&tc->t_conn_path_lock); tc->t_sock = NULL; + tc->t_rtn = NULL; tc->t_tinc = NULL; tc->t_tinc_hdr_rem = sizeof(struct rds_header); tc->t_tinc_data_rem = 0; @@ -466,6 +469,7 @@ struct rds_transport rds_tcp_transport = { .recv_path = rds_tcp_recv_path, .conn_alloc = rds_tcp_conn_alloc, .conn_free = rds_tcp_conn_free, + .conn_slots_available = rds_tcp_conn_slots_available, .conn_path_connect = rds_tcp_conn_path_connect, .conn_path_shutdown = rds_tcp_conn_path_shutdown, .inc_copy_to_user = rds_tcp_inc_copy_to_user, @@ -481,17 +485,7 @@ struct rds_transport rds_tcp_transport = { .t_unloading = rds_tcp_is_unloading, }; -static unsigned int rds_tcp_netid; - -/* per-network namespace private data for this module */ -struct rds_tcp_net { - struct socket *rds_tcp_listen_sock; - struct work_struct rds_tcp_accept_w; - struct ctl_table_header *rds_tcp_sysctl; - struct ctl_table *ctl_table; - int sndbuf_size; - int rcvbuf_size; -}; +int rds_tcp_netid; /* All module specific customizations to the RDS-TCP socket should be done in * rds_tcp_tune() and applied after socket creation. @@ -538,15 +532,12 @@ static void rds_tcp_accept_worker(struct work_struct *work) struct rds_tcp_net, rds_tcp_accept_w); - while (rds_tcp_accept_one(rtn->rds_tcp_listen_sock) == 0) + while (rds_tcp_accept_one(rtn) == 0) cond_resched(); } -void rds_tcp_accept_work(struct sock *sk) +void rds_tcp_accept_work(struct rds_tcp_net *rtn) { - struct net *net = sock_net(sk); - struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid); - queue_work(rds_wq, &rtn->rds_tcp_accept_w); } @@ -558,6 +549,8 @@ static __net_init int rds_tcp_init_net(struct net *net) memset(rtn, 0, sizeof(*rtn)); + mutex_init(&rtn->rds_tcp_accept_lock); + /* {snd, rcv}buf_size default to 0, which implies we let the * stack pick the value, and permit auto-tuning of buffer size. */ @@ -621,6 +614,8 @@ static void rds_tcp_kill_sock(struct net *net) rtn->rds_tcp_listen_sock = NULL; rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w); + if (rtn->rds_tcp_accepted_sock) + sock_release(rtn->rds_tcp_accepted_sock); spin_lock_irq(&rds_tcp_conn_lock); list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) { struct net *c_net = read_pnet(&tc->t_cpath->cp_conn->c_net); diff --git a/net/rds/tcp.h b/net/rds/tcp.h index 053aa7da87ef..2000f4acd57a 100644 --- a/net/rds/tcp.h +++ b/net/rds/tcp.h @@ -4,6 +4,21 @@ #define RDS_TCP_PORT 16385 +/* per-network namespace private data for this module */ +struct rds_tcp_net { + /* serialize "rds_tcp_accept_one" with "rds_tcp_accept_lock" + * to protect "rds_tcp_accepted_sock" + */ + struct mutex rds_tcp_accept_lock; + struct socket *rds_tcp_listen_sock; + struct socket *rds_tcp_accepted_sock; + struct work_struct rds_tcp_accept_w; + struct ctl_table_header *rds_tcp_sysctl; + struct ctl_table *ctl_table; + int sndbuf_size; + int rcvbuf_size; +}; + struct rds_tcp_incoming { struct rds_incoming ti_inc; struct sk_buff_head ti_skb_list; @@ -19,6 +34,7 @@ struct rds_tcp_connection { */ struct mutex t_conn_path_lock; struct socket *t_sock; + struct rds_tcp_net *t_rtn; void *t_orig_write_space; void *t_orig_data_ready; void *t_orig_state_change; @@ -49,6 +65,7 @@ struct rds_tcp_statistics { }; /* tcp.c */ +extern int rds_tcp_netid; bool rds_tcp_tune(struct socket *sock); void rds_tcp_set_callbacks(struct socket *sock, struct rds_conn_path *cp); void rds_tcp_reset_callbacks(struct socket *sock, struct rds_conn_path *cp); @@ -57,7 +74,7 @@ void rds_tcp_restore_callbacks(struct socket *sock, u32 rds_tcp_write_seq(struct rds_tcp_connection *tc); u32 rds_tcp_snd_una(struct rds_tcp_connection *tc); extern struct rds_transport rds_tcp_transport; -void rds_tcp_accept_work(struct sock *sk); +void rds_tcp_accept_work(struct rds_tcp_net *rtn); int rds_tcp_laddr_check(struct net *net, const struct in6_addr *addr, __u32 scope_id); /* tcp_connect.c */ @@ -69,7 +86,8 @@ void rds_tcp_state_change(struct sock *sk); struct socket *rds_tcp_listen_init(struct net *net, bool isv6); void rds_tcp_listen_stop(struct socket *sock, struct work_struct *acceptor); void rds_tcp_listen_data_ready(struct sock *sk); -int rds_tcp_accept_one(struct socket *sock); +void rds_tcp_conn_slots_available(struct rds_connection *conn); +int rds_tcp_accept_one(struct rds_tcp_net *rtn); void rds_tcp_keepalive(struct socket *sock); void *rds_tcp_listen_sock_def_readable(struct net *net); diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index 886b5373843e..e44384f0adf7 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -35,6 +35,8 @@ #include #include #include +#include +#include #include "rds.h" #include "tcp.h" @@ -66,32 +68,47 @@ struct rds_tcp_connection *rds_tcp_accept_one_path(struct rds_connection *conn) int i; int npaths = max_t(int, 1, conn->c_npaths); - /* for mprds, all paths MUST be initiated by the peer - * with the smaller address. - */ - if (rds_addr_cmp(&conn->c_faddr, &conn->c_laddr) >= 0) { - /* Make sure we initiate at least one path if this - * has not already been done; rds_start_mprds() will - * take care of additional paths, if necessary. - */ - if (npaths == 1) - rds_conn_path_connect_if_down(&conn->c_path[0]); - return NULL; - } - for (i = 0; i < npaths; i++) { struct rds_conn_path *cp = &conn->c_path[i]; if (rds_conn_path_transition(cp, RDS_CONN_DOWN, - RDS_CONN_CONNECTING)) { + RDS_CONN_CONNECTING)) return cp->cp_transport_data; - } } return NULL; } -int rds_tcp_accept_one(struct socket *sock) +void rds_tcp_conn_slots_available(struct rds_connection *conn) +{ + struct rds_tcp_connection *tc; + struct rds_tcp_net *rtn; + + smp_rmb(); + if (test_bit(RDS_DESTROY_PENDING, &conn->c_path->cp_flags)) + return; + + tc = conn->c_path->cp_transport_data; + rtn = tc->t_rtn; + if (!rtn) + return; + + /* As soon as a connection went down, + * it is safe to schedule a "rds_tcp_accept_one" + * attempt even if there are no connections pending: + * Function "rds_tcp_accept_one" won't block + * but simply return -EAGAIN in that case. + * + * Doing so is necessary to address the case where an + * incoming connection on "rds_tcp_listen_sock" is ready + * to be acccepted prior to a free slot being available: + * the -ENOBUFS case in "rds_tcp_accept_one". + */ + rds_tcp_accept_work(rtn); +} + +int rds_tcp_accept_one(struct rds_tcp_net *rtn) { + struct socket *listen_sock = rtn->rds_tcp_listen_sock; struct socket *new_sock = NULL; struct rds_connection *conn; int ret; @@ -109,37 +126,45 @@ int rds_tcp_accept_one(struct socket *sock) #endif int dev_if = 0; - if (!sock) /* module unload or netns delete in progress */ - return -ENETUNREACH; + mutex_lock(&rtn->rds_tcp_accept_lock); - ret = sock_create_lite(sock->sk->sk_family, - sock->sk->sk_type, sock->sk->sk_protocol, - &new_sock); - if (ret) - goto out; + if (!listen_sock) + return -ENETUNREACH; - ret = sock->ops->accept(sock, new_sock, &arg); - if (ret < 0) - goto out; + new_sock = rtn->rds_tcp_accepted_sock; + rtn->rds_tcp_accepted_sock = NULL; + + if (!new_sock) { + ret = sock_create_lite(listen_sock->sk->sk_family, + listen_sock->sk->sk_type, + listen_sock->sk->sk_protocol, + &new_sock); + if (ret) + goto out; + + ret = listen_sock->ops->accept(listen_sock, new_sock, &arg); + if (ret < 0) + goto out; + + /* sock_create_lite() does not get a hold on the owner module so we + * need to do it here. Note that sock_release() uses sock->ops to + * determine if it needs to decrement the reference count. So set + * sock->ops after calling accept() in case that fails. And there's + * no need to do try_module_get() as the listener should have a hold + * already. + */ + new_sock->ops = listen_sock->ops; + __module_get(new_sock->ops->owner); - /* sock_create_lite() does not get a hold on the owner module so we - * need to do it here. Note that sock_release() uses sock->ops to - * determine if it needs to decrement the reference count. So set - * sock->ops after calling accept() in case that fails. And there's - * no need to do try_module_get() as the listener should have a hold - * already. - */ - new_sock->ops = sock->ops; - __module_get(new_sock->ops->owner); + rds_tcp_keepalive(new_sock); + if (!rds_tcp_tune(new_sock)) { + ret = -EINVAL; + goto out; + } - rds_tcp_keepalive(new_sock); - if (!rds_tcp_tune(new_sock)) { - ret = -EINVAL; - goto out; + inet = inet_sk(new_sock->sk); } - inet = inet_sk(new_sock->sk); - #if IS_ENABLED(CONFIG_IPV6) my_addr = &new_sock->sk->sk_v6_rcv_saddr; peer_addr = &new_sock->sk->sk_v6_daddr; @@ -150,7 +175,7 @@ int rds_tcp_accept_one(struct socket *sock) peer_addr = &daddr; #endif rdsdebug("accepted family %d tcp %pI6c:%u -> %pI6c:%u\n", - sock->sk->sk_family, + listen_sock->sk->sk_family, my_addr, ntohs(inet->inet_sport), peer_addr, ntohs(inet->inet_dport)); @@ -170,13 +195,13 @@ int rds_tcp_accept_one(struct socket *sock) } #endif - if (!rds_tcp_laddr_check(sock_net(sock->sk), peer_addr, dev_if)) { + if (!rds_tcp_laddr_check(sock_net(listen_sock->sk), peer_addr, dev_if)) { /* local address connection is only allowed via loopback */ ret = -EOPNOTSUPP; goto out; } - conn = rds_conn_create(sock_net(sock->sk), + conn = rds_conn_create(sock_net(listen_sock->sk), my_addr, peer_addr, &rds_tcp_transport, 0, GFP_KERNEL, dev_if); @@ -189,15 +214,51 @@ int rds_tcp_accept_one(struct socket *sock) * If the client reboots, this conn will need to be cleaned up. * rds_tcp_state_change() will do that cleanup */ - rs_tcp = rds_tcp_accept_one_path(conn); - if (!rs_tcp) + if (rds_addr_cmp(&conn->c_faddr, &conn->c_laddr) < 0) { + /* Try to obtain a free connection slot. + * If unsuccessful, we need to preserve "new_sock" + * that we just accepted, since its "sk_receive_queue" + * may contain messages already that have been acknowledged + * to and discarded by the sender. + * We must not throw those away! + */ + rs_tcp = rds_tcp_accept_one_path(conn); + if (!rs_tcp) { + /* It's okay to stash "new_sock", since + * "rds_tcp_conn_slots_available" triggers "rds_tcp_accept_one" + * again as soon as one of the connection slots + * becomes available again + */ + rtn->rds_tcp_accepted_sock = new_sock; + new_sock = NULL; + ret = -ENOBUFS; + goto out; + } + } else { + /* This connection request came from a peer with + * a larger address. + * Function "rds_tcp_state_change" makes sure + * that the connection doesn't transition + * to state "RDS_CONN_UP", and therefore + * we should not have received any messages + * on this socket yet. + * This is the only case where it's okay to + * not dequeue messages from "sk_receive_queue". + */ + if (conn->c_npaths <= 1) + rds_conn_path_connect_if_down(&conn->c_path[0]); + rs_tcp = NULL; goto rst_nsk; + } + mutex_lock(&rs_tcp->t_conn_path_lock); cp = rs_tcp->t_cpath; conn_state = rds_conn_path_state(cp); WARN_ON(conn_state == RDS_CONN_UP); - if (conn_state != RDS_CONN_CONNECTING && conn_state != RDS_CONN_ERROR) + if (conn_state != RDS_CONN_CONNECTING && conn_state != RDS_CONN_ERROR) { + rds_conn_path_drop(cp, 0); goto rst_nsk; + } if (rs_tcp->t_sock) { /* Duelling SYN has been handled in rds_tcp_accept_one() */ rds_tcp_reset_callbacks(new_sock, cp); @@ -228,6 +289,9 @@ int rds_tcp_accept_one(struct socket *sock) mutex_unlock(&rs_tcp->t_conn_path_lock); if (new_sock) sock_release(new_sock); + + mutex_unlock(&rtn->rds_tcp_accept_lock); + return ret; } @@ -255,7 +319,7 @@ void rds_tcp_listen_data_ready(struct sock *sk) * the listen socket is being torn down. */ if (sk->sk_state == TCP_LISTEN) - rds_tcp_accept_work(sk); + rds_tcp_accept_work(net_generic(sock_net(sk), rds_tcp_netid)); else ready = rds_tcp_listen_sock_def_readable(sock_net(sk)); From patchwork Thu Feb 27 04:26:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 13993725 X-Patchwork-Delegate: kuba@kernel.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (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 2A2781EFF97 for ; Thu, 27 Feb 2025 04:26:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630416; cv=fail; b=kalweMkQcQcOBKnAtuHQWUfAsgX9s+wHob8pg0t69ynEtU+I8AaEH3GyVHBaGINzqnCkB/cSpAxHqGcBQWz2tJC+1fUvHk434hIsXHzMCSQ2foWNU4i0CTN+OgdahgyKi9X6GtAJ/osZTmaabNXeAeh2QeVWzwSATkrFtQi41Gw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740630416; c=relaxed/simple; bh=NcoyylodknXRfht0kclkgDd5cMMdgYGe5Y7O5RXf2uE=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SmVN8vX4xJ8zSD/FFQX+raqEyKexVQe5Ee5T4gcsA1zij6Ftmigd6eAu/DEqboweNMj8tcjN79OHTz1Qdw6QonwglTdolYyZ+RE1GTehhCfcAgLC9tMe3QSTvypF3FRy1LiMA66XX2YCwrXLRvbZDTNQR6TLLAiiA+/OVAoQ+H8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Lrn4Fzgy; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=c9yhzi77; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Lrn4Fzgy"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="c9yhzi77" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R1fgfx022987 for ; Thu, 27 Feb 2025 04:26:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=8Zm+lMhzv3aygbSKx91VFZdTFDg35d6F/N0EnHQfIMI=; b= Lrn4Fzgyqejnt7YJh3azp0/L8WE8uPJwXuCPUq02qjchJc2acPfclJXp+S0943gE 19BAsLXApwfpPAgtPvREkb3GadRAuH+6COifG+qRkf5idcPw3mQjfd1hjWxr+v9w pi69RfFcWthnXbpYoammdZ+TARM5oeJda5e6BRFOqgQLtJjAYRQfJ2N0hAJJxDvf L6FaiiHbWjLWZUz8CJB7SJSONFdYJm9S9d8EZXqTDTs/4xUymzuf0Mt+xvL+Cp5h 3APj8mQ6W2TQ0MZPuSo5tqtASvkAg3D4sXpN22VZtio9fOA5HALZokF79bgD+DME pWA7ordE9eyPOBpH6Z3ISw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 451psf2hky-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:54 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51R2n7JW024337 for ; Thu, 27 Feb 2025 04:26:52 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2172.outbound.protection.outlook.com [104.47.56.172]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44y51bneb7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 27 Feb 2025 04:26:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q6+JjWiuY1Mk7dDtLsQGGUACH2YuFhUHiJ2ZJZovAZg9kDfdBk/d66mEK9a4RtjN6gpeA/Bm5Grms2lZ7KRKRZpvHVb8N38WEN6VBHJ43/lQxPW4ORmLVECwE3cki34xav9FglhIvWRHpStTPhaL2AvySy9WdGPGQiVQ+p0XxSuNYq5jf2YK5894tcukCXXmSRugjvh+uDKiHJ71x149WoShTKdDFGirImITh5y7eCtSuE9AtGr5Ie11GfSWlFWXIzl318rieiXseUHvMCQYrpLGu6Zk0XsYNVnA9/RWjtl0hMWVw7isMgJgjnKCs4vLop9zLqHn8gMzu9KuKo970w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=8Zm+lMhzv3aygbSKx91VFZdTFDg35d6F/N0EnHQfIMI=; b=gOVvkcE153ExK4iAGn8V3mnnbk3QiQCRqVx3q3hdDPxLwl3QcL/5K7pQnPiciv/JWkY50Jg06pewX1bxg82+Z4UbVVCovwNU3fJ8+iXm3NrqwBpPJ0vDCNFoT02ApZvfjWciSIqXqMpE4j/dexjafd7M8rjvwWcuppOhhvtyprWqdQsWL9ubJ2LMCsMGl0ESSYdGx3pAccoXeo4xaqhsyGNfkaXloCFMXg5/rm3yb4U6lPJM+ZSFFnbGZwJ7u8QJHSeht6Bpcda9npZVIvn7Udrsq4KsWkyWfCcFuWy2GRLjWCxdHohFMS36hRtMpK+90HhfGm/foQnxN8yokK2ozQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8Zm+lMhzv3aygbSKx91VFZdTFDg35d6F/N0EnHQfIMI=; b=c9yhzi77x+1GZLKZCQSaC7zdTBvU5Vx3mwXIBGY4D+gRcjlMxtsn03a/jgpg/eAiQ/cvEzXag7PiV4i51vYv+fRYUQIG93b6jfX+4DbzSrK8zxS+J2NkEDb6W29l7SUoTzk5spg6kDYUqEI61/Ix+bh2sgwujz3g4J5P/yyAsuc= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by SA1PR10MB7587.namprd10.prod.outlook.com (2603:10b6:806:376::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Thu, 27 Feb 2025 04:26:50 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::b78:9645:2435:cf1b%7]) with mapi id 15.20.8489.019; Thu, 27 Feb 2025 04:26:50 +0000 From: allison.henderson@oracle.com To: netdev@vger.kernel.org Subject: [PATCH 6/6] net/rds: Encode cp_index in TCP source port Date: Wed, 26 Feb 2025 21:26:38 -0700 Message-ID: <20250227042638.82553-7-allison.henderson@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250227042638.82553-1-allison.henderson@oracle.com> References: <20250227042638.82553-1-allison.henderson@oracle.com> X-ClientProxiedBy: PH7P220CA0135.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::35) To BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4306:EE_|SA1PR10MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: 77667438-62c3-48ce-1a54-08dd56e6f49c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: VWsIIr/Qmk5ryC+IKa/Q+h/PPKkkVjuTCegtZJRU3mdmbbulvspf30EGaVlSgpOfSmEaIrnR+sXWWnpqM1Sk8QqIlVVEjzZu8FZLYCFblruFw2SYGrmYoOMRPCByOtW59nU/9lJf0shF57stxGvlHpMULx6S2+Gn6H0j82Dgljky0SqNhc8D7UFRFkqno2ackxkWbyGsfb4//7jS5DF3zwpdkGy1rVmCwQnCY8UYGhkORT/iaD7SkmFMYOh+ll4zOHK0qgmpquduBMPWaFV/tS8K5hN8/u6TMisoh0aHzqC+py+c3XDd5W+WaoCheDuMzdHWRQotc5IYTDKYuZySE96akTSBX/jq1l/lbT5GvVVq89wxjUvjNBFsTR0wfgMd6hXDfSb7tUCOx/o+C53Z1MMt3Zess52HxCcRCOp5MxvF6CfdFkrZZeiwJfMfsfmMqjMpZAP+EiP8o0hohaXZ6erZli1xy2hLmQ5lxEOIUfx7xC+XncH6kLlI1WHdsz4MOz0GJfFIw5/+MCjJB+YSjMt73Yf5s3q8zFeMcnW2K0B0SO9j77gzrY5FAlUbDBhfuEkz/njR2KnnPZG5hoG3EgwzAhRw60gNlmnt1Gn0T/5SIwsdBdU2KdRsYpnZ0MwQy+nKzYzidsuX1kFh8wZ+p0KcfCdUh5uV5Rl2ExIbUHQ6o21rZQ9XwADo/GwzVGETaTI6EMCLOEQ13IiGkrVzrNtdYfyWtcTa2+/KZv39+UvGYlYgDB+NE2xlS3I51wedELPDMKjnJrtUyUE1l5WlgF3c/j9m8+ThkZ+C2M5NHJ1+n2HKTrmXfbrSP2bNAQNAz2oHpWuUPv66c+fEeYLqEyHy4iI+fczWdAkDjmcbQhnMakCiI23ELZMBX6iT4VpPhieKdZ5w9shu5qtUNpHy2UOXTAlar+Xcm9Ciw6JsTXAdwIlTEyF/UnyNfUVFyft8YqXBB/ZWabt0PXwG4SLsXhM0Uf5cHKCpT/tChDFCeo11ZWHlMGs9ghJGr6yt6ko2tVsTY08t+BRKMRHGP4y/Jg9rLba0oVc9QCFpnBJrmLDgvhVNC2Ot+IY+JSW9Csp1aIJ72Oely1PioJFROcGCU82upg09F4aOMsroCrHh/j19hxqmjvgnUwppIW9M843j2GeNnxs5miDJVvQxHjBxykncQjACCa2RsA8dzJt5wksMwy41O6EtA2gqo9vq07HJ74LeNjkQBV9Fz0SoLHMp94L8Ii3awbW0O37wADiYMoAcvBQrTxlLvVWooLcjhiisqiSNWSpAfDZTlDRzftrd3x1S0LKEF2B9XI39/oj8pa2Q59OcnNf2agZlNR9N2KcR05G7B/T8ZdYjb2i+YuBK3OFa6nmHRb2jfHIBG/hZNf5ushmfVVTiC8unEdTMEsDH X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Z6x0g9tkWQEgNrEUjIkOJgVRkn8oR3rA5QAUE+i/2R2gk9X2QC4znY3+2mtXW137jYBVKW/KUt89i5V02x/ZXZhnXqmcU7sLa5/4OaZd+kxtM0sT4ZdOrCxG+QhT+lFFEKU1eV1e65Fg27ct9E3sITfQ1mvy4W9vI0dHDYqFzf5K2He9oKTs582Yg1/5kMpvbleFQKwUv9qdiDY2vNtru9Rqf/x4q5QOSJsG/fXJpqCM3ycLA4jtZZ9KeYfufFlqb8c1gEteDh67ID6zV87AJjfCq6TtG1xCQFEounyrfRqSNDKquyLddAQ9TdR4PTUZfGa+Hi1mmy8NNfWgt+VBZx5DVSJ+T4jKf1Ph/03UengOEeLpTgw9SrS68MamGkg4xS+MSS1KIspTl+BrSl4NySOpPNW4qCZynGtJJ9U8w+DTrQXOYIkbdTizyGUT3Fs3zNJEVpH6aKyaX3i2LD7nA+ZGuNTPaO6pbAXbCgmJQMs5pMhXA9pkHnaWphZ+O83loIdXm9A/v1OaKRpsJeztHUZ89dn1N7tsiFB2oyQ7erRQTYvFo8TUsJ6n55n5/uxfi3Nv4RJ5QBAAlaD1+QV0LCR2OeHY9emsfoVZe2IuD/U7Fg0fXz3f+ZIRyyNydOMaA436VwWl+rcj/nLTlDFJ0QVTpm3BogC6Q+0uEULVzV+uMWWc0dvbHJV6PfB56KKYwTvJmUti8+lTNVnY2qvZXCpop3YVX/BcuVksfjd0RZapI5w/FbOtf2UucfVg24J08GTZL6ZpQQUyMbm0CCXfqZG1tYUxTd3k8C/3qrq/eS3cXk6i2awSnAy8UE4Qp43lm8izrsuIOmNzPJAZIvQMuTv3MseKoY6a8PsCvHDsp6/ufL6ue579WfkW1TLQoFlpNfTVhJpJFZfV56impCAMVT74FHmt8cQYORmH35mqj5dvpJsYzdnW+WFatRIoKS+vWTqHlMewd6A7Msdysn8s10KMBgBw3/1h12dpUKLBIkxN6cy0i51ssbf/nF3i44XWQXRi8IuGW2CJidRqDswaOtaKSfq2tYPeQJrAofUxEYrE3W1EznTKXjZqw8YciobPHQXlD21rxctGUpPE8LECmygAbkbPMs6J/v6YIVvzKGQcr/FMlPqIGNczghgdfs/3+09noM/WrnkuBa32UqEsvMc05hl5iy5ZFJKHsMLMClSAH2ok/mvCQTOuzQ4fKHpiPH/XVjMG+O8wx90+HGQpV4FHCRgPocASkhVw6rWvizXc5dm0hi2EoPIR/JSRPKbRpY9lcsWtnHL04qcAt8V4IbW6c3z230yZKF7WsctA1t9f3VtuX1aUBszlK0roruPhBK7DB0ZNotypDekz4hsEOLsu2SD3DRx9JlsaHO6aN83MAuwBhAe9N1kpRBywwkHcTEpM1/LnS3fqnBmSwOA/bvvEBCIwlVcBep0Q3CtN2XOSwVVpNZxB7OnJdmDiL8VzD4NonWvEG0g9UtgtDSf+qxMevOiTUasqWcA4XrKDxeSAkrxrKdUDSiYuE90nKjMkKKFrF8xIn1lK4g4gpn00t19S7EQcpEUC9dQYMB3B/n4xgM2/A2HrQci5lmCx3XAgEDEbM2vEULvlKQKx0fxsng== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: aqZeAjx2s4632bPeKMGIVxw/+uYUXhPKrZ0dZLajwvHztJlou7/64bovfkzyvK5ho1GcO+nbD6sJ7vG+GYpX9R0XhYZPVQtFrgJarvk718ObcTZMrOzKKNVNLnb75NAg1lIqQSIY55iwv/8Ld/lxGOaOM5u+wDOUQT9w4LS2jyaoujcSIm7zhbvdpjZn0Nk9/y1zBc88YECaiQG+W1v66MAHgSRf4WGrAs/7oukMXlmP3m9wCvkBxtWY+mGo7880UMpN2CUmiaNO1NUcTXs6phMJFt4b4p52n2g6IIhjkq3hYcJewAvGt5uGp/38cSBeK0W2sfpj0z8ChSVg4ph1J8C7pDVrxEKQrMvJZiv0Cj+FIKa1hPcm8fSgox8jXHNq5vUpkyN6PW+zRpjBeg/leenKXb4BJJg0SOR0US2HVIz9KQ/M6s4cvKs2HoOR1onweQlyurhX/B/HyyTrSARhGvmy2yHV+zuIcj4OEBjL5a6F/jVP/vezFR4VDGGXHxeE90Nb3d49WRqKcFQLnpDLw64OoLFalNqNnrmylfQJJGMCy/bM1odMaAZ70FTT39xoLYd3qI4RFvpq5Q+MwNbjTINXrbSnhD9OCp3e4OfNV3Y= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77667438-62c3-48ce-1a54-08dd56e6f49c X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2025 04:26:50.4165 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U9YaYTnSGwGUV4lAXrZs5HYDVJgVvlGMlQvdEtnNGai5JA+1pn6jb9aPNvvNirgk1YYwfixarh/fHOAw3v/3uKVTu3mwNZQimMRGv7hHd4I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7587 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_02,2025-02-26_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2502270031 X-Proofpoint-ORIG-GUID: rHFPl1Fq1yQkwaud9XjfpzK5nXsfLhPW X-Proofpoint-GUID: rHFPl1Fq1yQkwaud9XjfpzK5nXsfLhPW X-Patchwork-Delegate: kuba@kernel.org From: Gerd Rausch Upon "sendmsg", RDS/TCP selects a backend connection based on a hash calculated from the source-port ("RDS_MPATH_HASH"). However, "rds_tcp_accept_one" accepts connections in the order they arrive, which is non-deterministic. Therefore the mapping of the sender's "cp->cp_index" to that of the receiver changes if the backend connections are dropped and reconnected. However, connection state that's preserved across reconnects (e.g. "cp_next_rx_seq") relies on that sender<->receiver mapping to never change. So we make sure that client and server of the TCP connection have the exact same "cp->cp_index" across reconnects by encoding "cp->cp_index" in the lower three bits of the client's TCP source port. A new extension "RDS_EXTHDR_SPORT_IDX" is introduced, that allows the server to tell the difference between clients that do the "cp->cp_index" encoding, and legacy clients that pick source ports randomly. Signed-off-by: Gerd Rausch Signed-off-by: Allison Henderson --- net/rds/message.c | 1 + net/rds/rds.h | 3 +++ net/rds/recv.c | 7 +++++++ net/rds/send.c | 5 +++++ net/rds/tcp.h | 1 + net/rds/tcp_connect.c | 22 ++++++++++++++++++++- net/rds/tcp_listen.c | 45 +++++++++++++++++++++++++++++++++++++------ 7 files changed, 77 insertions(+), 7 deletions(-) diff --git a/net/rds/message.c b/net/rds/message.c index 7af59d2443e5..31990ac4f3ef 100644 --- a/net/rds/message.c +++ b/net/rds/message.c @@ -46,6 +46,7 @@ static unsigned int rds_exthdr_size[__RDS_EXTHDR_MAX] = { [RDS_EXTHDR_RDMA_DEST] = sizeof(struct rds_ext_header_rdma_dest), [RDS_EXTHDR_NPATHS] = sizeof(u16), [RDS_EXTHDR_GEN_NUM] = sizeof(u32), +[RDS_EXTHDR_SPORT_IDX] = 1, }; void rds_message_addref(struct rds_message *rm) diff --git a/net/rds/rds.h b/net/rds/rds.h index 422d5e26410e..1df58011e796 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -150,6 +150,7 @@ struct rds_connection { c_ping_triggered:1, c_pad_to_32:29; int c_npaths; + bool c_with_sport_idx; struct rds_connection *c_passive; struct rds_transport *c_trans; @@ -266,8 +267,10 @@ struct rds_ext_header_rdma_dest { */ #define RDS_EXTHDR_NPATHS 5 #define RDS_EXTHDR_GEN_NUM 6 +#define RDS_EXTHDR_SPORT_IDX 8 #define __RDS_EXTHDR_MAX 16 /* for now */ + #define RDS_RX_MAX_TRACES (RDS_MSG_RX_DGRAM_TRACE_MAX + 1) #define RDS_MSG_RX_HDR 0 #define RDS_MSG_RX_START 1 diff --git a/net/rds/recv.c b/net/rds/recv.c index c0a89af29d1b..f33b4904073d 100644 --- a/net/rds/recv.c +++ b/net/rds/recv.c @@ -204,7 +204,9 @@ static void rds_recv_hs_exthdrs(struct rds_header *hdr, struct rds_ext_header_version version; u16 rds_npaths; u32 rds_gen_num; + u8 dummy; } buffer; + bool new_with_sport_idx = false; u32 new_peer_gen_num = 0; while (1) { @@ -221,11 +223,16 @@ static void rds_recv_hs_exthdrs(struct rds_header *hdr, case RDS_EXTHDR_GEN_NUM: new_peer_gen_num = be32_to_cpu(buffer.rds_gen_num); break; + case RDS_EXTHDR_SPORT_IDX: + new_with_sport_idx = true; + break; default: pr_warn_ratelimited("ignoring unknown exthdr type " "0x%x\n", type); } } + + conn->c_with_sport_idx = new_with_sport_idx; /* if RDS_EXTHDR_NPATHS was not found, default to a single-path */ conn->c_npaths = max_t(int, conn->c_npaths, 1); conn->c_ping_triggered = 0; diff --git a/net/rds/send.c b/net/rds/send.c index 85ab9e32105e..4a08b9774420 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -1482,6 +1482,7 @@ rds_send_probe(struct rds_conn_path *cp, __be16 sport, cp->cp_conn->c_trans->t_mp_capable) { u16 npaths = cpu_to_be16(RDS_MPATH_WORKERS); u32 my_gen_num = cpu_to_be32(cp->cp_conn->c_my_gen_num); + u8 dummy = 0; rds_message_add_extension(&rm->m_inc.i_hdr, RDS_EXTHDR_NPATHS, &npaths, @@ -1490,6 +1491,10 @@ rds_send_probe(struct rds_conn_path *cp, __be16 sport, RDS_EXTHDR_GEN_NUM, &my_gen_num, sizeof(u32)); + rds_message_add_extension(&rm->m_inc.i_hdr, + RDS_EXTHDR_SPORT_IDX, + &dummy, + sizeof(u8)); } spin_unlock_irqrestore(&cp->cp_lock, flags); diff --git a/net/rds/tcp.h b/net/rds/tcp.h index 2000f4acd57a..3beb0557104e 100644 --- a/net/rds/tcp.h +++ b/net/rds/tcp.h @@ -34,6 +34,7 @@ struct rds_tcp_connection { */ struct mutex t_conn_path_lock; struct socket *t_sock; + u32 t_client_port_group; struct rds_tcp_net *t_rtn; void *t_orig_write_space; void *t_orig_data_ready; diff --git a/net/rds/tcp_connect.c b/net/rds/tcp_connect.c index 97596a3c346a..950de39ac942 100644 --- a/net/rds/tcp_connect.c +++ b/net/rds/tcp_connect.c @@ -94,6 +94,8 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp) struct sockaddr_in6 sin6; struct sockaddr_in sin; struct sockaddr *addr; + int port_low, port_high, port; + int port_groups, groups_left; int addrlen; bool isv6; int ret; @@ -146,7 +148,25 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp) addrlen = sizeof(sin); } - ret = kernel_bind(sock, addr, addrlen); + /* encode cp->cp_index in lowest bits of source-port */ + inet_get_local_port_range(rds_conn_net(conn), &port_low, &port_high); + port_low = ALIGN(port_low, RDS_MPATH_WORKERS); + port_groups = (port_high - port_low + 1) / RDS_MPATH_WORKERS; + ret = -EADDRINUSE; + groups_left = port_groups; + while (groups_left-- > 0 && ret) { + if (++tc->t_client_port_group >= port_groups) + tc->t_client_port_group = 0; + port = port_low + + tc->t_client_port_group * RDS_MPATH_WORKERS + + cp->cp_index; + + if (isv6) + sin6.sin6_port = htons(port); + else + sin.sin_port = htons(port); + ret = sock->ops->bind(sock, addr, addrlen); + } if (ret) { rdsdebug("bind failed with %d at address %pI6c\n", ret, &conn->c_laddr); diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index e44384f0adf7..9590db118457 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -62,19 +62,52 @@ void rds_tcp_keepalive(struct socket *sock) * we special case cp_index 0 is to allow the rds probe ping itself to itself * get through efficiently. */ -static -struct rds_tcp_connection *rds_tcp_accept_one_path(struct rds_connection *conn) +static struct rds_tcp_connection * +rds_tcp_accept_one_path(struct rds_connection *conn, struct socket *sock) { - int i; - int npaths = max_t(int, 1, conn->c_npaths); + union { + struct sockaddr_storage storage; + struct sockaddr addr; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + } saddr; + int sport, npaths, i_min, i_max, i; + + if (conn->c_with_sport_idx && + kernel_getpeername(sock, &saddr.addr) == 0) { + /* cp->cp_index is encoded in lowest bits of source-port */ + switch (saddr.addr.sa_family) { + case AF_INET: + sport = ntohs(saddr.sin.sin_port); + break; + case AF_INET6: + sport = ntohs(saddr.sin6.sin6_port); + break; + default: + sport = -1; + } + } else { + sport = -1; + } + + npaths = max_t(int, 1, conn->c_npaths); - for (i = 0; i < npaths; i++) { + if (sport >= 0) { + i_min = sport % npaths; + i_max = i_min; + } else { + i_min = 0; + i_max = npaths - 1; + } + + for (i = i_min; i <= i_max; i++) { struct rds_conn_path *cp = &conn->c_path[i]; if (rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_CONNECTING)) return cp->cp_transport_data; } + return NULL; } @@ -222,7 +255,7 @@ int rds_tcp_accept_one(struct rds_tcp_net *rtn) * to and discarded by the sender. * We must not throw those away! */ - rs_tcp = rds_tcp_accept_one_path(conn); + rs_tcp = rds_tcp_accept_one_path(conn, listen_sock); if (!rs_tcp) { /* It's okay to stash "new_sock", since * "rds_tcp_conn_slots_available" triggers "rds_tcp_accept_one"