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)