From nobody Fri Jul 24 21:53:11 2026 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 0F81642BC22; Thu, 23 Jul 2026 09:37:20 +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=1784799443; cv=fail; b=uekQ86v+jP7N+5h6R6o5n6ipXXvobSK5U+E1YG8sCw7ca0xG8ow7aGaDhTNVsalKrWKHLBQd8R0BmXYxfwoviVvSVnxzy5oMeksu27GfYbYZYoCdc0nuXh+PMx3c4jAm7Y/N0pUO693j9Fo1JZxfRzoqmkyYLJNLwtqtGRJn2R8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799443; c=relaxed/simple; bh=QoePIJX2HnJDFyaQMGTdCnUw+op7hc7AqqeJLTlal3A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YCvFwnVlODVVUTi0CY+vt2th0HQFwgFO+EXOOgnlckdSEMV+iXfEbSsr0AeVuWkooBDKyx0WVRYGtGurqnWsaOnB3QzlS1rYToKH8TwgoQsfoeIk7WC1IS39+0MSgmkl56kLzX1yBriEphC2lrIryVhHlUTNgMMJmczXRbE6Z1k= 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=Z9cQaVlc; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=viUNgEfu; 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="Z9cQaVlc"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="viUNgEfu" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtjbd3378004; Thu, 23 Jul 2026 09:36:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=j8qaYmuzAwStjbErCgcqVCFHWf+KqY+nSEAd0ZGmBr0=; b= Z9cQaVlcHm4R0Eto3gwyEYU9iNey4D4Addls3nEltkoePIT67DAWJjLA5CPyY7Xd DuDZ84CCd1/0lf82JcIEyb/SnaMRIgMWESvlkDsBXxtY7wHQTf8q5y/E+gewnWuV tdymdX3WAPGMv4/jY19kSWVtOr8E6N1DYPkNaR06Groir+RzOUzWIYZwrQtkDsiL sVx7goXw0DhL6ZtaavJL1LMxeytdW8V3q+qjATAzMBDb/qGoq8eC6a24oQEwUIWX ebd8tODKQtWMq//5JNinL/y7wLPlxsF2mRnxAPKkoPAduD9cutGYgBgbh1zSui5m Rj8h9Cqj2+sx8k6SGh+ZqA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1mv6n9x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:36:55 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XA6P021265; Thu, 23 Jul 2026 09:36:54 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011062.outbound.protection.outlook.com [52.101.57.62]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y3vu-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:36:54 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NVQmN9dndAQO9mLDSj4vRQUoRI81RrA6+ZhFUwGQBV9StE9XWPA4VSGPcqag0hGFL4DRd8rdUwz9elGn9c49syCrDNPbxcNXbWVs3HUbhyrBObdh4dHKp+zIsoKFj7wwPG9NrfayuubmXcnO6Z9yuANGdKhJGNaBdLRJ4ptew5cJKHbQZ9fSeBI2SzGi8QOFxZgvOp65vViFKKbHcHxnV9o/umW9KghUkmH/icLyMrkvvqvqXzHkvK/HAnTog0G89/RCeoubGhzrKW79V7RXa+4xC2E4+1yOvSXVGYTx7pubA0ZHQh/SIMZTP9tEHawKfXh+kUQoXjaLZnzXpnkupA== 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=j8qaYmuzAwStjbErCgcqVCFHWf+KqY+nSEAd0ZGmBr0=; b=VGXAfxldvD10m6vfry1vDHt0y8Ym7M/sOgpDXNBJXByRGhEDmpPxYSCChl4DNqDDhnxnob930AOT+PxQ9So/4noJXEFNnlcB1zQ3Hl/R1n71sCoaiIMyMXjQDveZJ80YAt9NKuG7JI7FTShBqKJ37TiGMrUm0G5B265nwK7+BM/bobJf5uEPdcWL3m1E2932GXyNJ6b3xeEV7c7Zql1plNEGuuARSyJkYKZ+Baay81eKK8S06luToyCfJ6jyNRZgry7Qz4iiqcuOKuzFc8Y2ISZYXC9YZCjcJwEe38yNcMNyyvMUFG18c/8ZRXO5s99sS63LSVCgmQwe+H/MybMlsw== 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=j8qaYmuzAwStjbErCgcqVCFHWf+KqY+nSEAd0ZGmBr0=; b=viUNgEfuo7VdKQcObiWYPOP5egmJZc6jiCP9b0LJDOQlYcHEt25REEnKBa2ffE0dcjcNUbapnakF+ajLWPb3GvIeQY5awnHSdUND4e6NVc3ObDJ2f60UtQJzqBYDj5mi2cm3glwVtzFws3usMspQEJZqFNZapG0XVzg44vGt3kk= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:49 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:49 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 01/28] libmultipath: Add initial framework Date: Thu, 23 Jul 2026 09:35:59 +0000 Message-ID: <20260723093627.2327456-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0003.namprd04.prod.outlook.com (2603:10b6:a03:1d0::13) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: 7a976081-2070-480d-7d1a-08dee89deb57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006|5023799004; X-Microsoft-Antispam-Message-Info: cr7U1zWXqJo8JpeZUyuMB9QpPpyAPjnd1/8sfN0HTtJ6RgkuzRPcgEeDErh/KO3C9nHQ2iH0Va2cKZirITNymYbmTgeQPp5PTsFyRCW7LZirc36wbO16Uvc8ugrzdovojBSo9Y/52GGNVxGKL5wyhm6UoPPR22e4FJOBSNbnHg4231hhmA65X0xWItsY32SrNC/aqQOPdfr+raE40pdzIF307zreLJrEP3tgW+lETcU6XTXg2KMRAm2p5g2ks4csoe7d+Q0xRhQgORBLOgt2wn07k2hu1Mr1HvolNqB3m/Y67aQkkyg5Cx/YuC46T9kU86Mh3Fac9ZVpuxp57Jf1dzgZGyHdbGi/W06zG4SOx1EfDehybOsrh7jm+2bBS9n8jaWws/TzgYoYN5VWVYsfYUZOmP5bun5pwrIZi4/BzShMvNMuzvn4Z6esbxCx8lrs2wMm8DpNPHJsrOkHBiF9dQLKVMqubHWMEKTJihJxn4C3RFOKsiKExAnnWZAhZDQnTS+0N3wdLNmssMp/OIE3bZyGMtSAJhSG++AojgmfDcUsVesDILZYY8YMyoECe3qVEkMEs2ksQ86pZKGA1EXwq0rZ0R2Ck5nx2DcfsdQ2sQk06TF9lbE2B5w8RvrWvltzXHz8It48OjLmvwj0WJxhsXHCOHxSUEAzOZjKRguQVaI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?R/fgenggsgdhqpkVuvZlvM5EbEXPBcJRslaXvqYvJOJanw9tvHvDqnAgHERU?= =?us-ascii?Q?Zg+V+jUerd0Ei3OhHqnTonRKaydcuiwT2gTifObK/QiS3CIymlJtfPNoAqxu?= =?us-ascii?Q?6dUT5aOLhb6+oY/XjuecYdzP9MeLenKaRmZN4vvx+I3D3LKgFHPQcFvqZV3U?= =?us-ascii?Q?LWEs16jwRme9hK10epYZbVp3wR25oOEDA1norBRbRjInNpWi+jySqLrhoDWE?= =?us-ascii?Q?t9CcDXr1iSkox3K4aFSceukCSverjmMjG2458rp1Na/MnzoXOkdJiwQXN6d+?= =?us-ascii?Q?/l33xpLBERQw9c1tLYzpeA7B2cCB0ZPQZQayLTKdpoQIpuJZelvhlnrsWVTh?= =?us-ascii?Q?zAzrC08WIlszVuWioI6Ga1SWPTsFwe+/TFS+WxqwMzAw0KX+vQY9TIQhaMNp?= =?us-ascii?Q?hGdAGuP8sO4PsKY/lGre8vHiQz0+vIZDRAbzhkLcFluaYQinYY2MXmKa68Qi?= =?us-ascii?Q?yLqYnYvVlfAnaHI1wVc55QZYYKLZoucmNB4q7yiSU88c3XlqG4IyP1C3wl43?= =?us-ascii?Q?angWxYV+fmF8SON3LnJ0YS4sWf9pUcmVYexEVFR45xNvfzQxerJGQLQqBNmI?= =?us-ascii?Q?kKHafp2U1YF9e09LV5REtlfDz/EP/WsW4vSJyrBQXgB9218nG6Q+C+o2GtPh?= =?us-ascii?Q?A5vanwapEElNIPZxk+4SWXkAD6SerXtjY2WHI0WdjNXER3cjI4/0JzfMs3XH?= =?us-ascii?Q?ZlTB8iiIcA5JpqnD4KhaVSTDT+cyI6V5N7RbOoTYPQwBnyQTxA24Onbhxkmm?= =?us-ascii?Q?MGf1Ig+/qZxL75+K+tb0iQA/5Hsjlcs30Iz4rgEGVoKx65Ar2Etsn7H/80zi?= =?us-ascii?Q?xjaMJJtDlWzej8O1NLhtVF0Mpk7ysfjuc+WnKPCJgPgATbS096O0IKZFZqks?= =?us-ascii?Q?NG3T96mY8BjXlrySQ5WHFYo1KG/Y0VB1lo3X9IPsJJNfbZGuKlnt3xVs6qJ5?= =?us-ascii?Q?4gwSsRWL+k9tzAvdd69ar9E/HL25NIk/9DONmlRxRKnP4sUyyztdNjT9iHch?= =?us-ascii?Q?mfVZsQdIrglg3Gh41q/HIXrMQpoMlaOU2FdzSQAGG//qK+tlsZ5li7PJgBWe?= =?us-ascii?Q?cfpUUBGe/uwCT8TdsIBdJon7IjZ2lXCG3o4KSfAitDcnGlxV+RqY86BegtQj?= =?us-ascii?Q?xG3h2HvZlvzHt0CZ/YK2Az0rJQe5alVmgC+nzSboYxNFqdO/91tESjqsZKQi?= =?us-ascii?Q?4fLxsfaKrcjd17+Qw2sqgdwW30t8d43WVo25VavxBgfxiqgHjg1O5wVfhyI2?= =?us-ascii?Q?V8OJipUcbiizR8GI0FjN4WUnFs076DLEVjF10rDiR7qd4Z/q9TWqDLhVyc4r?= =?us-ascii?Q?SwygnnTnyqUAlvbHTVpvLbNhvktCeNEDkiWilK+KMlVrf4kaMzz/TcqiHkut?= =?us-ascii?Q?Qi9r7Xx+cJdy9u3rX4Xr4HnMFmioo5hoGX1d66zxZsYBTpJOdZrWYwRRILDp?= =?us-ascii?Q?pDnMHGFFxU7Rxi9Dc+kLkFt/J/fMq8fVa9np5t7pLchqx4OqBKj6l0YpvFAd?= =?us-ascii?Q?vdMR6uyUiHiFLLWzo9u2vNw56Eox6XECcUuQuww+Phsu6NY1yH7Vnrl5MbH9?= =?us-ascii?Q?8dGhGmTGr1o4zjoX+DZMVFMMlNDGHgm4dt47iuNU212wKLmVjERwjr7zHCYa?= =?us-ascii?Q?Ovmg7YPi2eUrSyXtg3f0xRKob8FaOU5LNZo/NKXodFaQMnn6olOLOF57VnBF?= =?us-ascii?Q?OHOTk+vxP/hrq+Bw/19mN6yPP1crmfZjbyR8chH4WxaA8h3Ao/zyqhm47E7a?= =?us-ascii?Q?B7H+1Oxuxw=3D=3D?= X-Exchange-RoutingPolicyChecked: oIhvPObh2iDIhG+8+b32t/q6zyB6KHby+I2CSTbhvztMGXc4rtH8zjnWNRJpiOu94lmaJ+whR3hkcQXMO51MvnI3npJ2JrM+dsUjTdDHyZxgG3Y21fLDCB8BYu1NtmkFdJA4IKc2pJM2NQsjkyIbl975dsfVS1ab+OJxmEs1MEoPYjldySfGjYowpPMnSTfKFxC9ccoIKl3RPesEu7nk+acdJO5HxZQ5K3Nc/DG/nfKG+MUi++NB39lyYyG87sc+Y/rOHPFxcyqWG3bTelaGLNmTSi/IKRSunFe7V3yczvZiTzsiKe7J2filA38KlIIscBYclv+qLuC9a4besXaInQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: AEDzp3NEhzpwAB1Dan9R0f9KDBIS2L2arTvhkkBEYP705GaSdrM5pHO/ltfCz6nfEVSkxX2e+S0lIj/HPwaEPnuDqRfS0DXpKNs03zHO32ODwv1cSI5pa9DBXouoGQLAGqVLBjb7okX2Jb/Gy2ADzHHaYwmeC4DoBJravpe/VL/Lyivm1QkisuzCd3XCrCkJmbjG7NQaxII+Yaa+kCjg7PIPXyeo4zBWEBupq2eOueVxPNJnUma2MRfg/pKapLGfekhjjwxa3KNAdEExfHSkQS5Hd+d2/kdq+rsGV5SdIXbg/Y4E3kbn9y+FA7empir2LibUxZkdbJdGXXQ1Y9rDiiuThm484eFwjNOEe4nn7KKWWMWFAvovP1PTUePWsVx7QHBYRCJIsH5gQPOuKZqaLlO0UNeWSBbBMt//zxuurBcGjJx3RlFZEFqKYlBsSBt8AzVHVmYgspCPr2e6rm5CzYGo+bZS8jbAu5DF9GHx1iPqMU6kL69kkgh9xXjrHQnhZWlxcfKqPosa52nS3Hi02jqrwzoQ7eytPfMpdRBHpF2hZHBXdCi9tzgXHNM9ACMW/ToJ7PVBsIHjwUKNYFS9pxLK3J9V5rPTiXw4+CAIPMw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a976081-2070-480d-7d1a-08dee89deb57 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:49.0585 (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: KoHkBQkMaj4k7TeCKeOGeU3eIV5+Ib/vrHKKvj6WWikvwtEliim+pFglK68RZANfKZgNlaRThbrZgG9oHbvWlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: Rj-lwq8ZgGhP8m-xXD0rlArdc6nN1qq5 X-Proofpoint-ORIG-GUID: Rj-lwq8ZgGhP8m-xXD0rlArdc6nN1qq5 X-Authority-Analysis: v=2.4 cv=IsYutr/g c=1 sm=1 tr=0 ts=6a61e0b7 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=IMLwmY2krkRuQTCR-eYA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX410Fehbj+5k7 BBJINHp5PPVTAbBkGFazwTdPqZ48g3YWrHY3NDoypOICq3Vf+LnpjdKAFqPaSLOCN6TY1CBIrhY fGy13giURzXh0TO+j5ykEj0U2USNMT03/nvGxShBw6TJS+KWRNaR X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX3w7pOAkmsLgo vFbCXxRrAYw1PzC+KIt8dSJpUkhrdE8WslinMYfIZG7qSWcQRaZaXrVrzptPkv0VSyh7DikXHsT vFWe5oiVSgR22XiihPZVuK4cpctv/9vYdE0tcb1Ioc3L41ZY1nPJGn3MlmCgIm1XDkYda4Ymbmm V1PAakK/gJAqYhylNwXA/peF619IdZwW8HVoaaRptivgK9o7/HFUbh8hvstad1/FX6AeadbgFVR 9BVnulTzX3msMV/l3YpTf0Xv5DDWwgpfIq32EF6l9ItJ2HkDN/VMx+YdhDLYQzToncAMaT8yO8q lPXGCMA3nFzbwRhqfgEfRlk4PRz9N4ClTBx9XAvc3Mchv+qslFRCHzG2S3KIKWMiFBnV/LG4PKz tgxJAtFtGsWOokoumopfIpDzHGLdm+zk6WruoxhQBQUUXfKMgY0zaYq2wC6PBG9U87B6+tz7gEH auqNIgfHY4qKsX+dnDg== Content-Type: text/plain; charset="utf-8" Add initial framework for libmultipath. libmultipath is a library for multipath-capable block drivers, such as NVMe. The main function is to support path management, path selection, and failover handling. Basic support to add and remove the head structure - mpath_head - is included. This main purpose of this structure is to manage available paths and path selection. It is quite similar to the multipath functionality in nvme_ns_head. It also manages the multipath gendisk. Each path is represented by the mpath_device structure. It should hold a pointer to the per-path gendisk and also a list element for all siblings of paths. For NVMe, there would be a mpath_device per nvme_ns. All the libmultipath code is more or less taken from drivers/nvme/host/multipath.c, which was originally authored by Christoph Hellwig . Signed-off-by: John Garry Reviewed-by: Hannes Reinecke --- include/linux/multipath.h | 28 +++++++++++++++++ lib/Kconfig | 6 ++++ lib/Makefile | 2 ++ lib/multipath.c | 66 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 include/linux/multipath.h create mode 100644 lib/multipath.c diff --git a/include/linux/multipath.h b/include/linux/multipath.h new file mode 100644 index 0000000000000..e98b4b241020a --- /dev/null +++ b/include/linux/multipath.h @@ -0,0 +1,28 @@ + +#ifndef _LIBMULTIPATH_H +#define _LIBMULTIPATH_H + +#include +#include + +struct mpath_device { + struct list_head siblings; + struct gendisk *disk; +}; + +struct mpath_head { + struct srcu_struct srcu; + struct list_head dev_list; /* list of all mpath_devs */ + struct mutex lock; + + refcount_t refcount; + + struct mpath_device __rcu *current_path[MAX_NUMNODES]; +}; + +int mpath_get_head(struct mpath_head *mpath_head); +void mpath_put_head(struct mpath_head *mpath_head); +int mpath_head_init(struct mpath_head *mpath_head); +void mpath_head_uninit(struct mpath_head *mpath_head); + +#endif // _LIBMULTIPATH_H diff --git a/lib/Kconfig b/lib/Kconfig index 55748b68714e0..d0258bef374a1 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -636,3 +636,9 @@ config UNION_FIND =20 config MIN_HEAP bool + +config LIBMULTIPATH + bool "MULTIPATH BLOCK DRIVER LIBRARY" + depends on BLOCK + help + If you say yes here then you get a multipath lib for block drivers diff --git a/lib/Makefile b/lib/Makefile index 7f75cc6edf94a..7ba5e13be4171 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -334,3 +334,5 @@ CONTEXT_ANALYSIS_test_context-analysis.o :=3D y obj-$(CONFIG_CONTEXT_ANALYSIS_TEST) +=3D test_context-analysis.o =20 subdir-$(CONFIG_FORTIFY_SOURCE) +=3D test_fortify + +obj-$(CONFIG_LIBMULTIPATH) +=3D multipath.o diff --git a/lib/multipath.c b/lib/multipath.c new file mode 100644 index 0000000000000..9cc398d266adf --- /dev/null +++ b/lib/multipath.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2017-2018 Christoph Hellwig. + * Copyright (c) 2026 Oracle and/or its affiliates. + */ +#include +#include + +static struct workqueue_struct *mpath_wq; + +int mpath_get_head(struct mpath_head *mpath_head) +{ + if (!refcount_inc_not_zero(&mpath_head->refcount)) + return -ENXIO; + return 0; +} +EXPORT_SYMBOL_GPL(mpath_get_head); + +void mpath_put_head(struct mpath_head *mpath_head) +{ + refcount_t *refcount =3D &mpath_head->refcount; + + if (refcount_dec_and_test(&mpath_head->refcount)) + wake_up_var(refcount); +} +EXPORT_SYMBOL_GPL(mpath_put_head); + +void mpath_head_uninit(struct mpath_head *mpath_head) +{ + refcount_t *refcount =3D &mpath_head->refcount; + + if (!refcount_dec_and_test(refcount)) + wait_var_event(refcount, !refcount_read(refcount)); + cleanup_srcu_struct(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_head_uninit); + +int mpath_head_init(struct mpath_head *mpath_head) +{ + memset(mpath_head, 0, sizeof(*mpath_head)); + INIT_LIST_HEAD(&mpath_head->dev_list); + mutex_init(&mpath_head->lock); + refcount_set(&mpath_head->refcount, 1); + + return init_srcu_struct(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_head_init); + +static int __init mpath_init(void) +{ + mpath_wq =3D alloc_workqueue("mpath-wq", + WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0); + if (!mpath_wq) + return -ENOMEM; + return 0; +} + +static void __exit mpath_exit(void) +{ + destroy_workqueue(mpath_wq); +} + +module_init(mpath_init); +module_exit(mpath_exit); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("libmultipath"); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 967DE42A788; Thu, 23 Jul 2026 09:37:18 +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=1784799440; cv=fail; b=MVoPRD1QBBGQacVle/zo+FGqt5MgwgYXQ9dHu/6aq/jWZBXBVGN0Chr7zvC/uL0911tjtIh7ZFq1ypr4DUOwfk+IFzsixEUUb3MeL3e1GpwFYAKbfvOnwo9TbRL0nsBVEhdyk9k/2z/AOlPxEXQrILyxy1fIYDvqgx1vUIEPhe0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799440; c=relaxed/simple; bh=6rdmxMeECp678pI5yuTHOdVmDuMs0QA58leHz9ItR+0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Vwt+/yySjTB0A1cMMzjJtZTHbcUCxt3wYL/sKODYEtcPmhauJfiKEBUcdHhjd/fgW3zimmi5mNLQZWsUGJ6bQ0b7/OYz/VKVhJUSamg/dZqDO2R344DzajJ86lU4DRMYVlOtYka9MFR5XFVqe1RCjWBMx6/M0a6kW29c3dbFw4M= 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=QijBaa+t; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CqKeZ4za; 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="QijBaa+t"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CqKeZ4za" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtl2w3378008; Thu, 23 Jul 2026 09:36:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=0cnZQpy5/yiwLPQ6XRScRSBdQlV0F+Oot/KnLV8hd8I=; b= QijBaa+t3/DUXV5PAVLXRmUH4uEHjU1HJ93eza03fiW+x8k6G+o/uMphSL44lkMv GQpCJlJRJboUijmmQLolJvlydj2+Z7L97ogEKkQsL0ad2xkN2IkgPH4DPc0Z2Jis 1Hd88N6u0Vd35QaUicIwgkR38KXVIOZlctYteYeV9qcs1d7EYrCx1WqS8ojwo1mD QLzHmmNfN1FOsBNXDiyiPJkN3H5IWWhoUbZSo7MkBGmpX2JwmlMAZ8nhIh/81NoI MiCorDwYydB/o4kkRIJ87lDEDgYFIzpIvIF/2aKixqWMAtoKio4Vm386OvxM8zV3 I5m8Arq3XZmgssDkTHK5rg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1mv6na0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:36:56 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XA6Q021265; Thu, 23 Jul 2026 09:36:55 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011062.outbound.protection.outlook.com [52.101.57.62]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y3vu-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:36:54 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MA6MMCUfMjdwf8Mqoj+oRz7OLpGLWN05kswT3w+nrBjjsoTRT1S1/cQYlnKtB26SON2PcCQNks5jCzSoPYmnskwQPDIzCOtOQVBiWlfgHYZ0EOHpbTJ89TW7jONY8omhTg7WU5e1fOZzee2FjJnfEhPuVf1i3sbqXzfmQp0UzQ4GuQo77/P+QpW0IIUyBrwEOye80THi8zjMTyqZbiKDD8oUnDFLdC2Oq3IArfHw8cpCnj312GJ24EsetpQKBoeW32doL2caSaQ4cOEYbXH+oiA56Z8sNi2wIp/3tUeTbuLFWEIQ6MQoOkfMDCiI3cZsfLUJeEWQFtVfxjF1FXHA3Q== 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=0cnZQpy5/yiwLPQ6XRScRSBdQlV0F+Oot/KnLV8hd8I=; b=oIU48/wLT4QrFiwdSlJUU+MgPAYaYsopmgOvtzzQa1Le3WM/3JyC4bsEubImuWLovIbSZauBGwc8SxkJxN+GKLHRl8jCHyyMxuy8Ma4vty6tTzJ38LVXyrRZjPdesU6oYqxB1Qk1MhvDY5IhVXYH4F2qU7SF0QmOhQqqfWFdRxogHPp+TG6dGO4o/hcoCbbbp0TdQiKDGC9y+EpN38UCm5qtP6kEse4NHIPKYeP7IDIqR8bHOxnn4Ij9R6UJMsJqBR0644UpF2yAwaz8yBzfvy5+BVMpq0GedLfD0MoReiVHRlwLSuw18Rs0hSv4aHWILoZwDIxStki8OaQc8tL80Q== 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=0cnZQpy5/yiwLPQ6XRScRSBdQlV0F+Oot/KnLV8hd8I=; b=CqKeZ4zaTEbAAvg2kl8rG0TOvFSJAmELvrPC5eYoglBG4W5HGsii88HWl69w+i/Q310XpeFYIRb09RfCsfsoce6z3QU4Cvi6YUulh2ewLvedIa4QVvt16P+/0ZkPNx0j6PdK1SjJ3sLmKDYbbSHlUCzUXbfsC5+vzh+NNkNCqVk= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:51 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:51 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 02/28] libmultipath: Add basic gendisk support Date: Thu, 23 Jul 2026 09:36:00 +0000 Message-ID: <20260723093627.2327456-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0185.namprd03.prod.outlook.com (2603:10b6:a03:2ef::10) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: 7a33fcc6-5f18-486a-bbfb-08dee89dec88 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: aNSy2jLnal9UGu6tO8Ptrh/9nKihsA1k6BFYBLZ32s3HTuyCkQHxVBhmHW3Z1wKq2V9TcjMezDp4FKMUwUnp1rxGf/7CEDmk3xhFlx8X0ur1vj+VPd2KX6GhBRsfOjq6IyLCq83TSYJY5jbgUtN+eYln8DqArljxV9iticXdnh5J92Bw9sXwuGYN1pJxNo1xaQrRW8HB7lQxOmxn5jgunn+OuYhNg2H9MS6wcQs3yjVd6zUmJzkUoEWHaSScsX59wO+KgjUxefgUYW9jYw/aLk3Zus0RSOiiaRhVNvKOuB63aGJPw7rc0v8xGwwag/n4q2aA9lD1s8ffiwbF0B4kY/QurfAw1kBC4OaQXVi4ZiBqGxpAV3pukvCyxlKixyKrWevaDlZfkN01znNgsl/YkOPy0UKo+TU+QHnu1fmTq4yrUuLIT+pvAa9Q3cGMF7pA8djvGcXXqnQoAWTCuKylIFvlZUl5HMEVBtgKqHxu33Olh/8Pel+mpgCnl79CQt1Wbmd41OZ6/JM7a6CR0vMnmQczl0Ezg6CJMOsz6KRB/xrw+jfHp51VCFoBjJwkUqex2HC3P9cM0I0G1oHa4sFJYkZn/0y9Wd4K2vbijy4nzwoUqAix8M1kaRtXTi9tuBLITpXHVG4J2ytn3wokO4XdVxuC6Il9hamIfmfrm3TAfTc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WtK+9JayW1kTw1gLsBfbs43WY6X4SXmmR8ZilSTVqE1TIj+GfpJrE//yZvkn?= =?us-ascii?Q?aOyHa994tWYHJ1zc0c75UMbT5x+74h92z8AiEcJmUP75Y7gO+LqCF2DT5Wa1?= =?us-ascii?Q?liIkQBH23qo7y8mtI2icOR1OlxOViZHtPQPvPRp9lTjatlRS7uqx9g4lGazi?= =?us-ascii?Q?mNB9AV+bUuhXGyIZaoT+FX22Fp+dKwobiI5mnkhs6zRY81qDIB46BPN/6cEw?= =?us-ascii?Q?552bPDlkbltTozrKRMCNQXHLRTzmb5yBSDMIvu0hlgRBe8vFK4W0ritqaj+F?= =?us-ascii?Q?beHlbK9RX+T2gelKFu0o25M6IxJBbFaSY/vTZceMOpdcnAKwC2uKJPCMqBWO?= =?us-ascii?Q?X5Exy8V6DUHX7xd7Nvw4FiTqCAdsPPYY3Uu+d7rxIFIEMKxIZa1pJ+oinoKX?= =?us-ascii?Q?USTqywqAQ8IVLyrgSAZn2c7m/Dyq30wsqbPP0dvI/OtVPcLtTxrYW/eQV0Rr?= =?us-ascii?Q?hiVl2OEFZ+0WKfY803/0oqDCwveq4q95PyG16ZEFly4YfZDxtt3BwODP47E3?= =?us-ascii?Q?SGI/mTqurGUSSu8jsKvMlMxvEqcI2PZ4feCp6Ab2y7PAlZEX47eEAUNFnJGN?= =?us-ascii?Q?qUnIGpgdwIg3vUeNCPDflvYpz5ET2lbVcl1FQMbm3FgH5z0Czj1Qt/vH2Cel?= =?us-ascii?Q?D27F4JypBFHgwAeouLPUhqdQImVsKlXgDzAchIU6vZn2WB5rJLjpggxwb7u8?= =?us-ascii?Q?X1xdEy1KgIQAepYY0Kb96GiwbAIpb6mkwhj9LzBX+qGFyIe4RG/IxKTDejZl?= =?us-ascii?Q?68nlos2IDFv8aX1ATePhUuEGtpKoEYyiSb5kawMEqUn782ArQTvV8+fzzqe8?= =?us-ascii?Q?KtTutP6KUmqv6xtPCgSCOcrsqaotMS2JXYiePbkVgF0152XEBv1CiaiGLpvi?= =?us-ascii?Q?MOHTOzfyc5HR32Y/cI1J2FFSspn5+a1t4bVkjeDREg8WsqfkIBKzLOlUYjGY?= =?us-ascii?Q?s+cLvV+wwvGFmsuR/xcDzBfJu7Dkum9a3lPZdQ7DitisaSpQf1hYQMU+Ie1s?= =?us-ascii?Q?/AkzGhJdTPRr9R0nfMSBhGpeye3YLmVpNmxceQ9b0464PPaJ8Glk7ClzlFBI?= =?us-ascii?Q?WLFmxU5aRLD4iB94m9ZudxZvkyjrOFNoVViF9TDJev4vr7itOFPwadzfuoGk?= =?us-ascii?Q?9HhxmtM2EuyuSUu+KkVcaZXZhnGBglqWiJSlwnQRwpmG7zMWUF3xdlVGz6jH?= =?us-ascii?Q?BpmPgS0uhVrQqnKJBzq0JIovsf0KlS7fm7lFFSwcDv0eUayNkGw0JS3rntSN?= =?us-ascii?Q?D/vOXW++aW6X34Ul87Byc0YR8+4NUdtbcsn/EOF7Cs+Ze7xcinvC6+LX0bhB?= =?us-ascii?Q?br3qd9ter/g2zJYIF4505tGfJFywNgaZHl+XfAqTEabigXNxSKL8pce7boav?= =?us-ascii?Q?/ci9hidAJ3mAJIqu3belJByezXC8Dk64A8ddDf4f0bW0CjY2O3J0m6wDG2Je?= =?us-ascii?Q?RQ3/DzgCjCjHZQTZffYQ+X1xm6cmNT4Pf5dzB1OcqMIsUkjnWOkrhRwzw2q7?= =?us-ascii?Q?hHzNxcgcb2mctPKT/mIX+kBSEVoVvwm+9HU4eN6nLCLSx8sdNDNC6hulgmD5?= =?us-ascii?Q?TtiSKFEdtAvDzHqoGngB7MNjx2EMe5iRbcTtE5b01Yg4u45YxRiS5g+8nfVr?= =?us-ascii?Q?QfbQvAx1RcOvVA96WdOhQlthZdAAHJLetG2WkzOJUdsbydQ2cnLuaaq2Oa6z?= =?us-ascii?Q?tCUA83QAPscUwjSZGpP9ZpkUBPlpN/Vn1zhvrNiKJOn2mXEDF+YGcc7g8Z69?= =?us-ascii?Q?P/rxd5lt4A=3D=3D?= X-Exchange-RoutingPolicyChecked: DZvsoJw9g+ADOOIfT/IUXvQC8jlDxxyDUZg81gxzCHbLY0QrQFen8kODERpEkabal6uByx3/++EnRk0QAoopDy8dZV7bo/3qMlSXJCsnGBq5vhHpOBXMI6F1jCq9PGWUYfVQbBiutn7csWLkWevssbhbiJpwecTPVRiwD4xkfUuUgXEnyN/uDcOYbTIHAT3x+ZgtHpuy2VehVv5JpnBkPWAYYdSBNTSYfegbgY3A9ihiS1e/gmETdIVs88tyl1OTjFc/sCioiq+7R5UgzCBSsxoa5LYsl870Nfzpa0hgJ8yUfwg05ZLG+0R+Dz9/5UMUF5lsRnp7vQ87AQME0MBKZw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: vpb81jSXVJcEZHmuAKVjsma0E7+k9a1mvev/pDuAbSXzPJFJpOlxkmEBzCPcQp2qtC1OGsxp3dxxEdbfS638uaOuDl6Vj4WU+YuVPhMQ2LLQ92oFvUA46AE1x4dHBywxnDtEETxxddiy/MJ1tojLb7SuMBVPz1IuC5CPlCKC5GUeu7QixiSi/tSBDjgL3aakCZEmBXPleX5VIY6vQpInULjwYM+BspbmwQCgXgREmheH2dHgplJmar3BSNjrkGwyeMKM+eAp6zYAHFt/N3G/eeulP/aJBfIjh3ZqUaW1pxrfuvy7XtCj/HqeUJpL5rzZkzrReReqh2d4dBOytg5emKip2ImmUSxwcdaZfUrfTbVEpLzrm2Z9UHk7LDCNw9mZuM59jFo9a+JFdqg0sADY6AenITanmw0kePcUxyXGZQzVYYyjhBYBp2YucT1ZUAgRUnfVbqdLEgHyQr/6U4zzjYrmwt6JazXmp5oEljgBUZttJ/eNO2sKy7TTVQmeCTTht6Xhl1/c8+wobLbB2xg9ULuc49v2cnfed28O/eDApY/CVqD1H7rjRHBRRRV52JNvHH7hC44exhGw+xTCFpO9++nAwZqmZXihRGuYLtW/DjY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a33fcc6-5f18-486a-bbfb-08dee89dec88 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:51.1978 (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: D2pDgfftcznWrUTD8BjHcVbSNdMfZfYswCwxfUyvOwFw7WVAhG81zW4pWefHAMANmWfrmNlG0txoskxj2ms4Aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: 4ZvaU-IAGkYuHuFR7hQ5gYmfmOWE4t4D X-Proofpoint-ORIG-GUID: 4ZvaU-IAGkYuHuFR7hQ5gYmfmOWE4t4D X-Authority-Analysis: v=2.4 cv=IsYutr/g c=1 sm=1 tr=0 ts=6a61e0b8 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=B52eoxIPv8yZRAGToxQA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX4fChoQkOAruf LxxKzj7FtWla3nEnUbB0e0fXgvbXJ6EEzqDW0OkueND6RtX8Rss6OxX9ezKFw3Fv8cb6BdMG1cT BBQ+89oPBJQdvqJnkWYMPhDR86WEUpyCmzUGn5XMqoQHNmxKz+c3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX11n2Uutd51sM 7T3l5MCqHCfRAf9wMFoWtEovW8XG7COCp+BFiJjMfKlkmDWzSaHWe5UrAUHU3LsOeYML6jL1MpK EwPNa7gisHMGSuO1nNmwZRosiyXqACk4qLGmb7txK6gjvtCp66NqG7Q3IoOvz/xuUmS63B0Ht5b /tLQ28cEMvqwOZHBs0dZYIFtS5Mxevk1O9iHLPTNRRR3C4XjRHEpG2Sco7so8xaQBIee4lmEMbP VaFAyGlung+Pvb2beqiOnoGfoY/LNty5Z6YoiwJJzWOh2l2TBqX4JIZw60fNFhfcsHywxuB/mwF cEdKrKDi/xJbJHtFbzi701K09oGxOau90IVN3LM11Avv0feNY39cEobh5QRe3mq/oPl5Tb3Orbe DF07ULrgUFx+FaWVkxiIYc2HdObX4VM3+HigkUU0rGcQE4+oMWc3zr6/YuG1RJS7x1BIHzQx8dj IUrIFz5HVXbEI6a7Unw== Content-Type: text/plain; charset="utf-8" Add support to allocate and free a multipath gendisk. NVMe has almost like-for-like equivalents here: - mpath_alloc_head_disk() -> nvme_mpath_alloc_disk() - multipath_partition_scan_work() -> nvme_partition_scan_work() - mpath_remove_disk() -> nvme_remove_head() - mpath_device_set_live() -> nvme_mpath_set_live() struct mpath_head_template is introduced as a method for drivers to provide custom multipath functionality. Signed-off-by: John Garry --- include/linux/multipath.h | 38 +++++++++++++++ lib/multipath.c | 99 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index e98b4b241020a..ca8589d5cd8b2 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -5,11 +5,19 @@ #include #include =20 +extern const struct block_device_operations mpath_ops; + struct mpath_device { + struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; }; =20 +struct mpath_head_template { +}; + +#define MPATH_HEAD_DISK_LIVE 0 + struct mpath_head { struct srcu_struct srcu; struct list_head dev_list; /* list of all mpath_devs */ @@ -17,12 +25,42 @@ struct mpath_head { =20 refcount_t refcount; =20 + unsigned long flags; + struct gendisk *disk; + struct work_struct partition_scan_work; + struct device *parent; + const struct attribute_group **disk_groups; + const struct mpath_head_template *mpdt; struct mpath_device __rcu *current_path[MAX_NUMNODES]; }; =20 +static inline struct mpath_head *mpath_bd_device_to_head(struct device *de= v) +{ + return dev_get_drvdata(dev); +} + +static inline struct mpath_head *mpath_gendisk_to_head(struct gendisk *dis= k) +{ + return mpath_bd_device_to_head(disk_to_dev(disk)); +} + int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); void mpath_head_uninit(struct mpath_head *mpath_head); =20 +void mpath_put_disk(struct mpath_head *mpath_head); +void mpath_remove_disk(struct mpath_head *mpath_head); +int mpath_alloc_head_disk(struct mpath_head *mpath_head, + struct queue_limits *lim, int numa_node); +void mpath_device_set_live(struct mpath_device *mpath_device); + +static inline bool is_mpath_disk(struct gendisk *disk) +{ + #if IS_ENABLED(CONFIG_LIBMULTIPATH) + return disk->fops =3D=3D &mpath_ops; + #else + return false; + #endif +} #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index 9cc398d266adf..916d01a285284 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -35,6 +35,102 @@ void mpath_head_uninit(struct mpath_head *mpath_head) } EXPORT_SYMBOL_GPL(mpath_head_uninit); =20 +static int mpath_bdev_open(struct gendisk *disk, blk_mode_t mode) +{ + struct mpath_head *mpath_head =3D disk->private_data; + + return mpath_get_head(mpath_head); +} + +static void mpath_bdev_release(struct gendisk *disk) +{ + struct mpath_head *mpath_head =3D disk->private_data; + + mpath_put_head(mpath_head); +} + +const struct block_device_operations mpath_ops =3D { + .owner =3D THIS_MODULE, + .open =3D mpath_bdev_open, + .release =3D mpath_bdev_release, +}; +EXPORT_SYMBOL_GPL(mpath_ops); + +static void multipath_partition_scan_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D + container_of(work, struct mpath_head, partition_scan_work); + + if (WARN_ON_ONCE(!test_and_clear_bit(GD_SUPPRESS_PART_SCAN, + &mpath_head->disk->state))) + return; + + mutex_lock(&mpath_head->disk->open_mutex); + bdev_disk_changed(mpath_head->disk, false); + mutex_unlock(&mpath_head->disk->open_mutex); +} + +void mpath_remove_disk(struct mpath_head *mpath_head) +{ + if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { + struct gendisk *disk =3D mpath_head->disk; + + del_gendisk(disk); + } +} +EXPORT_SYMBOL_GPL(mpath_remove_disk); + +void mpath_put_disk(struct mpath_head *mpath_head) +{ + if (!mpath_head->disk) + return; + + /* make sure all pending bios are cleaned up */ + flush_work(&mpath_head->partition_scan_work); + put_disk(mpath_head->disk); +} +EXPORT_SYMBOL_GPL(mpath_put_disk); + +int mpath_alloc_head_disk(struct mpath_head *mpath_head, + struct queue_limits *lim, int numa_node) +{ + if (!mpath_head->disk_groups || !mpath_head->parent) + return -EINVAL; + + mpath_head->disk =3D blk_alloc_disk(lim, numa_node); + if (IS_ERR(mpath_head->disk)) + return PTR_ERR(mpath_head->disk); + + mpath_head->disk->private_data =3D mpath_head; + mpath_head->disk->fops =3D &mpath_ops; + + set_bit(GD_SUPPRESS_PART_SCAN, &mpath_head->disk->state); + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_alloc_head_disk); + +void mpath_device_set_live(struct mpath_device *mpath_device) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + int ret; + + if (!mpath_head->disk) + return; + + if (!test_and_set_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { + dev_set_drvdata(disk_to_dev(mpath_head->disk), mpath_head); + ret =3D device_add_disk(mpath_head->parent, mpath_head->disk, + mpath_head->disk_groups); + if (ret) { + clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags); + return; + } + queue_work(mpath_wq, &mpath_head->partition_scan_work); + } +} +EXPORT_SYMBOL_GPL(mpath_device_set_live); + int mpath_head_init(struct mpath_head *mpath_head) { memset(mpath_head, 0, sizeof(*mpath_head)); @@ -42,6 +138,9 @@ int mpath_head_init(struct mpath_head *mpath_head) mutex_init(&mpath_head->lock); refcount_set(&mpath_head->refcount, 1); =20 + INIT_WORK(&mpath_head->partition_scan_work, + multipath_partition_scan_work); + return init_srcu_struct(&mpath_head->srcu); } EXPORT_SYMBOL_GPL(mpath_head_init); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 968D142A791; Thu, 23 Jul 2026 09:37:18 +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=1784799442; cv=fail; b=U3ZQncQhCuL7Xm1A0ybfSizneU0cMVl6BYgO4tmRIXMNl12jVR8Ttk4P7uSrfoCPjzTi1ymRKZgG1buLhTahjYG4jajzMF9OHSG+UvOiEl+WQGJxuEwzR7fy8ICKxJs2Xrcb9vDbcmexplkRj2TOuWlBo+ZBfU9B3rYyZP6SI/Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799442; c=relaxed/simple; bh=6BLGZhC1tLKl4Oc1WoDvM71/G5rdXBlPzZpyTL/dPv4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DBVZDH5cUsQ2XpU0/33icjLOPB2jERCKOgB0HaOUfVOowDR8TC5ZrKqHcGPuIXTJk4B4+TSk8Uu4a9GSTOFvjzN57+Mp7FluRJzbvCa9NZuIfbjb837L2oeY1GeUQd8vDVz1hucaPikplp+AcfYwuRDsnxSXjILyeb5pnYEkPr4= 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=Qajw/Pii; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Dkit2NNL; 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="Qajw/Pii"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Dkit2NNL" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtW7S071631; Thu, 23 Jul 2026 09:36:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=AvpfttfNabO3y0/gu93AS2K/6m8C1erP9QEeV3pwhk0=; b= Qajw/Piiq/EzRs6nmUr34nrz4chGYm8kXxaQii2PBu/WqN3Za/p4WRs+I9VwxfDp saofrdW0Le0flNAlIjSaaoDv9b4MRMF/yqeF07QPEL76QBZcg5STJj2ShUxapCBx LvnVLQ0Sh4tf7NCymI88miI3JO9AG3psLwwIv0UYoZuZ2wMGPihY4sEy7AiVinWu g4Df8n3qqwheYF1r5WxcBBvFtetoC4OJiGevcCQKmTXtB/XsAoFe5vHR2H3+ddqY M8+OvoRzd43OBNV3nt3Y72Zhf7MdZMsDgOzMzxVmWnmL0R/f4yrdCToycqCNrumP zfUfV7huF+FUfLBAQ0jrFQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1n36sku-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:36:56 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XA6S021265; Thu, 23 Jul 2026 09:36:55 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011062.outbound.protection.outlook.com [52.101.57.62]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y3vu-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:36:55 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z4G9gsZnlCTYv5awNXBbXFcZEMIjBKW1ef2IZzE4Rm8mDQN+dOouJGcXxRYckMtVhOPUVrWA1rTpWRvEDzjC04shb7N1R9fjKVYGL6gYZFMlAHxvs0d7lOPKjHe5jSZq6xLCupxipzNOHlGp1SY0wDVr0WbQUO2y104fxgMCG/tuQi97EspHrJq/6dGFQoff654Kvky1glRlsXX2lZMCyaEkEeHr1XsYoFQhfPh4tHBZuRPdTAK/oA311nYyqBimFoCmyB04kXK6RYWtYbJQM/B9oFSrJNwiUUUxEVD6O6XDTRuDtpC3+4xitutvMu2OjbO0jPfaamkvUfaxg9ZQbg== 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=AvpfttfNabO3y0/gu93AS2K/6m8C1erP9QEeV3pwhk0=; b=KLmQhnBJRu5uyRE9CVDeT2P3IIDdzNLuoH70tpF7d/q7BnKTz6HMiA/IQte1O+HRexolyz2z8qLJL6MYKgGNw3lbwJFFdRewMEE3eq6mrw/gwNwppYpVy5Ltyl1D4kLIE/dUTFjfTyfZOuyB63b5WhC7d+XFQ0wUTW60SL27r/pomBwVnzEiWSJqRkY00rJkHRE5/Ma79ue9bZY8+VuoDbJu4GLXIqEkJtfu4Wz5D3YasRm5in6zbzMNnhnNYmvAIkAn98Sgu2QRVJcOtauo70emDUr/QyIQkuSK/2l40ThABsrH67n1RWETneBuN+wlBvNbiSgYJ1dVfKWeEHIokg== 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=AvpfttfNabO3y0/gu93AS2K/6m8C1erP9QEeV3pwhk0=; b=Dkit2NNLHzl+LQUTLcUsRA6v8nKKEMDFaZ/m8S016PivB+p152TeCe5Y0Ea0g2X80k0jAH2NJ6HpHTtuh15mO27usoZ5+L5z3CZ1FntQloblKezWxER6luGY77DMXLUp+bUgyrSg5rxpRbp3PhQB7f6NJutqAJCPHtXkBQVbAH0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:52 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:52 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 03/28] libmultipath: Add path selection support Date: Thu, 23 Jul 2026 09:36:01 +0000 Message-ID: <20260723093627.2327456-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: DS7PR05CA0101.namprd05.prod.outlook.com (2603:10b6:8:56::21) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: f5f6737b-9549-44ea-11b9-08dee89ded64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: 2HciUGXLO4zwoKH0AoVrISX+ea9bg3c1Um1CprauEKj9O3AkY/qA/4Y0s5BcoRJqEXKv+WumoQQVRtFT8Il16XqZsCyY1bjXAQAYvtMnTqsqMTJp81ZB0grHk20FHKz91qYC5A4dbH6bmUDWE3YJhsJzhzvg/ceHh7nErQWrEVLaZXWq2ypVUKutW2T4Zm1YopCP+YtdPDZAKa9EKnZU76FYsmzycAr3qhl7FAqQgcymKJdbGQQBwEraeEPF4qKvIzUv5DNaVNvYzrv7Ca4sdNh2D3MIfM5W2FpbTRaHIx3KkOp6Qst9YXZEJIlbgeXY7vB+lOB1KTtFIk8L975GsebbXMURglTpbwAQ6G/YCX1G+jGdsHciRT+/VnAV2hBE3JJa1LjxvzKxGb4ILJvCTe9mELAfsQXrF21Xqd94l+cyDTzDLn2Wm2ynxu0OXzaoim3dKuH5dC8s5KSg0uIEe70mrHERT0Cfi+N/lVXB+72Vykt18Ei3d1lzvroKg/0Pc9eU8qVzKggCK34nWqI13wWRmvROxOWtwongh1n2ll8F3fBYmCx4PCViJv92DwVddVctMYTlszk1lVQNXZk1yVTR+5hXAn1IEwfCKaWmljB7QLxmIoMocihq5F5v3U4aU2CptVozqWEgIjikANqDPwAnYvAHDq5PyGCiEdE3OdM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UBzAwTb5B8LnHK3fgD6pU12oWWqFlt8T6A59c32gUplXb6akWgFmWDq0f15B?= =?us-ascii?Q?2OCV0LqG1F1TAYo48njewAWOCV4S23jklSUQJMNsg4zBIX6u1yoZi2vNYhyf?= =?us-ascii?Q?J2stnLGeaUvTPnzj7SsvV6BwxmhauMnCMdec8Pzlz0Kv/FMnJF4F41f9syLk?= =?us-ascii?Q?iFxJ4xtaSDTZPmAWZXGvtgbNejWB6wtw6OiHwW3oQkatTUj9zlj+1Sr5Sdn5?= =?us-ascii?Q?z+F4ZUGM3rfmqJ3isdRiD/OBZaiBCm7ppbaKZAbEjY7WQ2KIE/LnWWwvvj1K?= =?us-ascii?Q?yE85NWcoMFT+i6n9nPZC7rk/HxbsLtS212lTK7v4i9AhmeiMr4SYJW/JxmuN?= =?us-ascii?Q?dvoCnUO3V9AH356+0QJO0kCeTQXCxvVE8OVhN0zrSyVQwrw7UE3FoXYZKMcc?= =?us-ascii?Q?QPEPB9iXgwEH90lzoYF/VRAbZ2R8frCOyoqylR3pzMM51ctPLwH8xCmSfhBt?= =?us-ascii?Q?GU3x59KQfD0YT6pPVjJNkN0uhOasrjrM93/oJi6WkSOfUypyjGy4PzXee34B?= =?us-ascii?Q?Kf3BFdpPAk6fq4aCo00RCQ0erjQRe5zILysCbQGaz2+t3nRLmaFQPBTDlNtj?= =?us-ascii?Q?pMDJbDvdoqCIyrD7UW9la5H7CabL+zb6dBWipXMtEKZS6I/byzaDEUIFjn9g?= =?us-ascii?Q?Icz85s6/Ww5r8rQZpbhEoZOx265+4/rlR0H+pt7ZcNlDpeiyC7/A9U37qUae?= =?us-ascii?Q?yrHzQQfu+V7GtRfnkoV6JX3tvmypk3xNPHcYe0VQ3A9no1AhDv3fZrQkOEBO?= =?us-ascii?Q?vPbq1CAcWge25le2plocmVOX53Z+FxDv3t7F20bny9m4xqsArRzalRHN2lm/?= =?us-ascii?Q?VqLI2l/dbau9VGXP/k+5WigKvUSmLRyW8XiajOXB7WkKr3Wnlp/6sX3I/Nva?= =?us-ascii?Q?DWztDfl1ZOGPfpHOO8QzwBV/LlBH5w57PAfVW2/otxv7B/VA3/an+Mgh2lxJ?= =?us-ascii?Q?mi6BNKTENFciFPL61sFIQGw/Fj7EKwIBAF68HSBmQFfxmVduUH2S0liUGsMI?= =?us-ascii?Q?1Xm91kle7gPafkFdqDH9RTIQ1gzaw66YGvXY24wyOlrjT9tHTIIEWVGHVEcM?= =?us-ascii?Q?9PuxZr70v9WxQv/h75xFM0UVNB3jVxpGbDQE3bLHniSlNupdzRv3H8ssjqeB?= =?us-ascii?Q?hUiNxU3TZVmSnBG4ar6bizfOHz8Bodsv6J5e2ORLEWMnh/Ywier1OhP0SPjW?= =?us-ascii?Q?Vz4PWXbf4aechBt0MvwoiwGwvjUNtbLgayWv+y9DS17ebqD3N0Pr9a9NnOds?= =?us-ascii?Q?aNtgqHiVDrbm971n5kEwe/DkNH7PCLJ7rQXDA4xwT3MbakPmlYhOeEDIvTc4?= =?us-ascii?Q?0mQNnDI2C7jjYWToyLNP0zgZlvRle/JmhWPHpoZvyhft2l/QJtGzU146zn82?= =?us-ascii?Q?qRDdstG1OiLTyJBhsU8vPwFpz+/0b0rWvE5nugX4oU70t2g7XjobnOKHfb2w?= =?us-ascii?Q?+Gev3bpHaiXKMNhXDA8ZfFZDCJlF3yI+fyJcpmZhNLBTkhyMnBm7hf3zA2rT?= =?us-ascii?Q?w4MRGG/qY1jy8WnwG3SJqBktvZHM4v4Z0LBlZqwUKpvj/OjqWEl14xbXUk/2?= =?us-ascii?Q?PZBdVxWLanPyNuiZNjdnfdOu37TKqj8Qaq0Q3mGzhzKOgT6DqmB8jxOR/tzd?= =?us-ascii?Q?a2DJg+VIze+1VMpQiCUFsm1nj1JlbbLz3SRZvhjzlx5MPD+ILOqHC+JSEhZG?= =?us-ascii?Q?FRz80aHmVFZ3Q1KVtaC62Wz1JIjn1RwEItyHxP/T/g86Te1RAqMBX0xMMDoG?= =?us-ascii?Q?QBtSHVG9dA=3D=3D?= X-Exchange-RoutingPolicyChecked: hrldO01UcQnMHVAEchLztYz3LfVEDNJ9iJs2Zxte6JKcifdpMytmK0Pq+HTWHxxznr8QCZJyI0OnMN2KLBM2DLRgB764hd1tMH6ZJRvKsTZoKI2I59OrDyimAP7O6s6Ff85yuXkoWXJzbePsM+CFiF3AvkvCpsMrW2Hofbb+/iTnMOzfo9UXxBocvHy9A+HgV0xW9sR0vefIVUZZLzSggYPZzzG6okUwyagaN+50zcX9nS3jEMTi9qVQRBOX7gJ3VelW/ZpUcKUvPJiu/MUrPDSWmi1t2zb//WqL3045ptUK/20CuONypG0wfc7N/7/8GZV/UEOFIiyZfOAw4+7ldQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: VJbv5rv1uzmoURudaTAzP2d44R6wwOJcw9UncTp+ApajfoNqCBps/p538XCVQIJRiUbqQMHIOmwiua3/iM6JeDSu3ZIvzXRZRt36mA3t5WolQK50/dSAMhNN5lxH6VuC6CeTSpvlIoXCSmX5EPIj41FYtSiUQX2DGmc56TZnOYxc9lwrfU874c6opX2oolukteIO/+ejMdC3uGGHschh8TohwRLGjNMZZU2uHUKslR77qc2VCJUjfeUEP7smWxVgq01f137bXVMs1WiX7KAnn0163xT/P2BZWodOsR7sUgs4DlNt8N2EG47+E3EvCwLzkZ6Sj7gY6UEDSqagyJzfVsfJhy9IvNOil0ki2rHJ3FtEUe3AYQGL0coPjGTuMx3n5RQyoUPzv2D3v0B6X6hEFJaZ4nCGRfe8VBYN117yLBT0K/pqhS2cwLgisdqsM5lp+Mc+HXhnTGaHrd37Kos32RqpblrEcvMAhAXn9lxP8vN60IR0D1fNeD+09NI1+OjgULSqpwttJftjg5HDwVlvpkxc3z4NmkQ0APojIkgPa1/5S+4+PWMMEqZg9+3wZAPr4dPL7QXIrT+ey+v6pCm5envMmNX6hLRvmfdZUcZ/b0E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5f6737b-9549-44ea-11b9-08dee89ded64 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:52.6533 (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: aOAbSo3O0Bhwmhi08viTvoY87sk1dMJYIGFqSzEtbhzY4iZIGUGuu+PLmNKRE7xD0o0KBXsooS5sg4QsZnV5cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX5BX3dVykCY6P W0ELwl/E1Ne2GdI5FO8eSZkvHRGW78L0/zGsSllM4k41hvFu+gYECsAktGSUPqsjzsxRA/gKznQ XQk18cVqFEoqeqrUHvHkxegllPVSqHswqKMybiU9MEZ/PL84UFdMpN5Zp3IaWqVEslLiXtJQ5+p 9BGcZsOP2o5SyoTMkpjlZO5SsS9RMKtH8IyNeAdx/K6ernOgQXfybx0EWwbvc37TU1duhD2Qse8 AmMmOlbO/Zugr7FKoEATA9oL1SP5V9CIiTr6OhyOC3JSXCzNAD1RyVVC7U2/Yj0kSDdINSH3m2T j8qe+V9eGzsa/dXnSntXGdVbq6zvLikghpW7AEdLlBCdhT3iXnbgvxQFDlXyS9MCcoQznNzxAHg d7EwsoMdtCH2y2YdbXbmXuu8/BESD1PLO9eLU//eCKQdAQL/C+jpKWzZLTUsqfm5FayZuKsHUOj jLvCnFTjdGIugEN2IRQ== X-Proofpoint-GUID: qN23QEELbo5dRKZtpZHh4wAd6OjciaY8 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX7PKAauO/+kow IWIUreXrLiCqQIyDFYCFiQ6CrdNphWT6mm5SWMsZSX3H+MHxgcTsMaIlgfNrMvJekDeh7U8zXKk Kp3/IharKHDrevRuTEjvpIbVrIRfuWGR/zH7ybgSK2GS/PuCIuiX X-Authority-Analysis: v=2.4 cv=JrfBas4C c=1 sm=1 tr=0 ts=6a61e0b8 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=BqU2WV_vvsyTyxaotp0D:22 a=yPCof4ZbAAAA:8 a=Lb5UtHSxAhypNmDEWQsA:9 X-Proofpoint-ORIG-GUID: qN23QEELbo5dRKZtpZHh4wAd6OjciaY8 Content-Type: text/plain; charset="utf-8" Add code for path selection. NVMe ANA is abstracted into enum mpath_access_state. The motivation here is so that SCSI ALUA can be used. Callbacks .is_disabled and .is_optimized are added to get the path access state. Path selection modes round-robin, NUMA, and queue-depth are added, same as NVMe supports. NVMe has almost like-for-like equivalents here: - __mpath_find_path() -> __nvme_find_path() - mpath_find_path() -> nvme_find_path() and similar for all introduced callee functions. Functions mpath_set_iopolicy() and mpath_get_iopolicy() are added for setting default iopolicy. Signed-off-by: John Garry --- include/linux/multipath.h | 33 +++++ lib/multipath.c | 254 +++++++++++++++++++++++++++++++++++++- 2 files changed, 286 insertions(+), 1 deletion(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index ca8589d5cd8b2..6c75654c12f8f 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -7,13 +7,31 @@ =20 extern const struct block_device_operations mpath_ops; =20 +enum mpath_iopolicy_e { + MPATH_IOPOLICY_NUMA, + MPATH_IOPOLICY_RR, + MPATH_IOPOLICY_QD, +}; + +enum mpath_access_state { + MPATH_STATE_OPTIMIZED, + MPATH_STATE_NONOPTIMIZED, + MPATH_STATE_OTHER +}; + struct mpath_device { struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; + int numa_node; + atomic_t *nr_active; + enum mpath_access_state access_state; }; =20 struct mpath_head_template { + bool (*is_disabled)(struct mpath_device *); + bool (*is_optimized)(struct mpath_device *); + const struct attribute_group **device_groups; }; =20 #define MPATH_HEAD_DISK_LIVE 0 @@ -25,6 +43,7 @@ struct mpath_head { =20 refcount_t refcount; =20 + enum mpath_iopolicy_e *iopolicy; unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -44,6 +63,14 @@ static inline struct mpath_head *mpath_gendisk_to_head(s= truct gendisk *disk) return mpath_bd_device_to_head(disk_to_dev(disk)); } =20 +static inline enum mpath_iopolicy_e mpath_read_iopolicy( + struct mpath_head *mpath_head) +{ + return READ_ONCE(*mpath_head->iopolicy); +} +void mpath_synchronize(struct mpath_head *mpath_head); +int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy); +int mpath_get_iopolicy(char *buf, int iopolicy); int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); @@ -63,4 +90,10 @@ static inline bool is_mpath_disk(struct gendisk *disk) return false; #endif } + +static inline bool mpath_qd_iopolicy(enum mpath_iopolicy_e *iopolicy) +{ + return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; +} + #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index 916d01a285284..20bb8cb0ea956 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -6,8 +6,245 @@ #include #include =20 +static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head); + static struct workqueue_struct *mpath_wq; =20 +static const char * const mpath_iopolicy_names[] =3D { + [MPATH_IOPOLICY_NUMA] =3D "numa", + [MPATH_IOPOLICY_RR] =3D "round-robin", + [MPATH_IOPOLICY_QD] =3D "queue-depth", +}; + +static int mpath_iopolicy_parse(const char *str) +{ + return __sysfs_match_string(mpath_iopolicy_names, + ARRAY_SIZE(mpath_iopolicy_names), str); +} + +int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy) +{ + int policy; + + if (!str) + return -EINVAL; + policy =3D mpath_iopolicy_parse(str); + if (policy < 0) + return policy; + *iopolicy =3D policy; + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_set_iopolicy); + +int mpath_get_iopolicy(char *buf, int iopolicy) +{ + return sprintf(buf, "%s\n", mpath_iopolicy_names[iopolicy]); +} +EXPORT_SYMBOL_GPL(mpath_get_iopolicy); + + +void mpath_synchronize(struct mpath_head *mpath_head) +{ + synchronize_srcu(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_synchronize); + +static bool mpath_path_is_disabled(struct mpath_head *mpath_head, + struct mpath_device *mpath_device) +{ + return mpath_head->mpdt->is_disabled(mpath_device); +} + +static struct mpath_device *__mpath_find_path(struct mpath_head *mpath_hea= d, + int node) +{ + int found_distance =3D INT_MAX, fallback_distance =3D INT_MAX, distance; + struct mpath_device *found =3D NULL, *fallback =3D NULL, *mpath_device; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + + if (mpath_device->numa_node !=3D NUMA_NO_NODE && + (mpath_read_iopolicy(mpath_head) =3D=3D + MPATH_IOPOLICY_NUMA)) + distance =3D node_distance(node, + mpath_device->numa_node); + else + distance =3D LOCAL_DISTANCE; + + switch(mpath_device->access_state) { + case MPATH_STATE_OPTIMIZED: + if (distance < found_distance) { + found_distance =3D distance; + found =3D mpath_device; + } + break; + case MPATH_STATE_NONOPTIMIZED: + if (distance < fallback_distance) { + fallback_distance =3D distance; + fallback =3D mpath_device; + } + break; + default: + break; + } + } + + if (!found) + found =3D fallback; + + if (found) + rcu_assign_pointer(mpath_head->current_path[node], found); + + return found; +} + +static struct mpath_device *mpath_next_dev(struct mpath_head *mpath_head, + struct mpath_device *mpath_dev) +{ + mpath_dev =3D list_next_or_null_rcu(&mpath_head->dev_list, + &mpath_dev->siblings, struct mpath_device, + siblings); + + if (mpath_dev) + return mpath_dev; + return list_first_or_null_rcu(&mpath_head->dev_list, + struct mpath_device, siblings); +} + +static struct mpath_device *mpath_round_robin_path( + struct mpath_head *mpath_head) +{ + struct mpath_device *mpath_device, *found =3D NULL; + int node =3D numa_node_id(); + enum mpath_access_state access_state_old; + struct mpath_device *old =3D + srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + + if (unlikely(!old)) + return __mpath_find_path(mpath_head, node); + + if (list_is_singular(&mpath_head->dev_list)) { + if (mpath_path_is_disabled(mpath_head, old)) + return NULL; + return old; + } + + for (mpath_device =3D mpath_next_dev(mpath_head, old); + mpath_device && mpath_device !=3D old; + mpath_device =3D mpath_next_dev(mpath_head, mpath_device)) { + + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + if (mpath_device->access_state =3D=3D MPATH_STATE_OPTIMIZED) { + found =3D mpath_device; + goto out; + } + if (mpath_device->access_state =3D=3D MPATH_STATE_NONOPTIMIZED) + found =3D mpath_device; + } + + /* + * The loop above skips the current path for round-robin semantics. + * Fall back to the current path if either: + * - no other optimized path found and current is optimized, + * - no other usable path found and current is usable. + */ + access_state_old =3D old->access_state; + if (!mpath_path_is_disabled(mpath_head, old) && + (access_state_old =3D=3D MPATH_STATE_OPTIMIZED || + (!found && access_state_old =3D=3D MPATH_STATE_NONOPTIMIZED))) + return old; + + if (!found) + return NULL; +out: + rcu_assign_pointer(mpath_head->current_path[node], found); + + return found; +} + +static struct mpath_device *mpath_queue_depth_path( + struct mpath_head *mpath_head) +{ + struct mpath_device *best_opt =3D NULL, *mpath_device; + struct mpath_device *best_nonopt =3D NULL; + unsigned int min_depth_opt =3D UINT_MAX, min_depth_nonopt =3D UINT_MAX; + unsigned int depth; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + + depth =3D atomic_read(mpath_device->nr_active); + + switch (mpath_device->access_state) { + case MPATH_STATE_OPTIMIZED: + if (depth < min_depth_opt) { + min_depth_opt =3D depth; + best_opt =3D mpath_device; + } + break; + case MPATH_STATE_NONOPTIMIZED: + if (depth < min_depth_nonopt) { + min_depth_nonopt =3D depth; + best_nonopt =3D mpath_device; + } + break; + default: + break; + } + + if (min_depth_opt =3D=3D 0) + return best_opt; + } + + return best_opt ? best_opt : best_nonopt; +} + +static inline bool mpath_path_is_optimized(struct mpath_head *mpath_head, + struct mpath_device *mpath_device) +{ + return mpath_head->mpdt->is_optimized(mpath_device); +} + +static struct mpath_device *mpath_numa_path(struct mpath_head *mpath_head) +{ + int node =3D numa_node_id(); + struct mpath_device *mpath_device; + + mpath_device =3D srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + if (unlikely(!mpath_device)) + return __mpath_find_path(mpath_head, node); + if (unlikely(mpath_path_is_disabled(mpath_head, mpath_device))) + return __mpath_find_path(mpath_head, node); + if (unlikely(!mpath_path_is_optimized(mpath_head, mpath_device))) + return __mpath_find_path(mpath_head, node); + return mpath_device; +} + +__maybe_unused +static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head) +{ + enum mpath_iopolicy_e iopolicy =3D mpath_read_iopolicy(mpath_head); + + switch (iopolicy) { + case MPATH_IOPOLICY_QD: + return mpath_queue_depth_path(mpath_head); + case MPATH_IOPOLICY_RR: + return mpath_round_robin_path(mpath_head); + default: + return mpath_numa_path(mpath_head); + } +} + int mpath_get_head(struct mpath_head *mpath_head) { if (!refcount_inc_not_zero(&mpath_head->refcount)) @@ -75,6 +312,7 @@ void mpath_remove_disk(struct mpath_head *mpath_head) if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { struct gendisk *disk =3D mpath_head->disk; =20 + mpath_synchronize(mpath_head); del_gendisk(disk); } } @@ -94,7 +332,8 @@ EXPORT_SYMBOL_GPL(mpath_put_disk); int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct queue_limits *lim, int numa_node) { - if (!mpath_head->disk_groups || !mpath_head->parent) + if (!mpath_head->disk_groups || !mpath_head->parent || + !mpath_head->iopolicy) return -EINVAL; =20 mpath_head->disk =3D blk_alloc_disk(lim, numa_node); @@ -128,6 +367,19 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } queue_work(mpath_wq, &mpath_head->partition_scan_work); } + + mutex_lock(&mpath_head->lock); + if (mpath_path_is_optimized(mpath_head, mpath_device)) { + int node, srcu_idx; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + for_each_online_node(node) + __mpath_find_path(mpath_head, node); + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + } + mutex_unlock(&mpath_head->lock); + + mpath_synchronize(mpath_head); } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 421DD42BE87; Thu, 23 Jul 2026 09:37:36 +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=1784799457; cv=fail; b=WSJ3bFRXL7ie2GkCP1vc8TNSav2sUI4M+aIWpEau2CZvDEFF0PcIZ5F0vTrrCbfKwJs34UMOz4IVhd0pLDWKh0njSWZT+j6S3kTFxxJPAoWHMdbpDelF/dxDdt9IIzuEMnueSNtsEr+hRBOsTBi8JtMdXiTXkF1s1hAqJSpw3wE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799457; c=relaxed/simple; bh=2ODpcGpUIdjitLul2c8993G9fVZ55qxZW5ErkKavLfk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=m0E09vJePzb3Cj4epgGTANQ7EP9sbT4+sz7uXg1HY4ce07Ti08w1Pt83FNBICj75dwRnbtfdBTIP5Kl7HsL6IfeEmkhIO0s5l09vOUFsrxTFTDFgX+ZY7mDQfM35CBiWiIpIVeu7selXIh5/Dkda0Kv15PEFWq6eWIhiQ50QJDM= 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=XgD2ukQa; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gijLbQAW; 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="XgD2ukQa"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gijLbQAW" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N3rdkI106353; Thu, 23 Jul 2026 09:37:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=Xm8jpgEQDY+ahit0RxV+hSdUY5Nfp44OiHJp7CVCzDk=; b= XgD2ukQayuOYhcQPUib4aIGFOVoqSyejIPe/8MWwCqJ/xtr40XZ2BOwDJckfIpF7 chrffJr3qF+vYONdkosXj0S9eFJFiksc3l+1E9EZf/ZTsNhnZ4m1FAnyFPvpbwRf DIKmmueY1GVO/8SKQOSuy20iG7qwVxtSFsge9hsKpQiVmkrapBVSJ6NQMYH77kDF w8F6aZNJKoJtK/1A2osSx2tJXTPhdF+DbLGQ/QJy29AxroMe3D89Ad63oh7zFKNF fbzLA1dgOsSiGX80Ia9daZt0ntzRay8WZb3C8gL3BBwTZToFJ/pFY3Y+FiUT+zMX DIPj2DjjERNpvpNjqjs+lA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1kpxn0b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:00 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVPS010588; Thu, 23 Jul 2026 09:36:59 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011004.outbound.protection.outlook.com [52.101.57.4]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxsdebf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:36:59 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lhZL3LYAc8uZW70ZO4XRalHlK4d3+RyjnyZzrHh6Khy8+9668iP/tw/Fr0FSeH1ighsUr7RZuEAABzouscXsGct/ncYa9RtUCqhVFNfyuWqy/TlNnOk6idOc0ray8S5oERlMFMi5YoW9oscPcz20V5K36yOpkNp2uWlXrT+D08k2RSgW7ThZBoBM9QTDKBRkjAYPjCxT+MJlV69tKl8wfsJeFaY//qBEVf4kHea361SETd0d2b8FCCFXXmjFBu+7BABgJUEwOuETNMp4fxm5klybjx5CVJhyQHuilcB1EJPqlJ3HwycU7vovQIIr2Yrwl9cbrR3fpbwztI7AW+5L0w== 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=Xm8jpgEQDY+ahit0RxV+hSdUY5Nfp44OiHJp7CVCzDk=; b=D/DwHIVopK29CLmSl6UfUHJKeeifqVkue8gwxVCnlA0noRSEKB+ggPXNlzvJ+eSrXd1qCf2fZKv0WhwEUgfOr97osOyIScOYTodSVBx13FiiQNHojigCpmzmBSOMYFa29wO72bbGZRG8Ui0qQj0yKuCBZ7TjNqe3Tm5E1J/99ydfQA/6gKqkw2Y34jCRnZ5XdCNVGqNo263CpPWfGWL5RBDV03CHmqxjP2ASkYRy7il/dB1SeWFZ47Ds/712F17D/ZxfpPqPs5GajUoExyLvNnIkXsa28c9aR96PSYzGcCqN+mAIVQpKmFrovcMP9cJ+HUYhOoA9qURh3EYMgcRMBA== 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=Xm8jpgEQDY+ahit0RxV+hSdUY5Nfp44OiHJp7CVCzDk=; b=gijLbQAWGZkArMx7pNwozAD+RKDc9MQBWi/QxTccBSKcw/a/BrcEq2Z2BmSlwlwsjxRzZnvbQfbvLIhS42brOYQP4cF7ays6ai/qP7pCCWUh52WCelxy3f7VxMnNKnZjt6s8rnXAaVDHYYyfMDfVjNGlAkre1CUHU3e5sC1x9hE= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:54 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:54 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 04/28] libmultipath: Add bio handling Date: Thu, 23 Jul 2026 09:36:02 +0000 Message-ID: <20260723093627.2327456-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: DS1PR03CA0021.namprd03.prod.outlook.com (2603:10b6:8:233::8) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a41265b-b9d6-4cfb-abe3-08dee89dee69 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: 0L/O6SfPLMA9c502n/9i4kfykToDrVVkHdibZof+nJF1o8H1XIfHgeEM5d6zAGsBX+1hBzo4zjiXzqDRmPVASGMNDgDtkjxjq/sg6Yp5TLtUzyy//qkvbjd1GF5mTuu65UjwVFB6xdGp/+5kzqBaM/wXIpD5PDW82+VHAHpgAsQ/S+vkbvBYw4vDY8txzW4tXsQIxuzkDSik/Kw8c3Eg0cAiKgIoF5t9xsq83a/X9RylhlSHI6rJkwLtS3cFMsCvMYAkVWOLDsLunOJp6rISYRyC3IMdu7HHSKXgqyIrAzCPDiUweGLIPOzD09C/NCM4nzhT5nYbeSLcPF03lcIc8OYBZHxL/ow5gaCe7yRNM54Vh9ROhVbYLnI/5cn4PPnelWbKbdk9WBTBHzfJyYW2MSQVhWYgq4oc5Y68DTe+GT/zYZx3pZ58WplQrr1FKhAo20koqAd+PC7hXeXRmeBEs86GJ56j6qrwa2KvDkonV//N3whWWxmdfXr67FbhJtz7A5CD2aU9KZHmBaUf62YHX+h6Pw0Qp7SDllvATaZjjLizUyNOgqV+mbJid2WFQx2ESkBMmkp4wzdlfo+8e1Wn2uSGmKxvbdmxk79y09fuYdQf1dV1WvAPblnUbXaT1XncLCP50iiYHUk5H4kstTtSUoGsuPxqBNdu5AXF7aoqhbw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fhpzi3Shd6yyEvFPr3Mdaf+Vo8sG6TFdVntQsL/aUtT5OyHOWUZz7hati357?= =?us-ascii?Q?a1kU7+kkb/Fkvlmp3HFD+UZkhLVutYOEOZVaH48/77fxMOt3qkDx8hORWehy?= =?us-ascii?Q?zQ9tPZIpAJEWLP5sNhDhf58KaeKTaP5k8pvDk+qKwffS3bz4wMLtWou7R5fu?= =?us-ascii?Q?4t0H5ABTPzy5FPz/Adk5V9+elXpFF6+kPWUD15jhj68980FFiINalFuhkOkl?= =?us-ascii?Q?A61/WQHqC65QwJpDY7o/LZB+FnLN9CKdN6eRbD2yjxhc+WdmmKLaJ7hRLHwe?= =?us-ascii?Q?jRZ360kfXDRmY1ojSu2TLdt5ZsooZSJ84y8JKIgtCs9RyJRaTNBYs+5WSFqo?= =?us-ascii?Q?LGCZ8HVw1NAFFHoisup058F6T65Moe076chUWdckBwtVsTKlq5NNpUuCvngm?= =?us-ascii?Q?/BueGKdEh/VWlmut/xIvKoedt09M3nQBR5qXfDeID4ilheTeG0OhjYU2G/iW?= =?us-ascii?Q?Jc2AniYDitlmSdHxzYmfHfg53jtkcSGT/UTvf1xqCkfjIEP3pcFSOiuRF7Wa?= =?us-ascii?Q?rPaAPWw2ikYoJsqu6621qNAesce0PcwbWyOSi7yPRQ9d7OqUaQJ8wGH2u/yy?= =?us-ascii?Q?Tm81x6KjlQpIBptAmi1fS/gOFIeIuWU6TwnLLSyfK50L9mUoodKXJKt7J0BU?= =?us-ascii?Q?JdM6uU4HYqYFoKWR2nuZFHLfVU7glriZwmIA8PaA+bBCYkcuZOc4yTQUm20M?= =?us-ascii?Q?maMQb6LFbAEgUSiSd60XnsLGD08AkG2bxsL9WJ6B3eoCC5NcUft4X369cFOo?= =?us-ascii?Q?oJ1ZL8lRCEMsiylVprhp6sAvQTFtXjNt44L3WkIn1sS1QHyzKx6na841Ntrm?= =?us-ascii?Q?1ZQs0SlE4WlutlXXE3vWs2XyyTr6AnoRCy4liIokzxIRIxg88Oq8mTMwXwLn?= =?us-ascii?Q?Ixf/MtEaTqHbL7fW3ZUuEneBebh2Hrm7nG2qAMq2euJkw3tANCkCV/YUuaBE?= =?us-ascii?Q?H4401cphnaIs99tp6h2aJ5OnWoGZUmDKMrOtMQFJRADQS6jZrsFoiSS/kLsm?= =?us-ascii?Q?WRZvhtaSzDe46qoOaWMrf5MUV1IDAX6Vw/sT7k930uwgOHBNQeFVvXEStvdY?= =?us-ascii?Q?9PfDEhdOk2Zmn/TEUO+8w7jp1azYDW5GYcXkwzR2d5bkjPJPdgS2sjucrkBx?= =?us-ascii?Q?9TbWP7+Q1CI7Q5NMC24wqo7/E6FDF0QwZRde+fKP/9+FtwhgFijx8pute0L2?= =?us-ascii?Q?+mM5cf018QHb9UKcDLLnReJYwhRNXsRR5QxTinxjrpwv5u93AJhmqmg54AAj?= =?us-ascii?Q?GsgvZh+Y+tYpFHc+XpgKALHlKRIG10TAogezDXS5uoT8YKLDL+lLubdSF1GQ?= =?us-ascii?Q?bKTBPvZvSOuCkr8twRJCNotJCFgqzxQliY4ZUuqsL5veo1cg5WaliombruAg?= =?us-ascii?Q?qVTNA1sd4RUSa5F4zc+8617kyCa61gMqGUz7oDOrcxiPqF0Nsc1Lp243GpgB?= =?us-ascii?Q?8ecTXNleLOQGVRqMOC+I9R1sczqpoXcdR/BlmWrwgcghGaktH3C0btqrvr/T?= =?us-ascii?Q?2L4y1dSgFTqWVPq3q0h1y7yTTJb57sa7w9oEzfX3QoH36ODEo85f3cc7ngJc?= =?us-ascii?Q?FwIhweD5ykoRfJh95zunmFVxM5IJSr1GTK6awWQrsQjVr5w6BpsG+G5kJ4AT?= =?us-ascii?Q?sdwB4TT1NjlLrgoPmIKjwX8Sk353t+a8RtE8Ghq2tHdxDm3laS6UlinNb8wR?= =?us-ascii?Q?Hln6DW7olwzEAH+DDHm1IN7kYn5bNheW88MaeRCLK5+vKhtbsG7qSb3OMj7m?= =?us-ascii?Q?QU+5AM97gA=3D=3D?= X-Exchange-RoutingPolicyChecked: HTptNX3hfNB9e2FTJLPd6ZEJ7dh7bTS+baTMG52B09c1ehn/n0D3W6HuQh3Ghlb6KW6HJmrxFuYIuQn5WfLGCVY/TZlteYrR6nTfpeW7oy2CHfPWG1ld3c2iCne98zigDwiOJhWdiKd4bYJgFlknsHQtUZ4MPdSJNZw30dqEW7UoOvwEPhFFVdbe3Kjza1i4NwfR32SXewxd3I94dtM1JLd/Mp/nQcXiENYkYGA8ZZzogikcilRbULDtTd7gAD+iZNppf+8EdF7T3SogxEoa8GZn5yZV+rcMg7zAzIUxc8qQPhT6JpEwbhLvOYRtD8F+ffnuUqbKANc2MsqLBn9GiQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: U0Oq8zMTK0XjeRU6e6+BOBbi8t9rTK4a4XNQb2g26zgoWatwp6JnrUhjvVLttm74g6rO7FqHnWNaF49yQEvFiKz4Axf8X/AsIaWqB2ocQTPageujn3Dn2bBGAz53LuOU/+Fr8nnwW6EdwIjWJAMBK4lEuLkh7oJeMGnsVIvXO8lOf4bNqECDTcwQud51eRIODZg1w2vmTygqMNhnlicWGfnO+wH6ynmwj4A/LiBtlgHOqYuRTtnBlt0X4P8iIZQEaO5vBMW0t3u7sIOFUo/FKPUNnSQTefFAqGQFNKfdelhhp7ZJeJqJuIrIw4lbR1oLh7LpQ9fkW0F7lM/BrnitqWqBu5o4Xl1yOR8x3odxjL0TMutSJDrRJwhd6XaKgt51jrJ0RcuQCVkJBYrntUe28iaScsalgQFQrKHDXZpCZdUxS68KyhzwgFm8SYJxXr+2IEHKoSohtXPvowCXrSshLziIHXxwkSS1kUiSdRPHGvEw4k9qViQ2HLeK7Z1fWZh17LCs73autrkf0sGObnVOFCd4Ka5xeApZsmh1DFe83ymmdKVnuQeV1V0csMlvQpJtY9P8kCrmqQVIe5HeF/j4W1XHoDfxIoVFjWI9rHOV44U= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a41265b-b9d6-4cfb-abe3-08dee89dee69 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:54.2614 (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: 2Z0MEjhlGyC7RSXi3g9yWqHsKYwWufgPWDrNGeHD2GPX38EN7J1dJCQ01ci8J2yTL2rgSFLQzPlNhWk9ejgX4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX7FM7m2hu6xX8 I8MhF2VygqblR/dBpB0gw2+npdqGwIhCNNwfvnBI/6sFaAijSGOVcewj7Hg04PzTwiTuufEkJaE AvDuoqcH+xd1IK8gkgDR4QOBbviGkuoSvPBP6bUR8T9R7vWdNni7 X-Authority-Analysis: v=2.4 cv=IKYyzAvG c=1 sm=1 tr=0 ts=6a61e0bc b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=0Q2gd2vOsnR98QmcnEwA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12115 X-Proofpoint-ORIG-GUID: 3EjK33eILv9ke1NzH2o6ODuY1JGjfVAD X-Proofpoint-GUID: 3EjK33eILv9ke1NzH2o6ODuY1JGjfVAD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXw0hdvKIoewGN KoOYvdGZyW64Jw+X130esUs8YueWX2Iybr+xrLtxjNzemNJoSegu7EFqAGU4ZgeAWvsCbiG4zT9 Ej+ef1ifF3kCUr9SIguQtQgAeorfu7brT4YApavxJS4lhaDVL27SU/lv5+WMdJjyPL03CVBWnLU cRUO7Fjam3Sl2aCXaPEM511+EDxR2Bm9y6WzxJP9XNHpwSi4eeMT/nMTfZriu1F8j9OW0tbsq/Y dCQMkQpH+s63YSd2kWxokrz0WNhxwmCKBlh14BQkgP1sD47Q+5x7cN8r60L84TiHbxd3EWcnOme gch5cucLYp6gXl62X+jEGI163S3au2HOg4vpw5R8K+d8V1Sxeesmg+Zg58TgwHZXcaCYUeR+g2M raz8Rkyh8Z9kJw0ZZw4CZKlehJrYXCxHyt+Rp+MxvUPU8pRM0J/5VyReYazird4nkuE4qr/Quj0 olqKyRpIdR/z0el9QGaJQ/BpjYR9FN+wW8DaCbQ8= Content-Type: text/plain; charset="utf-8" Add support to submit a bio per-path. In addition, for failover, add support to requeue a failed bio. NVMe has almost like-for-like equivalents here: - nvme_available_path() -> mpath_available_path() - nvme_requeue_work() -> mpath_requeue_work() - nvme_ns_head_submit_bio() -> mpath_bdev_submit_bio() For failover, a driver may want to re-submit a bio, so add support to clone a bio prior to submission. A bio which is submitted to a per-path device has flag REQ_MPATH set, same as what is done for NVMe with REQ_NVME_MPATH. Signed-off-by: John Garry --- include/linux/multipath.h | 22 ++++++++ lib/multipath.c | 108 +++++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 6c75654c12f8f..57d13eb1450cd 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -3,6 +3,7 @@ #define _LIBMULTIPATH_H =20 #include +#include #include =20 extern const struct block_device_operations mpath_ops; @@ -29,8 +30,10 @@ struct mpath_device { }; =20 struct mpath_head_template { + bool (*available_path)(struct mpath_device *); bool (*is_disabled)(struct mpath_device *); bool (*is_optimized)(struct mpath_device *); + struct bio *(*clone_bio)(struct bio *); const struct attribute_group **device_groups; }; =20 @@ -44,6 +47,14 @@ struct mpath_head { refcount_t refcount; =20 enum mpath_iopolicy_e *iopolicy; + + struct bio_list requeue_list; /* list for requeing bio */ + spinlock_t requeue_lock; + struct work_struct requeue_work; /* work struct for requeue */ + + atomic_long_t requeue_no_usable_path_cnt; + atomic_long_t fail_no_avail_path_cnt; + unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -53,6 +64,13 @@ struct mpath_head { struct mpath_device __rcu *current_path[MAX_NUMNODES]; }; =20 +#define REQ_MPATH REQ_DRV + +static inline bool is_mpath_request(struct request *req) +{ + return req->cmd_flags & REQ_MPATH; +} + static inline struct mpath_head *mpath_bd_device_to_head(struct device *de= v) { return dev_get_drvdata(dev); @@ -96,4 +114,8 @@ static inline bool mpath_qd_iopolicy(enum mpath_iopolicy= _e *iopolicy) return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; } =20 +static inline void mpath_schedule_requeue_work(struct mpath_head *mpath_he= ad) +{ + kblockd_schedule_work(&mpath_head->requeue_work); +} #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index 20bb8cb0ea956..448d879abb354 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -5,6 +5,7 @@ */ #include #include +#include =20 static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head); =20 @@ -43,7 +44,6 @@ int mpath_get_iopolicy(char *buf, int iopolicy) } EXPORT_SYMBOL_GPL(mpath_get_iopolicy); =20 - void mpath_synchronize(struct mpath_head *mpath_head) { synchronize_srcu(&mpath_head->srcu); @@ -230,7 +230,6 @@ static struct mpath_device *mpath_numa_path(struct mpat= h_head *mpath_head) return mpath_device; } =20 -__maybe_unused static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head) { enum mpath_iopolicy_e iopolicy =3D mpath_read_iopolicy(mpath_head); @@ -245,6 +244,81 @@ static struct mpath_device *mpath_find_path(struct mpa= th_head *mpath_head) } } =20 +static bool mpath_available_path(struct mpath_head *mpath_head) +{ + struct mpath_device *mpath_device; + + if (!test_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) + return false; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (mpath_head->mpdt->available_path(mpath_device)) + return true; + } + + return false; +} + +static void mpath_bdev_submit_bio(struct bio *bio) +{ + struct mpath_head *mpath_head =3D bio->bi_bdev->bd_disk->private_data; + struct device *dev =3D mpath_head->parent; + struct mpath_device *mpath_device; + int srcu_idx; + + /* + * The mpath_device might be going away and the bio might be moved to a + * different queue in failover, so we need to use the bio_split + * pool from the original queue to allocate the bvecs from. + */ + bio =3D bio_split_to_limits(bio); + if (!bio) + return; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + + if (likely(mpath_device)) { + if (mpath_head->mpdt->clone_bio) { + struct bio *orig =3D bio; + + bio =3D mpath_head->mpdt->clone_bio(bio); + if (!bio) { + bio_io_error(orig); + goto out; + } + } + + bio_set_dev(bio, mpath_device->disk->part0); + /* + * Use BIO_REMAPPED to skip bio_check_eod() when this bio + * enters submit_bio_noacct() for the per-path device. The EOD + * check already passed on the multipath head. + */ + bio_set_flag(bio, BIO_REMAPPED); + bio->bi_opf |=3D REQ_MPATH; + trace_block_bio_remap(bio, disk_devt(mpath_head->disk), + bio->bi_iter.bi_sector); + submit_bio_noacct(bio); + } else if (mpath_available_path(mpath_head)) { + dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n"); + + spin_lock_irq(&mpath_head->requeue_lock); + bio_list_add(&mpath_head->requeue_list, bio); + spin_unlock_irq(&mpath_head->requeue_lock); + atomic_long_inc(&mpath_head->requeue_no_usable_path_cnt); + } else { + dev_warn_ratelimited(dev, "no available path - failing I/O\n"); + + bio_io_error(bio); + atomic_long_inc(&mpath_head->fail_no_avail_path_cnt); + } + +out: + srcu_read_unlock(&mpath_head->srcu, srcu_idx); +} + int mpath_get_head(struct mpath_head *mpath_head) { if (!refcount_inc_not_zero(&mpath_head->refcount)) @@ -290,6 +364,7 @@ const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, .release =3D mpath_bdev_release, + .submit_bio =3D mpath_bdev_submit_bio, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 @@ -307,12 +382,35 @@ static void multipath_partition_scan_work(struct work= _struct *work) mutex_unlock(&mpath_head->disk->open_mutex); } =20 +static void mpath_requeue_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D + container_of(work, struct mpath_head, requeue_work); + struct bio *bio, *next; + + spin_lock_irq(&mpath_head->requeue_lock); + next =3D bio_list_get(&mpath_head->requeue_list); + spin_unlock_irq(&mpath_head->requeue_lock); + + while ((bio =3D next) !=3D NULL) { + next =3D bio->bi_next; + bio->bi_next =3D NULL; + submit_bio_noacct(bio); + } +} + void mpath_remove_disk(struct mpath_head *mpath_head) { if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { struct gendisk *disk =3D mpath_head->disk; =20 + /* + * requeue I/O after MPATH_HEAD_DISK_LIVE has been cleared + * to allow multipath to fail all I/O. + */ mpath_synchronize(mpath_head); + mpath_schedule_requeue_work(mpath_head); + del_gendisk(disk); } } @@ -324,6 +422,8 @@ void mpath_put_disk(struct mpath_head *mpath_head) return; =20 /* make sure all pending bios are cleaned up */ + kblockd_schedule_work(&mpath_head->requeue_work); + flush_work(&mpath_head->requeue_work); flush_work(&mpath_head->partition_scan_work); put_disk(mpath_head->disk); } @@ -380,6 +480,7 @@ void mpath_device_set_live(struct mpath_device *mpath_d= evice) mutex_unlock(&mpath_head->lock); =20 mpath_synchronize(mpath_head); + mpath_schedule_requeue_work(mpath_head); } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 @@ -392,6 +493,9 @@ int mpath_head_init(struct mpath_head *mpath_head) =20 INIT_WORK(&mpath_head->partition_scan_work, multipath_partition_scan_work); + INIT_WORK(&mpath_head->requeue_work, mpath_requeue_work); + spin_lock_init(&mpath_head->requeue_lock); + bio_list_init(&mpath_head->requeue_list); =20 return init_srcu_struct(&mpath_head->srcu); } --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 C32BB42A7BB; Thu, 23 Jul 2026 09:37:19 +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=1784799442; cv=fail; b=Fb2R/20Xfk3RjVltTXgVSivdzVlpMq9UihOBY5LZ5+AL1xps8mivP1vGpCxPNpJgcxXBwLyjLuO0N0M/+PmxevMOnegz40HXXQvb1WYaucCM4+i93QmSpnCxgyo+vw0iXbItTu59qFHS/vEz4slnSgzs/2cRsFZ43EQWVSESH78= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799442; c=relaxed/simple; bh=r3Nxf6gsA9LexIjLLAn1b4FG0bDpxXQzl5ekE53YTaA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oqmIwtaklhx8nWSBrV/xlhb/Zk7YkLfuJKbyMCo1ATkbGfN7XFFo1fMavFFuFQEDr+m9mVEFvZyBX0jq1orA7veITwQSYUev6iGvgZQlESdcuBoj8Rbiq79H+IxsUKoC5MEjiVFyiokiIiJSzgPhIblfr7HdyuyQYMLcYeNjLao= 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=Hl5yFDQL; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=RwuuXy4X; 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="Hl5yFDQL"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="RwuuXy4X" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N0EfTN3817379; Thu, 23 Jul 2026 09:37:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=6GgPaKhcQPSVQyzazNduRj+lv5C9sJGgmpbRHdwSUwY=; b= Hl5yFDQLLVQGx3IzkwZyWMZZw5NaTXuLOP/oO6W6WLWzwBmL1XNt/YB6KkU4ohxv AILf13XFyEeTvNVzEbjxwE3QAkYteii9M4UeFFKUsz5H3ef8ei7KCVhk1IfmDJk5 t0+j2ZLX2sL+wnH6hvNUN0q/4Fb9uaEn2dEEFbZICxj4DY1zXkg4ZO6Ot2bhWELj K2QDzsoQYmmbZRBSTTg4+88j0+OVOKA7LCS0anVx6HYT+l50vT5fJWJjd5i6aIwF Uj0eMa0J1JcUOvaBdOwlQfWMDGd7bST6jHm09JUfS3WqoTNXznwdByzsA3L786T0 /X5GzHFQBxdi31JRhsft9w== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1mv6nac-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:00 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVPT010588; Thu, 23 Jul 2026 09:37:00 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011004.outbound.protection.outlook.com [52.101.57.4]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxsdebf-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:00 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KgBSA2KeUPNnIju8GcTcRPkik3JICkaficTLODr9+DH1g7HRSCOxAyUomNmzuZTMYln38QhWRc+7GgX2RQ5IMakewYVm0/lNWLkabs5BEpQKak/P0Q7kl5ZK/si6xmsVINFSg1I6879EWq1hKlEWCXHe78BQwAhN3cXd+y73B15fY6Jzrn6HtMch7+T657OkhhLpCzeZu14IURJeT+ZVU4RgGaUsD2T1o01aalixXCR0kKBOdUw8y+1jP4JUF9EQUeqs76cw41Vl5MzpQ3mcxjnN0kcq5fCE7MSEn9BmAw5J4jVN8Zm92YqPWgpEkK0wcaxdIn0njcuuYZE1lx8g/w== 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=6GgPaKhcQPSVQyzazNduRj+lv5C9sJGgmpbRHdwSUwY=; b=k31Hm5PwrPsadylhy13ogKB2fZLO8D0VSzNd18ZopBBYKnD/eIPTVCm3SFFw1Qw1/9vfepOEKa6eLuV3T/lwDG+mbICEKnRjViIlOYgELFbGwvEYBednB5k3u6GGCMZN58Ag043F99Z+KvLgcygX2oycSF/krsokoSM6ykH6A5iGrAoSc6d9lOFRxXpsGab+zNZra8lQWJT1o2aVBOoTRv6olzNUrJ9A77FjS606TkdPu7QQpNLLAk7Fg59hShJaeRrQSojwsjddEbcvtlPV8/4R+Fn0s8JwgPb5c440uTWTtjVhXS8jg9NsYdx2BxxaiWY7acyRRJ2xWhPd9OADzg== 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=6GgPaKhcQPSVQyzazNduRj+lv5C9sJGgmpbRHdwSUwY=; b=RwuuXy4X9HM2wJ5CMw73Mw13TfIVAk4wMk28zgulhMATAOOMLF8uTZRjMbVxBBIAfCuaz/qfXJ5HgQxsiWx1m8rRHOI/BDj2zPd4ij4XJYdUIEri9PxzjQkmlOhhjbMEAC7+J9Le4yVkdPcy4ynnQz4yV2JfXjEe8Gz5J5imPHc= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:56 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:56 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 05/28] libmultipath: Add support for mpath_device management Date: Thu, 23 Jul 2026 09:36:03 +0000 Message-ID: <20260723093627.2327456-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR16CA0017.namprd16.prod.outlook.com (2603:10b6:610:50::27) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f7d9cd7-a583-4285-32c0-08dee89def54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: cRP6M5qi2UisjDJ1LtwmUkPpcongqzLf+2fFzMbvzNEU5/xgtUjnWH+4wdPttd3QLs+Iq8s8CCNUybCRXaf+N7UgQElFjH4U6EKG+V9fBOp3XEycm71Ll//s8IgbxwxIyHnKO0IMmb7ujhaX3UcZeeiBYg92NrDi/gLuxG0sVEZuM/aFQYlOqI0+7qemALFaZ7Ucet9LVNIXhlvjtFsuKk0z5hZ1yw/+dE4iDtFdf6xd48DzrAvcKoejNRj+fHBhyGg0kB+LwJ6VFam/WgvYYC3k+k0FrMtMdaUv8CfBmZKQ6wa8ACGgUFKov4u26bZjFi8l/FkFyb/BIpgXmSeNylid/qCXQhDYAJV2OJNwF+I2Z2ojjVwxWc/NOfgPuJ+hlKnYrjI1joWYWV+5Ti6oWDjcccc/Cs8oyJ1guFoRHIiOH7s0U2rgzg/ZAkFqsNIRDKITcWIJMj+IxOo0V6w1aF7UA5dN6CJJrAoim9tGWFaXKjnvaxtV0d5JPalHw9MsYiU0QW8I8E5J0x1I31S4/fhaKjh06uwRLnT7jE7mUly2i2hyVFs3zzSo1TkyuiafC2Tzr+Pg66IsmfREz6cN7JL+oKxylEgU+XNdmXdsPVvXuzNZFx0X234Z18l05dSE4XCF0NiVISWbBvAjvi2t7c71VAqZvYWE9NbLQwAO7Yg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ctBE7xLFMzSJLEVkqAPzWk95q3fUIfm954j7oPQi32zQ30n5GkqaK07jLlOQ?= =?us-ascii?Q?/EiTAbFT24ISWMpAP6cWcEpsI3K8E6jLiLbspvAku+eaAJpLVKRNDSoVahxs?= =?us-ascii?Q?QTWbFmQyrMPCV+ms9Rfn3auv1iz60VGTyVJY9s9bttY+n0ZyxeQQ4uDqF84s?= =?us-ascii?Q?fz7LCuqboVG1/lqPi4Y43mCyL9nm7VInytcaQegUPDhTXetsWEtdjYgKD7dV?= =?us-ascii?Q?pXz6QnmVPLg3GwvBIZutlHlQV1kiI0cRAsowGkcPrfMA4yby3VdfeVsgNgIy?= =?us-ascii?Q?ScYqgyNiDRi/hvRrpKHAA5EDsXwL8PSGBG3H17US6/puXrmKopCy4dTv5jsC?= =?us-ascii?Q?gmg0m0D0oLtYRbVJowhfdkcj8v0D1zITOFqyq2+oCtF5PPnsoOeN0w2ax4cU?= =?us-ascii?Q?FA0pgcyDFN7KcxWAMOzqSUV5hKzCpeOHPy4E7JXo9Jl0JxbEqq7PjErW5l0B?= =?us-ascii?Q?4eg93VcmH9Oza/xpT/Oi+z16IHyXRVzoZJUHqf+MNH5X3xMm8EsHNNaNh69e?= =?us-ascii?Q?zM4QJil0jmZzZ1iN6apC4L14vQHG7yjYXSnGzDbfBfzetRDQAJNW0oSHlTbM?= =?us-ascii?Q?sswEcVTft1CHaaNUwolMayQOpIbvKgRUghbtmi+zybjDIslqkpC4b05aZfsF?= =?us-ascii?Q?WtdP3ZNo4SghfCrT4IgjuvyXeJl+CEPAK5FjaBYr6Q9TE+YcDmJdqLKBvi21?= =?us-ascii?Q?kG7vuhiSMXLM3IwM0LOptqV+JZuw7RHFKBKmRcQbxtPgY7OkT5sJDcCBeqSj?= =?us-ascii?Q?O1Ix9NNiGviDmjL2gU8bDXqX6ZcU1tQGqzIbFPkuGpH1z8/3PP6donE3Qt2L?= =?us-ascii?Q?TRDvza217LfyGsH/ikBZ7ScAgZg177A6lUw9bDzc1GentzOugdatGalG2A2+?= =?us-ascii?Q?/6XqvYFjWmgatBn7KEo9XJGXXrQQyE/eT9apOCrEtxTYzFNHmUj5eDDa3+jM?= =?us-ascii?Q?Hn3Ey3pi8lC4svgZHJ1DVbTG+dQIGLBXK9pLlJLrWjngDtDIZUoM8oVml/N2?= =?us-ascii?Q?1Us0VH+8wsmS+fLSXGk4AFzJjqxRWeFw0D4nlB8RZQXQOnvwNX62J5MCmGW/?= =?us-ascii?Q?hPA/bxw041i5QM7e/7U/z9BF9+skG3ymzDf9tbmSWLP4jgN/Y6W+Hs0Iaha8?= =?us-ascii?Q?E8sHoAfkhAyWI22jTkHpFkucjoof7c9pUxedu/+oU3VSWr/s0aEABPIR5rG9?= =?us-ascii?Q?BuHi2wGxe7oM6OPSJG+la2He2d0yK1MRfXeVpXRlJkazx+S3JlKq51RX/gsm?= =?us-ascii?Q?CBz/NCyKB4MM+E7nD3zQV9wZ809J/3apwj9CKUz4LMWt/YI+sOq+/WgiAcJg?= =?us-ascii?Q?uoGYmq5yVQUTAD3IjJq5MCJB2ExDYXzJrhEwFB2QDBoNXwohdy8jN9WwCMaL?= =?us-ascii?Q?Iy4yZ4THJjGBBmA5fh7C8WjkaifGF5UV23lFhLVoc/p6qzII/uCM458rotOh?= =?us-ascii?Q?7B1IkHjZTaKPiHfdZQKEAkPZ6THzOMak7XcC9D/iWiZRxwzBQfqoEllG85aI?= =?us-ascii?Q?CbCW4/Dv9StuJs+tntd4xcm9tMZfetixXv3lIBe7+jE7WOoq9JeQi2cNezYC?= =?us-ascii?Q?WwCV9rRNQw9zOonzUBQHBBu4KoE49nkwHCxCh5i1F2qRR4n4BaFYgoy8RmqG?= =?us-ascii?Q?OuNRTokrsf81nSRkHkA+3K4xvcGHiUMYFa7yDk8Yo4tdPd8PJuDwnkHiRQe1?= =?us-ascii?Q?bwgMaST5rMP4LOb/YRTCm+WNhe+BGLfO/z7AV10j+CaAb1BhMh5C/IqDmelV?= =?us-ascii?Q?CDWLLJDNeQ=3D=3D?= X-Exchange-RoutingPolicyChecked: cGRj1i/cYK3ZSaeiQ+uLyjGDdJtz07gs4HtfBnASXump59r30g2uJHCfZeGebl14adQ/O30Duq32K7K+YMEBR3eVwlA2fxqVVme95aF4JUomlnnTWZJ0HOhFRdYxurinO49R3XxahaTFQdv0hFujvmDoPv0LDNANBxhhwDW7MIu4Buh6a1fFcZwGb6xO2x0JImvL42IO/SeKRwgADz4SvVmq2nlhAejcvZ3u6GMoPehLZz4iVQjgyLoW34IPzYuP4QgrC+orh/3JPmwwtN0yeYdBVlPEwk95QCiK1N7N+qAiUVMhyANGjeNL+I7BjyMeWcyb2Z7+wcQhKahBJT/Xvw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: VJjT9vsV2R93OZ51BJFxsyaNsor72+JcpBTjRzY5V6W/QjH4H6roGtXBtywGFoJtK+uzDq9SR0KHkOL5RyUKBa/kwsvISbN2Mx1z7H4vE9buSx4IHbvJ0xSF7hH6OegJii5RuRqGOuId6ebLY6l+ooFfG3sjd+lm1rrkNChsWdADEfh/dZ0MMK6G3sZJH4RnvoLo7Awnq5ri17pW4nfBOVTNTtqdHNgbP1uBPAGVy2ejFhESQmAAILXCKw1S49/fgYlCKM+C/d6I1XYW85uUpx6gqyCbawD29x15PH4ok7V+TB0jHClB0sHnanta8YS6ptsjNlSngMCir8cve7W09qjMxJ5PVeFIZzUH3SzezFOhuyW69VBSElRzK2/ptwAV84Pq8RrhT2dhAsQtM5sXokiKhViYKdACswZcxUnFjMi/k/qJ9WOSbSNJ5DHS+xaj+iMnd+3LL1X5uBM1byv4lUN1U/HnxUzMBTymYrCl6LAlBZH2lF2IbBkeRMz/cmaG5AJwmBw0Uq5nkWwTEZKd2SHedXq/nFFka0DWP0537ZaaeV1ASwC7TenJB/NgONubL6GCl6UtXAFv/eEQW05Dp9ExjX7rc+ldvg6oNHuxbAI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f7d9cd7-a583-4285-32c0-08dee89def54 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:56.0761 (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: Z3FO1+Tx2HXAXH4YvyzFVnEMzNpSUh2v4J9+A3lWXZXgETcLU2mGxfR9oqgpZV5HRS9aSysMpCthKrXel56IYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: jeTC75lV145Cw8JwK42tNXws29VECpMB X-Proofpoint-ORIG-GUID: jeTC75lV145Cw8JwK42tNXws29VECpMB X-Authority-Analysis: v=2.4 cv=IsYutr/g c=1 sm=1 tr=0 ts=6a61e0bc b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=WlZ9DiTZ2y1qVm1cHVYA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12115 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/MEan7YCifG9 28Fkc9ApNsJ/QSp7+mTPzd2Oxcu+Rcd5bVS/gJdMs6rM7DfLBy5kuf+IIO4CktfjOLCvRsNyVLx Av3Uy6WStr1A9Urwx1ybPrpFC6/EyJYv8zm1SawKhYdICdfnwZo5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/+okhEaVKkQd 5yYqbfylkPjTcdST/I7n88GJ7G0C9C0ZSYFr6V36nd8iJTLYZMlf9MxObR2T1jO1TEi2CwGLU2l P5nUFCfemYj6qnOf4rXWkYSX7z/C5pkdiA0/DrgCTt6/BZOpzWBaCluSJln/d5Dr7QlFeu/EwzX HPpq1VAU4RVUDA3RIr0wE695F5RkTPLM56mTX1deH7CYkV7AH/siSYKZYqectRDUsfz6vTy5ixL jldWHV/V988W8udfWriVWqzw7mMMgF6YM0xl3M3xE5DdRMyPQuVrIufHhJ32PBgfCutURvvWus1 EcYWy0bj0o7KVVrbHoJWLTNzNFgYmVnFmfZADotFSGZnW0HgI5WhNBwHilyjt/4Im7l42fybEiL fzAQfz4/QNWdc/4a/Dy8wvcyhXCUiWgO9MZ4KUZgCbHKc3egMWH/A+XsdWwOC+Em2QbbeuCCL95 PK7o//84Eh8iReY8+YbIgd3h63H2G6vXW0vz0T8E= Content-Type: text/plain; charset="utf-8" Add support to add or remove a mpath_device as a path. NVMe has almost like-for-like equivalents here: - nvme_mpath_clear_current_path() -> mpath_clear_current_path() - nvme_mpath_add_sysfs_link() -> mpath_add_sysfs_link() - nvme_mpath_remove_sysfs_link() -> mpath_remove_sysfs_link() - nvme_mpath_revalidate_paths() -> mpath_revalidate_paths() The functionality in mpath_clear_paths() and mpath_synchronize() have the same pattern which is frequently used in the NVMe code. Signed-off-by: John Garry --- include/linux/multipath.h | 14 ++++ lib/multipath.c | 154 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 57d13eb1450cd..6915c2a979642 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -20,10 +20,13 @@ enum mpath_access_state { MPATH_STATE_OTHER }; =20 +#define MPATH_DEVICE_SYSFS_ATTR_LINK 0 + struct mpath_device { struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; + unsigned long flags; int numa_node; atomic_t *nr_active; enum mpath_access_state access_state; @@ -89,6 +92,17 @@ static inline enum mpath_iopolicy_e mpath_read_iopolicy( void mpath_synchronize(struct mpath_head *mpath_head); int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy); int mpath_get_iopolicy(char *buf, int iopolicy); +bool mpath_clear_current_path(struct mpath_device *mpath_device); +void mpath_synchronize(struct mpath_head *mpath_head); +int mpath_add_device(struct mpath_device *mpath_device, + struct mpath_head *mpath_head, struct gendisk *disk, + int numa_node, atomic_t *nr_active); +bool mpath_delete_device(struct mpath_device *mpath_device); +bool mpath_head_devices_empty(struct mpath_head *mpath_head); +void mpath_clear_paths(struct mpath_head *mpath_head); +void mpath_revalidate_paths(struct mpath_head *mpath_head); +void mpath_add_sysfs_link(struct mpath_head *mpath_head); +void mpath_remove_sysfs_link(struct mpath_device *mpath_device); int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); diff --git a/lib/multipath.c b/lib/multipath.c index 448d879abb354..20c633ad7e1df 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -50,6 +50,87 @@ void mpath_synchronize(struct mpath_head *mpath_head) } EXPORT_SYMBOL_GPL(mpath_synchronize); =20 +int mpath_add_device(struct mpath_device *mpath_device, + struct mpath_head *mpath_head, struct gendisk *disk, + int numa_node, atomic_t *nr_active) +{ + if (!disk || !nr_active) + return -EINVAL; + + mpath_device->mpath_head =3D mpath_head; + mpath_device->disk =3D disk; + mpath_device->numa_node =3D numa_node; + mpath_device->nr_active =3D nr_active; + mutex_lock(&mpath_head->lock); + list_add_tail_rcu(&mpath_device->siblings, &mpath_head->dev_list); + mutex_unlock(&mpath_head->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_add_device); + +bool mpath_delete_device(struct mpath_device *mpath_device) +{ + bool empty; + + mutex_lock(&mpath_device->mpath_head->lock); + list_del_rcu(&mpath_device->siblings); + empty =3D list_empty(&mpath_device->mpath_head->dev_list); + mutex_unlock(&mpath_device->mpath_head->lock); + + mpath_synchronize(mpath_device->mpath_head); + + return empty; +} +EXPORT_SYMBOL_GPL(mpath_delete_device); + +bool mpath_head_devices_empty(struct mpath_head *mpath_head) +{ + bool empty; + + mutex_lock(&mpath_head->lock); + empty =3D list_empty(&mpath_head->dev_list); + mutex_unlock(&mpath_head->lock); + + return empty; +} +EXPORT_SYMBOL_GPL(mpath_head_devices_empty); + +bool mpath_clear_current_path(struct mpath_device *mpath_device) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + bool changed =3D false; + int node; + + for_each_node(node) { + if (mpath_device =3D=3D + rcu_access_pointer(mpath_head->current_path[node])) { + rcu_assign_pointer(mpath_head->current_path[node], + NULL); + changed =3D true; + } + } + + return changed; +} +EXPORT_SYMBOL_GPL(mpath_clear_current_path); + +void mpath_clear_paths(struct mpath_head *mpath_head) +{ + int node; + + for_each_node(node) + rcu_assign_pointer(mpath_head->current_path[node], NULL); +} +EXPORT_SYMBOL_GPL(mpath_clear_paths); + +void mpath_revalidate_paths(struct mpath_head *mpath_head) +{ + mpath_clear_paths(mpath_head); + mpath_schedule_requeue_work(mpath_head); +} +EXPORT_SYMBOL_GPL(mpath_revalidate_paths); + static bool mpath_path_is_disabled(struct mpath_head *mpath_head, struct mpath_device *mpath_device) { @@ -468,6 +549,8 @@ void mpath_device_set_live(struct mpath_device *mpath_d= evice) queue_work(mpath_wq, &mpath_head->partition_scan_work); } =20 + mpath_add_sysfs_link(mpath_head); + mutex_lock(&mpath_head->lock); if (mpath_path_is_optimized(mpath_head, mpath_device)) { int node, srcu_idx; @@ -484,6 +567,77 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +void mpath_add_sysfs_link(struct mpath_head *mpath_head) +{ + struct device *target; + struct device *source; + int rc, srcu_idx; + struct kobject *mpath_gd_kobj; + struct mpath_device *mpath_device; + + /* + * Ensure head disk node is already added otherwise we may get invalid + * kobj for head disk node + */ + if (!test_bit(GD_ADDED, &mpath_head->disk->state)) + return; + + mpath_gd_kobj =3D &disk_to_dev(mpath_head->disk)->kobj; + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (!test_bit(GD_ADDED, &mpath_device->disk->state)) + continue; + + if (test_and_set_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, + &mpath_device->flags)) + continue; + + target =3D disk_to_dev(mpath_device->disk); + source =3D disk_to_dev(mpath_head->disk); + /* + * Create sysfs link from head gendisk kobject @kobj to the + * ns path gendisk kobject @target->kobj. + */ + rc =3D sysfs_add_link_to_group(mpath_gd_kobj, "multipath", + &target->kobj, dev_name(target)); + + if (unlikely(rc)) { + dev_err(disk_to_dev(mpath_head->disk), + "failed to create link to %s rc=3D%d\n", + dev_name(target), rc); + clear_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, + &mpath_device->flags); + } else { + dev_info(source, "Created multipath sysfs link to %s\n", + mpath_device->disk->disk_name); + } + } + + srcu_read_unlock(&mpath_head->srcu, srcu_idx); +} +EXPORT_SYMBOL_GPL(mpath_add_sysfs_link); + +void mpath_remove_sysfs_link(struct mpath_device *mpath_device) +{ + struct device *target; + struct kobject *mpath_gd_kobj; + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + + if (!test_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, &mpath_device->flags)) + return; + + target =3D disk_to_dev(mpath_device->disk); + mpath_gd_kobj =3D &disk_to_dev(mpath_head->disk)->kobj; + + sysfs_remove_link_from_group(mpath_gd_kobj, "multipath", + dev_name(target)); + + clear_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, &mpath_device->flags); +} +EXPORT_SYMBOL_GPL(mpath_remove_sysfs_link); + int mpath_head_init(struct mpath_head *mpath_head) { memset(mpath_head, 0, sizeof(*mpath_head)); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 B324A42B746; Thu, 23 Jul 2026 09:37:30 +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=1784799452; cv=fail; b=BKQVkGXAB4yK3p02AxyDcQSmSfNUVzrl2eGIWR4LLe29yZDdzzdUek6Ze3tTHON2S8YpQCRrVtcme0JQXViTF6b4ymLrnYkCHE8o9OqbEmhBO57SBVk8ScWPTpYGUVZ0L/ByWCZI4SxFLQgtCdXPd80HgROhjXXH9EZqPyUzk+0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799452; c=relaxed/simple; bh=EkIrVuKIk9kmnn7CUPjL6RTpI4iEfEh/YtotSmpRCq8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kT0VZYTI9+yAjbC2Rt3vvHFXw9z/aj3xgsJHwfrorLYRxjRojrQb55VMQxVAbrfdwu7cT9FICFIRtXmOEJdXQrvlweR653kRg3u55E5skXc/EdVRHhl8DGCTldXvyOOkp/ESflXnIc4GPCYkpH4XWR3O1meHkbv/tH6DfLNg7ao= 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=TdoaVD02; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ghJRZkVY; 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="TdoaVD02"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ghJRZkVY" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtZbB3391769; Thu, 23 Jul 2026 09:37:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=kHla3464PuKLoe3xnhQ/vLbQPHYs9BL3B5y15b4dBlA=; b= TdoaVD02wpuk1urEoPaPWXGludigZN/ry3lM9iEWzfccf1lETxS7X7lI0yfHieIG bP4eyVoKqpzEL6WG2btZ7Kx7P4DrSvEFVpXT0IxE5ddaCR96Ll+y4chOAOixERXX hH1LbqxG9e08Mt+Ed7TL1FQgGia2DbpLme5UYRF3EENGbhfdImnbA45gpA6PgWXc jsKobI1X/URJNGN0Auex3LhslHYivWdpMc+zYS5JjbAK/D4pu7Jbz3SLULvkI1v+ iJjGpMVmgYn91/uMy8ck1cU1L7oNTZh0h3LIdjdIy6Bn/5yo7yM3ETaoatXlkaD8 mtufbLW30Xqs5PeCup3ThA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1tjxn4m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:02 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVPU010588; Thu, 23 Jul 2026 09:37:00 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011004.outbound.protection.outlook.com [52.101.57.4]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxsdebf-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:00 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Uacl+2oJCJEgmilGl3PC81YtRKqryR6P54EcpiXESMqDAIduq1QDu05Sh8F3M82H9G6kkBUbUFZN9ykRzJOSLxqLTQgaIBhg0IC55RZJWQnjVNbztkoRzUMLVczINmSuFnrbO0aHwov3YmkZTs28HPOTe8o2d5hCRRb/JyEWfnUKVy9Hv4MB/gf2WM/T7MYr9znP1DFSPkbVfthMbAMtCYdfsP2UtVRPwpldFahoaAJEqg7L6jT00vQO2A+/EWVIs5lcnfGkUuIyoQZYDi8XZIt1zK2Vq30p1kvAuLhYkMtg869sokXY+PCcJ3aUqIZf8eF2C5PuChcx58erGGGIXw== 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=kHla3464PuKLoe3xnhQ/vLbQPHYs9BL3B5y15b4dBlA=; b=atsyqCYJBaPn8gDgnkF7yPybMjpU2crezS914g8e96Kivz+97qXekNu+rmS9PJsSMiVnsyajn8hvEL30I/UodiOdvy3N7kFKC13JNYb3qkEm3wo1KKJB6ZGTW+SjKRcK6lwnNPX+fsmX1CWK76pgMf9piOmzh4t3hOi6/g+mj+m/GAzbvAHd8DgRm8SHkrft3m90OmbtVCuIOO0AOQgqoMzwFH552GvGFdc3FlpcLsCrSVie4YPQrMZVA1tS+KK6RmiDuPL2+yuAUgNG03JwE8mohn9po7kYcgxXmY4aKLDNsd89yecLViaJVz/srpfp8rNbr78RGyShUexq7FjHIQ== 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=kHla3464PuKLoe3xnhQ/vLbQPHYs9BL3B5y15b4dBlA=; b=ghJRZkVYmN0ZWPz5cJvcB8r/d+UmFSiymwpZKNKdm+qdqJgCLY5aTcgitehhAdSJQtGMyxNKlYx0ftrMzn7M4lEdc7gcM4pRgtw9S3OIZBhOcjWbvWjy+hhiJOHMr3fLfmkkGMvfKEB7LN3doiL4+ICKDihsgw8CKAdX1GMOMyc= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:58 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:57 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 06/28] libmultipath: Add delayed removal support Date: Thu, 23 Jul 2026 09:36:04 +0000 Message-ID: <20260723093627.2327456-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0402.namprd03.prod.outlook.com (2603:10b6:610:11b::23) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: c873e459-da3b-4a9b-592c-08dee89df087 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: 3yo9LFhb+l5Wi8dF5h5ZQWdOQK4E67g7z3kTt6GY8cI93fuJYvL85ddyEUVwWYcS3II6IENreVvdke75O+K85yyo2hdXFDSOHdl6A1nYPP7tTyVt97124QDEwBijHsjkVdddpe/1m3tAqzDQMEMdZoogkRkoc2AqJ3NqG9qQBH2QWwwvlMgvjm28HRuY3jpBrrEufJleGtrirXRL1H3BcuX8vtWXU8iy0mbNuTEinm0P4tKa1lR3iF81W8qJDpeepw8n9aTddkMgnzPDWhOld3gzWENd3qHqT7BphBfrqSmrurJu1n4Y5viViRuUELXFsulTXdKtB9jLIX27dqmWw/ctO0YP5PsyUbxv+U7qzz4E7SBEWtPFYOlbHkEAMh8l8B1uT5tzHffr2GLV6LAowXj4xpoqKfyH/h1B1+XxP2PBQDLZDHx46aI3A2ZK3B/X0X65IoQsBDjuOsSEL90SHv3BS3X78/uuyXefLvRrJD6QwLi4kWKPtiowW25pWQ8/YwFJsF30DM3C3dDgcGUQEtGlwQFkLV/PNlWGUgGTJIKvreEwQXlfyYiZoI5ABsNPsOZYhuIjEZMhQ34J/TnEupk1NXdJUW7z4jZ+0zefUM1ji/RYHvUA0rPJ7+tvzJGjsup91QQJJzVZ4OstydadC1X0pSfZOrg4o+mRMxJqoL0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?z0K2CF9YKaLqCA6La9AWHhvRdSCgO6o4aoj3Gp+XaqoVHVlWAOfH+tccO3nb?= =?us-ascii?Q?s59viI4CSWovKgshIYfFMrEofEf7tNpIHiH6TMApivm+5KMMAN4G1DPMrNSm?= =?us-ascii?Q?xbzjcVxa4G/fGNybJka6BY0iZ/Kybzp0bxraErIyyaYtXLsyROfkYdfuJJlk?= =?us-ascii?Q?UQoSwM8IdgJRUr9S40RgkZ6VVCSei2nw1RLA9zdhyUBz3R2CUf9CUdKD3Msv?= =?us-ascii?Q?tTbfOCeCSuK9YGbQGpdJAWL1mSE7vgtTy7oyJVL8pJDbltxFbypwHc4q/Ty8?= =?us-ascii?Q?yaNnZmk2vnk0YB6g039Ggln7yA4qV8QdhnwVWZtk+2Tn6yEDyUExYamuTL+c?= =?us-ascii?Q?spYw/627dYAaVSRndkGxBWCjsZTikSfi4j/CtGbzJiuwFOAqUFlqqzI+K8BM?= =?us-ascii?Q?ni3Op9AMq/BwokgmITYlNkscTbj/ZebYdfZ5LeYI9ZcNeKtJ5jKCTQfCJbs1?= =?us-ascii?Q?3JCGETcHJjiVkVoUr5xdlP28ouhzFzUfax8wq2b0YGNkxLE3a9zJBXu9Ds67?= =?us-ascii?Q?UPmjw+jVAzcvWsd0TAEhW6u/1REw+cFVDat99rTXdkGvEazR72H/rMBXHP4y?= =?us-ascii?Q?EFyyf6bmVTrrJs5ZMAosTiV5gIt4/2SVT/p9ahP/LoZsXqOlOZ95XDqER2R8?= =?us-ascii?Q?ae/ZJ6i/1bxbmvXrIEQw6hnlZCPclK44wUgmCNRb2CbivS0OV2ymOox24seX?= =?us-ascii?Q?XEFUp3TU1ipePXVb/AEjelQYgzQYNJuneXfrCmvMEc/xv6eBw2bshd7jOJ+w?= =?us-ascii?Q?qqhdwCOUHBAUtOhtx8ilLK0QexyRaB2czT7RbZWtNFOCN3cOXqSH6bu8q3V7?= =?us-ascii?Q?TMDc3NnDBbUaZ8ehZxdIwNaThRAGZ9YeVr8JDxXiQ2SasxlcxelVzSS6Fgx7?= =?us-ascii?Q?SXIuzb24Qx/i9igSOCeQAcqWDdzX9ZnTh+Pn3brPZamylop/pi5+JNq859d1?= =?us-ascii?Q?V+GkMiO6b3beHCWCjQUTvitoIfRIHPps9zhpwYh7llqr4u4hL6cB5a02mDH3?= =?us-ascii?Q?ubsZFogOzSBWwngXDPVJ7QE0rr0GTu31NJ23fx+o+r+PkYpXmGwVfvSTlb1z?= =?us-ascii?Q?PhLUSR98e6+vp4FPyiEXiuwAuKLpHLcKEB6cc86y9CbR1jkiy3gHQuywAIci?= =?us-ascii?Q?Bs7dEGqdWs3fbcvL6OCL+o/vjzwxTK7QM+o4HrraRiWU2RqPW9dtyoGThflK?= =?us-ascii?Q?0XeoKK1raMVJAo5SpYliq/DgAxg/9XkmjQyDGCq2UQI4F47QEWNuwDvvAADq?= =?us-ascii?Q?cI4SRMaVqd50BDKo71jkx09YmNQNpAq63U9OYAbK/gR3RDdUG7+Ro+1rdRu8?= =?us-ascii?Q?vUBjwLk7GpAP0vApXyNI0whXveDF8QrJK7TUACMc3X0O0CiVEHYGWmf1EHWF?= =?us-ascii?Q?zgohjV6IB+/QQzQNofRpmCzkzGP0lPck0eK9yNJUdkfy4ILTr2H+osVQE1HB?= =?us-ascii?Q?a99NHlF0YFkognk9L+EHea/HKHZ2uUiSobitFuHiarFP0BXGbwHdOifuq15v?= =?us-ascii?Q?fFhyxwKCZbiCnwsy3AvRpHbHEc36vAdYWmBdvYqkGBc6GxEWFsZrf8HAXWZx?= =?us-ascii?Q?31RBVNbR4fDRhmqco+xQQwQExaIcig9pGRR0YOYqhP91a27uS0Xf47lq7cQt?= =?us-ascii?Q?ZREj2aUMKn3a1bgMikgX9tVe4mEpCoLrxyDOtAAOGAiRi00eLuAeHz6N1Po7?= =?us-ascii?Q?d7rRF1HVGTGplQhGKMnoP6GbcpaIDjz539Qwdg+D7ujM27zg/xPiG+2g2enz?= =?us-ascii?Q?44vQTXNoQQ=3D=3D?= X-Exchange-RoutingPolicyChecked: YUHEiGkr045O5E9GwH4xsQqA+lQi+US1ngY1he2cGhej0gZRcJon54wkcQC0eSmtAGaggcny2Zb4uBYi+m4jcNDfuSQQpKyBEDJFhn+CVjrmcw/A6TIlcW5g0nXMwishNfb9fBdbdj/tUm61pitgZQ14UZNQ3mwQyshXaGgfg/MRMalsNYo+nAOSOzimOJ0fGG2ilX5brdT1RgO3Wb2Jzk0cUoCSoEHHrosRtsnJxZ5YWpYOhtzNQmrHXn9KnThv94hk/QrOUuEW36PHkl49Ncgfi2IkJHRsIhU/G+DnEwcSYrrNmMF4EXAiCsl3k7aRycq7ZxQrFsgaX7TORYumRw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: jzfnQN7bSA8CedHo+Hvu76F5FYhmYz0y6lnLaVLlDzLXhF9KJ65mDcZD4QVEcmlnpqb3Zae/MepMbmLBk+yVbqU0nfS5FdHZiHWZ8Cp32qjHKdXJH/6O/QP3yQSeEIdCk4IQHL0i/198Ms3HhCtgxu7REmQQfXmdiEZRwOG4QwSIydnk5if921RcNOkk2BJRJbEOZ7cEAVhS4vUC2VnRRGG9O96Xchs0QmILltDv10jx+mALQvbrDdgYuwjZb3epCSHii0LF83QxgGxPdlsv5uv7btyj2UTsuWcodmlz3f7VB3iN3Ul14f1uxrjDk68c2TBq0n8z6RQ+vikjw2fEETF+kuXFjArGawN/5+QaPAwZ+EMNiFDmAlKh3rtl4gZC4qJ8zOphHDyDR12vEA8o8/PmZDFN3sJsh36FCAftxU3yBYELlCG0D5ctDxzUIiVRYwmkZ74o31hN86PzcBt6Roa9Bv/e/3apDilThRvDqMjqlHkApOydnWvdu6ViNDVuro113wx89Wq3gt/hfOCUxA9qm5k3ELORy9fG/RNeCVJtJ1xj5l5KI8GPltvFZGvdDMlOaEnWhqQhymikH0S8NPSXQJfybXWHgzDUi4SEJzs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c873e459-da3b-4a9b-592c-08dee89df087 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:57.7766 (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: I5pN/Xfs0VIaBBLcaLBbYdO96+8Qz9t4IWXsa17EPaKMFh6K/H873812WDKwumUgLJAKomeqxFRyzDFPVJSyVw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Authority-Analysis: v=2.4 cv=TN51jVla c=1 sm=1 tr=0 ts=6a61e0be b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=yPCof4ZbAAAA:8 a=BfxcaXdt0Lgmg1IeN-8A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12115 X-Proofpoint-GUID: mwo0xSTJL0NRWgsawQJfSXZJgDWUy-3y X-Proofpoint-ORIG-GUID: mwo0xSTJL0NRWgsawQJfSXZJgDWUy-3y X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX3BKs0Nka4ciZ XWC/ehAAIaK6uEkPskJpLn+agvugb7HpISX7Oa413D3JuRklGw3OY2/C6GNnQVF2s3pgcetxK29 8lL1hp1nRpRKVvyHp+TQog2Ih+pouTYCW39HHqDHX3Jv2nRa7MIf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX8+iy5FeCpqut LVne6rrRnw/rf/PeWmXPx6iDhubjkaJ23y2Jmfz1Ia8U8xkv882e65V/l5kWUSNI8Q3fNFxeeB7 BreoJnOryfxJIOpnK6wH+xlAdTaJHqTpLxQY4/nyIR1y4z/Wddq0wKn1FQd44rHR5wdVEv0fXf2 4u+TYwFgu8Ll+KXN6ywHan8wIax/A9eXi6EW1hU7xYuDBvSDUO+aKKccjWT39BpYQ66r+zMclsd jfKeA3ZIT9Hr5BmBAGQPsTt/bucVqU4mNTfIrvPjuap4ejy6kNmgs/HH6x85LltD6NXq4t28biF TVGbyfScOquPcLl/oXi+hsh8JiPfXs676qhvGl8rtv/vY+c9b2tykS4YKaohtbjr/1ta7e+qe4D V9yVIIdSVdXUdcxrk8gdonHQ0mj4Jxa0IkSOEKZzX6Uan8PGLvvZZx+HOZC6DIhJ4GVKz9MLeNf xKOpOpF4QP4SX0FjhTNQZQJ8HgWlVQnFpJrlurFQ= Content-Type: text/plain; charset="utf-8" From: John Garry Add support for delayed removal, same as exists for NVMe. The purpose of this feature is to keep the multipath disk and cdev present for intermittent periods of no available path. Helpers mpath_delayed_removal_secs_show() and mpath_delayed_removal_secs_store() may be used in the driver sysfs code. The driver is responsible for supplying the removal work callback for the delayed work. Signed-off-by: John Garry --- include/linux/multipath.h | 18 ++++++++ lib/multipath.c | 92 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 109 insertions(+), 1 deletion(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 6915c2a979642..44e26c16b3dc4 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -34,6 +34,7 @@ struct mpath_device { =20 struct mpath_head_template { bool (*available_path)(struct mpath_device *); + void (*remove_head)(struct mpath_head *); bool (*is_disabled)(struct mpath_device *); bool (*is_optimized)(struct mpath_device *); struct bio *(*clone_bio)(struct bio *); @@ -41,6 +42,7 @@ struct mpath_head_template { }; =20 #define MPATH_HEAD_DISK_LIVE 0 +#define MPATH_HEAD_QUEUE_IF_NO_PATH 1 =20 struct mpath_head { struct srcu_struct srcu; @@ -58,6 +60,10 @@ struct mpath_head { atomic_long_t requeue_no_usable_path_cnt; atomic_long_t fail_no_avail_path_cnt; =20 + struct delayed_work remove_work; + unsigned long delayed_removal_secs; + struct module *drv_module; + unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -113,6 +119,11 @@ void mpath_remove_disk(struct mpath_head *mpath_head); int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct queue_limits *lim, int numa_node); void mpath_device_set_live(struct mpath_device *mpath_device); +bool mpath_can_remove_head(struct mpath_head *mpath_head); +ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, + char *buf); +ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, + const char *buf, size_t count); =20 static inline bool is_mpath_disk(struct gendisk *disk) { @@ -128,6 +139,13 @@ static inline bool mpath_qd_iopolicy(enum mpath_iopoli= cy_e *iopolicy) return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; } =20 +static inline bool mpath_head_queue_if_no_path(struct mpath_head *mpath_he= ad) +{ + if (test_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags)) + return true; + return false; +} + static inline void mpath_schedule_requeue_work(struct mpath_head *mpath_he= ad) { kblockd_schedule_work(&mpath_head->requeue_work); diff --git a/lib/multipath.c b/lib/multipath.c index 20c633ad7e1df..1fa4bd6677051 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -65,6 +65,9 @@ int mpath_add_device(struct mpath_device *mpath_device, list_add_tail_rcu(&mpath_device->siblings, &mpath_head->dev_list); mutex_unlock(&mpath_head->lock); =20 + if (cancel_delayed_work(&mpath_head->remove_work)) + module_put(mpath_head->drv_module); + return 0; } EXPORT_SYMBOL_GPL(mpath_add_device); @@ -338,7 +341,17 @@ static bool mpath_available_path(struct mpath_head *mp= ath_head) return true; } =20 - return false; + /* + * If "mpath_head->delayed_removal_secs" is set (i.e., non-zero), do + * not immediately fail I/O. Instead, requeue the I/O for the configured + * duration, anticipating that if there's a transient link failure then + * it may recover within this time window. This parameter is exported to + * userspace via sysfs, and its default value is zero. It is internally + * mapped to MPATH_HEAD_QUEUE_IF_NO_PATH. When delayed_removal_secs is + * non-zero, this flag is set to true. When zero, the flag is cleared. + */ + return mpath_head_queue_if_no_path(mpath_head); + } =20 static void mpath_bdev_submit_bio(struct bio *bio) @@ -480,6 +493,39 @@ static void mpath_requeue_work(struct work_struct *wor= k) } } =20 +bool mpath_can_remove_head(struct mpath_head *mpath_head) +{ + bool remove =3D false; + + mutex_lock(&mpath_head->lock); + /* + * Ensure that no one could remove this module while the head + * remove work is pending. + */ + if (mpath_head_queue_if_no_path(mpath_head) && + try_module_get(mpath_head->drv_module)) { + + mod_delayed_work(mpath_wq, &mpath_head->remove_work, + mpath_head->delayed_removal_secs * HZ); + } else { + remove =3D true; + } + + mutex_unlock(&mpath_head->lock); + return remove; +} +EXPORT_SYMBOL_GPL(mpath_can_remove_head); + +static void mpath_remove_head_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D container_of(to_delayed_work(work), + struct mpath_head, remove_work); + struct module *drv_module =3D mpath_head->drv_module; + + mpath_head->mpdt->remove_head(mpath_head); + module_put(drv_module); +} + void mpath_remove_disk(struct mpath_head *mpath_head) { if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { @@ -524,6 +570,9 @@ int mpath_alloc_head_disk(struct mpath_head *mpath_head, mpath_head->disk->private_data =3D mpath_head; mpath_head->disk->fops =3D &mpath_ops; =20 + INIT_DELAYED_WORK(&mpath_head->remove_work, mpath_remove_head_work); + mpath_head->delayed_removal_secs =3D 0; + set_bit(GD_SUPPRESS_PART_SCAN, &mpath_head->disk->state); =20 return 0; @@ -567,6 +616,47 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, + char *buf) +{ + int ret; + + mutex_lock(&mpath_head->lock); + ret =3D sysfs_emit(buf, "%lu\n", mpath_head->delayed_removal_secs); + mutex_unlock(&mpath_head->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(mpath_delayed_removal_secs_show); + +ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, + const char *buf, size_t count) +{ + ssize_t ret; + int sec; + + ret =3D kstrtouint(buf, 0, &sec); + if (ret < 0) + return ret; + + mutex_lock(&mpath_head->lock); + mpath_head->delayed_removal_secs =3D sec; + if (sec) + set_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags); + else + clear_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags); + mutex_unlock(&mpath_head->lock); + + /* + * Ensure that update to MPATH_HEAD_QUEUE_IF_NO_PATH is seen + * by its reader. + */ + mpath_synchronize(mpath_head); + + return count; +} +EXPORT_SYMBOL_GPL(mpath_delayed_removal_secs_store); + void mpath_add_sysfs_link(struct mpath_head *mpath_head) { struct device *target; --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 C8B91427FB5; Thu, 23 Jul 2026 09:38:22 +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=1784799504; cv=fail; b=HxbTjTic40hFQgBSvoj6mQ+CVbxnBtCcBdV/zafAZQxRYP/AzcamQxKsc6Jx2YiKQrJFpzYqgqTLkTdHZ58bICXO5g2hg40bibzDZiNZw/xWvcLmSbDOao5ebrrTh9a0izvghStiQBEBD8axjgARCw962lWOmxWxsObqG48I8YU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799504; c=relaxed/simple; bh=6dk/bl5X2pnQL5rVWS+t4uzwQxmwpjj+ZS5ylE05Z/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=D67x/td39sFhWnrk5UZbexK6vXKm58yTyrl6M+vq+YyoK6UD/qxTfXNIf6uZryxSoe8zZLqnM9WvmQYTXAH212gqcPNn3ESGfocKOGdz+9+9rMTWr2kA3Ay6WKX+xh54QKVqlASaDfOOSkH0mhcROFzoUUYzZNrEjrterIu8Ouo= 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=pL20gS7c; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=cV8faf0d; 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="pL20gS7c"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="cV8faf0d" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJthtx3404240; Thu, 23 Jul 2026 09:37:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=7tKDf8NymbEIQMyMkfGZdIdTQex5hUC5B+xEwgA+HwU=; b= pL20gS7cyMCpo6SEe6CUPyufQ/ua2zpkD6t72rR4w04v4D9ZZL9PFt6rDIxmKEap Z9hpUgTuZ2382DGpbZCjVmaNLx1dX6gHKKtF7VkRsbqayJ4K1CaqnDBPLGWeFRlI s1NMm+jxxgvwHliavJ5tKXtDnL+q4qruUnHI0PIc4nOtMdrEKVFlj6MC0Q6PFBkK Bfni8v9UV4jYR/LUSVeMHiI63VhoxvoWCBvqv7gN+bTMTmc5UEoK8s0+MAiOZQbQ t6xoEqJuP7pWjrk2anCCs4Y53mu3IoDE46X+aB/AAwmyO3S3QnioQEkk8q8+FoSS Z8hEpASTwRlQF+QhUwiSvA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1n3pmpq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:06 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9SA021175; Thu, 23 Jul 2026 09:37:05 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011052.outbound.protection.outlook.com [52.101.57.52]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y43e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:05 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SkKdY4TWV8ZF8Niws7mO6UJFxr4um+E6RgAVs98Hfojrzue6ej0bK19zSem2ZpWTKLAgLx7oxK5Rs2eJPc7S9vfctBx66pZyp0Dnz3apsVJvw5R0G8kU1gXq2dZtXA8n80K0k7wGyk5+xaSIvt0dyX57v029PwSv2nibOqayA4DW5OfEM5Szr7LQSM23QnmyqmyGGS9Db+TYcTSY2QryoiIlFCrcqBHJUG73rIpHrwi3oH+7koxd1wlQ2yFuegWRi08BarHjb34bHClbcdGUaghAgkpgGLSlK2doM7iBec4wEdFaMFuzNdNy7i/Cfu/x8YIEynHOhshhLSXfOciQYA== 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=7tKDf8NymbEIQMyMkfGZdIdTQex5hUC5B+xEwgA+HwU=; b=pjJVaEBoJOKCEIu6Josb9qxgx7gnXogt+ZsUkHykgMjorf9G9JaWIlXawSsn3t12xDyYp9ib4e08zzDfGKCknpLJjUiWuxIQLO2EDq3rdJVXdDkjs4FUCPDGPCdMbCDwGYGCYs3USjlR+McdrDUiN5TjZ3y+dlg6n1742EHp1zsTG5TCGs07ZBK5CV6qrhIGkld04e3wcqy1MCtyp2e/9pYUxNYdnQnVNNUyDXqSclCMrIah8xtNxoQ2+LEFakWol/6yXYlW0HBGPUDvxbvSS/eW/mDRS6RNY1cNYMKLwz1oOoRZgI4QLMtbmLD76lM1dWm4gjwrFUUeJU/n5PLUnQ== 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=7tKDf8NymbEIQMyMkfGZdIdTQex5hUC5B+xEwgA+HwU=; b=cV8faf0dT3Jup+zBuD8DKYPYEfqzdOlasrDvfdjklekawbcZ9fi4d+QNHIctu/naI6wtFdwFtxDb+qBi+6Ow5Gz5p2kAE3Sxs94wDqSQZysOhb5DTMGPS6X8Rq51OXk9/WC9NtIDRh9OPh7LMkx4Nbi41JftKo8Fk/hipP4UYkw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:36:59 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:36:59 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 07/28] libmultipath: Add sysfs helpers Date: Thu, 23 Jul 2026 09:36:05 +0000 Message-ID: <20260723093627.2327456-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR16CA0015.namprd16.prod.outlook.com (2603:10b6:610:50::25) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d05c9dc-d70b-47f3-77f6-08dee89df174 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: fLqTNs/Gfpn4HpmvcaIKY+9HT3D8YWwEG0hHaxhSWE0DG5cttZdcC+PFC4A+7elnp4xqWVTSkvZsS8B77UmMFnuKDanIsiyhO4BA4s71NVK2eluUkGE9Ha94GjwO7Bh239fol65PvNCjbirg6tNcQDx5sgpKUpRP71tKC6hdxv0VrDvybBDJvkeetsSTByw6zmUTESSfBUdtmKP4YnBZUzgTsDm6KcQYxRqU5NVKdAey5dJhM8zv/oB4m67P72UKMXBZ4nZowiD3Bi8eszxeCKKZCYs3O0JD4EaHrbVlbh4qR9vFgVejC2RUFDzfpTbC0UhM2FdbdgJPSCu54uu+PGpmQj1LXs5PGNChnGfiDMOJS1yPeiHVvUVaBpPipg8/Xl9ihj9B71zdkJGM6Bpy/sxJxO4hfDGWl1qkuQOqdmZZDLwVZCNvryHTB0e0kOQLjPYDrvLnkVwnVcNrmMHGhGLskAFg2KPQmGN+FVW4IFabgPWvtgyQ30vMsp9OMOYiuP/394EUAPLiznEwHPVRY92Yhm78XzfiXRRqxE9yx2Qi7YQYQH0ejXE7Vm7Sj6DZG1h/V1HbJyhIOwxWcmdX7WzkLb8FWwPaRTmHTj910SOQ4DLLhisvaciPwawAwnm+dAjOOMKmbGYMqDzeaOJDtB5PsRm3s9Lf54jaLS33BJ0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zx3g85KeZeqq7dj8V8VEVtWEtbYHHED4+an5DQSCfJLrkGBwZ0RD0ACiIlbq?= =?us-ascii?Q?x8vMHo7DVOqyWxfrKcl3rl13UpLAIU0T5PYuMnUs+GAeHYS5oo/3zBwqcadM?= =?us-ascii?Q?2l6VdfBeh/7JC2TqCfUUPAFgFzvCg7Bp6SRtDC89C8jzkPIUxjjGXuL5xEQG?= =?us-ascii?Q?agD+zCI9MOWp0+Jpdv73EMB1lkky9twn2QWy369pIwusRKNPNANQoIIobnAK?= =?us-ascii?Q?HfyGD8KBNuB0O2vHP+WqGejaRjC/Y0gaktK879bV83cf38TEkJSDNAA2Qr7g?= =?us-ascii?Q?B3i74u5CJtttC+9vBY390Is12al1yPdUe1uSFlJ7ab/Ve5GdtBSd6AQ+2L3A?= =?us-ascii?Q?T79DsHWoHBr9vcqckMxs9PIMy+omoKOo0RkN3+i8IxI48kvEChdin0AlpPVe?= =?us-ascii?Q?MLfyNjO2xZ57+pTMx70Rtq9DMhpUDvd6fZCtcvFECF8Bm2VENkM+VCpd4/AP?= =?us-ascii?Q?+lp6YKZ0FE/OOdItBuXgm3S98YSSBpf6nKTTF9Q2Hwsmid2m9WEd13O4ZApH?= =?us-ascii?Q?NbPRvt0hXJ8BVXJlSSrEJJBWZfSkQBvjCA8yi+tqToB81ZVQ9mH0tHQdG0OG?= =?us-ascii?Q?SJgdVmfDkgmBnhsTGIcLzfk6kTKr5GABUqCXiVDxwZV3PNP2QCe9ZakmyDJD?= =?us-ascii?Q?69D1UuYOiOoTx3UuJvxFb8f3rI8C5E4kHcuc03dwb+MgDvYkC0tnpI3Jt2D0?= =?us-ascii?Q?k51qmlNqXYqH1Wf9d1a8W0p6IDQdqgNUrqOdZNbG1T9rt5gMZXmtd8Lkjvuw?= =?us-ascii?Q?7XY3z+AuTEEiUtIlfUGUVFDOkhkWp05dORXso4DBqRy4NGyeO71vrRi2c8+/?= =?us-ascii?Q?3WNP+UPwQgo+XCbT+Z+x9UruqRVmA7i2OakdwTE4decldLHK5Mz/M0ElpGIc?= =?us-ascii?Q?jb/m2wIZXmDDmARwX0MZ9fH8nvtycUstrNT54j9u46EvkPnOdJGL6X+ONUah?= =?us-ascii?Q?fIWqK13VVXt/eJT8NO0zHiGKEz5774Myq1aea9mlITH8yLvTk4yxRfi78PMl?= =?us-ascii?Q?3sqoPUU575tkTLlRIXgxvArG5M09tyIbXUEZCD9SxCyTxO8TbTOXFK9NLZ2k?= =?us-ascii?Q?dpFaIrhw7J3YHO4TBG8uOzr1umar0AFlWRdBi9tgkDIKmDQ4kLeV8hZyyUhG?= =?us-ascii?Q?+koKZix7pfeXvZJzbfQPRbT/g26Dpa/3W67FvQb0TPyMDeQlTypfUa5NgOKu?= =?us-ascii?Q?zZGy44/EF50JorVndnB4hSvinmCjnEpdoJ4ALJtTcn0EuW6oOLBFCRlEIo0I?= =?us-ascii?Q?2TCAbGksmqB0LTo88+djqBwwLy3RtptnHuTQ2qXZdp0J35J1yR2xAtEHBTU7?= =?us-ascii?Q?WFPNviCVWUcbDUnc/aubm9kqGngpQsb1gzD6XKC7GJslU2wGWaW3hMIEErfM?= =?us-ascii?Q?JiGbkLfJduoUlBmkI20CagSlG+dWQxA9NjAahM+w6/NjygMlhW4erQ0iAoPo?= =?us-ascii?Q?dS65C0Y/8UeXxeFEJ4t7TK4SlasWHM4zPqqcOiEwQO4tJPOR61wrc3MOtCQq?= =?us-ascii?Q?xmzorf84yCkjtI94SCjdKZoH1LIhgZmInMHNB9Y29D6F/Qy61Vt5tQ6ilshX?= =?us-ascii?Q?2Pji7Ir7kejVTk9BIQM7bfaHBuPG+f73FmNnPUIc5t/18FMAAw8XVFbKX53U?= =?us-ascii?Q?plSMsH7jIf0pWnfsTZQUBcyL1qhllzo3qn+YhgnI5m8E5P6PH/7fjt4Pb3JZ?= =?us-ascii?Q?SDuydURJIMiml5bGeYlOLzP1iapK8Vx7dHoc8srr0qvCzflpI9Bpj1F+Sx2w?= =?us-ascii?Q?R8X7odJNKQ=3D=3D?= X-Exchange-RoutingPolicyChecked: SMLKXQQWrXC4FNyWP4UtLPgAqxi07Cuij0+ynh6hNnisXrlXMMp/W/fg53ISU6q9zL/Fx5oZw6Ea8ZYyN8imWqYA3oC5JjklPJkuXie6okv58v6A5FNi3tzlcB1VqwsMMn41h2HxrO6669fkmLRRg6icIMaKfpBJ9GwbTLJ+7iku/cvhdhmYoZJSf3ylU3kBOmC3jblAAUZfL8uMf9s46umD2oVXsaTOXjXFP48XcrmFcZVAqOnerB6xSM0jpMy3Mp9WumjzPXALBTUd4ZjHKMC688zgQTBJTW+GmOiSdPypISqtSKGuk4qgVjfkpDmS+cGwVQJdfbKsdN7kqnVMiQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 49ocVoviJCY1P2U/rktdc3uumD2uRAhZwtwtiJ844RJRo4/VQxmSWVbZi07u33LaQ7JOckjEzRk1p5Ji+9uPAP+sLN1Dl2L7F2/4jWOAQZvWLAhcWrgT1dG1UC/EPzJtZiGsLOEwMlDkqNpeMrviyjoeOJhyyd18wHfLWmptSPR6St2/7c1ODsRQQBp2Obke0APdYe2a61PcOyU63gf2JI+i86IIkL1UDMqEPvKIbQX0CKZWt36gFEQdZenMRfRiBxpyF+6Xemm8tSnB+gTX5DaEr6HLPJEt6M/rY7dONbZYHc+T42uhDLoqZcNEbtm+YzCBg+wpH2i0R8Pju95MK47+mCua1FZHfDMXyJ9ISxYODYx01i4BIknDeEGoi7TqXO+GbrravW9vYjnJLzbv3JHgZcVpIiJJu9qkSVIdKAX0F/NPLLYx9tNuniMjHA+EjxlAGJyYwobnOHKB36cwhZ8tO6SHikBLZA0u5lTNN/du4OcRHXJoogn5ZncNE1BfU5kLwB4WkaHR0h2WEHgY2rAg5N2McrVL2uBi/0HGbL3zFmsFL4Y2Sp2G9eN6iqFY/tMTDFkYP6jLJuBpraaCqLeBdwiNKM54NBqLdi/4pgg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d05c9dc-d70b-47f3-77f6-08dee89df174 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:36:59.4058 (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: HT7WgBL8b47E4MIEDSTlA+iBzXDHPmnKsN4WqGEQJ3VN+ahibVrmEEFGD/gxisKIinlDedkwelW7H8xby5Bp8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: so4ErAr2ueb9ZxkeRmRPxE87SfrKBQ0W X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/nibKC7BngCO NSJmJFUyfdcc4Il38CHsYK6OaRJRrSOJWIzUzAU5Vo4zZJvOTjmMVIw1hACCwFzxf90gteB300j o7NXTK/uD6IGY6RBHN9j8ETDiAo1XaXkZxErzOSIwlgcdLTrFOAh X-Proofpoint-ORIG-GUID: so4ErAr2ueb9ZxkeRmRPxE87SfrKBQ0W X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX7/viOzm+W1rX 3J/nMfM3hwFyElCupcJeO4w4e/m7ylBgGL1+S+JLj2r9nS+P2zMj80DTqfASiBvuIkU8EwDiSWD 3QxPZ4GntBVpWM35UzEEHQD2bWgp8VR9biWbTOHLgOClVkXJCv9WblarSwLIHSLkuaxLkTdi3Rb 5AD+pAOU6Q68LuIYlJjpyVKKb5uS/egYyp71Fr6A66wVGAjA+MbBv2LOgzePLpyATroreKq2RjG bfiFsPZjIu1Eu2HzcfnIVlA4aQVfvuR75hu2qcEPZ08uw/NVJByEdB2XwQmtS1ItcvonlixdLUU 9KZ9Y/O7UWMokPH9Op8sL24TPVTIjwvZ7uHKj/1qZOqXrCgwsEk1DpiAdbBiJftHGLf4Xszx0ai 62YMloXk0jgT53ugJ0xc9JMvchsCSVe5SVbhQ3TV5XLbtlc+p/mWDH2HYTOZl793hEmUh+LmiaG azwwtsUdK1FILNFOybg== X-Authority-Analysis: v=2.4 cv=PryjqQM3 c=1 sm=1 tr=0 ts=6a61e0c2 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=JWw5DRbbQmmJTouRsXkA:9 Content-Type: text/plain; charset="utf-8" Add helpers for driver sysfs code for the following functionality: - get/set iopolicy with mpath_iopolicy_store() and mpath_iopolicy_show() - show device path per NUMA node - "multipath" attribute group, equivalent to nvme_ns_mpath_attr_group - device groups attribute array, similar to nvme_ns_attr_groups but not containing NVMe members. Signed-off-by: John Garry --- include/linux/multipath.h | 5 +++ lib/multipath.c | 94 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 44e26c16b3dc4..4dff0911c2002 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -7,6 +7,8 @@ #include =20 extern const struct block_device_operations mpath_ops; +extern const struct attribute_group mpath_attr_group; +extern const struct attribute_group *mpath_device_groups[]; =20 enum mpath_iopolicy_e { MPATH_IOPOLICY_NUMA, @@ -120,6 +122,9 @@ int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct queue_limits *lim, int numa_node); void mpath_device_set_live(struct mpath_device *mpath_device); bool mpath_can_remove_head(struct mpath_head *mpath_head); +ssize_t mpath_numa_nodes_show(struct mpath_device *mpath_device, char *buf= ); +ssize_t mpath_iopolicy_show(enum mpath_iopolicy_e *iopolicy, char *buf); +bool mpath_iopolicy_store(enum mpath_iopolicy_e *iopolicy, const char *buf= ); ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, char *buf); ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, diff --git a/lib/multipath.c b/lib/multipath.c index 1fa4bd6677051..3ff4f42a096c2 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -616,6 +616,100 @@ void mpath_device_set_live(struct mpath_device *mpath= _device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +static struct attribute dummy_attr =3D { + .name =3D "dummy", +}; + +static struct attribute *mpath_attrs[] =3D { + &dummy_attr, + NULL +}; + +static bool multipath_sysfs_group_visible(struct kobject *kobj) +{ + struct device *dev =3D container_of(kobj, struct device, kobj); + struct gendisk *disk =3D dev_to_disk(dev); + + return is_mpath_disk(disk); +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(multipath_sysfs) + +const struct attribute_group mpath_attr_group =3D { + .name =3D "multipath", + .attrs =3D mpath_attrs, + .is_visible =3D SYSFS_GROUP_VISIBLE(multipath_sysfs), +}; +EXPORT_SYMBOL_GPL(mpath_attr_group); + +const struct attribute_group *mpath_device_groups[] =3D { + &mpath_attr_group, + NULL +}; +EXPORT_SYMBOL_GPL(mpath_device_groups); + +ssize_t mpath_iopolicy_show(enum mpath_iopolicy_e *iopolicy, char *buf) +{ + return sysfs_emit(buf, "%s\n", + mpath_iopolicy_names[READ_ONCE(*iopolicy)]); +} +EXPORT_SYMBOL_GPL(mpath_iopolicy_show); + +static void mpath_iopolicy_update(enum mpath_iopolicy_e *iopolicy, + int new) +{ + int old =3D READ_ONCE(*iopolicy); + + if (old =3D=3D new) + return; + + WRITE_ONCE(*iopolicy, new); + + pr_info("iopolicy changed from %s to %s\n", + mpath_iopolicy_names[old], + mpath_iopolicy_names[new]); +} + +bool mpath_iopolicy_store(enum mpath_iopolicy_e *iopolicy, const char *buf) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(mpath_iopolicy_names); i++) { + if (sysfs_streq(buf, mpath_iopolicy_names[i])) { + mpath_iopolicy_update(iopolicy, i); + return true; + } + } + + return false; +} +EXPORT_SYMBOL_GPL(mpath_iopolicy_store); + +ssize_t mpath_numa_nodes_show(struct mpath_device *mpath_device, char *buf) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + int node, srcu_idx; + nodemask_t numa_nodes; + struct mpath_device *current_mpath_dev; + + if (mpath_read_iopolicy(mpath_head) !=3D MPATH_IOPOLICY_NUMA) + return 0; + + nodes_clear(numa_nodes); + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + for_each_node(node) { + current_mpath_dev =3D + srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + if (current_mpath_dev =3D=3D mpath_device) + node_set(node, numa_nodes); + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return sysfs_emit(buf, "%*pbl\n", nodemask_pr_args(&numa_nodes)); +} +EXPORT_SYMBOL_GPL(mpath_numa_nodes_show); + ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, char *buf) { --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 672F542BC4F; Thu, 23 Jul 2026 09:37:22 +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=1784799444; cv=fail; b=E6xl91F7ru45k+bvsm4vCtQURi4uKEwfMDc+RDfQsUyK8BqrzSlUV57r3ueX7Yh9ALWusBp4s7mg4pcuQ20oyY1Yig8foRNY7cnJea3FifiN035kSIr0ZzT33aj/1AGunPcpK9BftWTBDM2zrt9tvGnNiYEIs+1j8WVJoXojKbc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799444; c=relaxed/simple; bh=JY9hNY3Yvoh2k6SiTbkTZmWu8/dwmL1QyhYZespDdKc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=TsNJMZghQkmzHc3t8rEmIFvEQ+sTtQft/yZwM9m2PQNjDCdzIHePgNhSpPCff1Z5hxsm7pgR4fwB5YZdLe7hgcPEU2jtNX8iordZiE+3okhk9srfeJdVJbVAkg0xXJIPG3pLuLhToS6k9sma/w7vcH4fZAWGpUfSBBsPKM4kIMw= 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=drECQGNs; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gI4x756l; 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="drECQGNs"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gI4x756l" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJthu03404240; Thu, 23 Jul 2026 09:37:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=9eqajpk4+3ws8bxcDBFm5ZwUraG8nNOzrwN0wwelu5o=; b= drECQGNsBjRzlHu55E03gUHzRy8ii8KcsVzF0ifAe+V3Z0hKdEMfjEdz7txWh+re yBqI8UpZ6dvbv78HxDcJIK9pcfI6QLC8UhPccn/4YVLLr5VNizFX1FE9XBzAe8/p 5nyzYn89aaqb6uWhdfcv8KahzCDk+cDO4vpl0zHEk+1Cwoq6Tz1M/VcvZM4jkODJ gzT58eI9MxBIGJaWcE/LefOOYOawKjOyDeJZnK9YxbPXfQxbo3WAm1c26qDKGJp+ 3XVXrGK4VfKqIPZ9hmPgr1LSTPH/GLn3/DF1jWPmOFRj6Fwf/fglVcF/piltk70w QIUClfsYfwz3MgUF74YUfw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1n3pmps-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:06 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9SB021175; Thu, 23 Jul 2026 09:37:05 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azon11011052.outbound.protection.outlook.com [52.101.57.52]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y43e-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:05 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cfLDQLEQRgPyx6QTqteo9RcV60WGl2jxS7PrT+ZwsZUAGq6zBQAFoqYr5GB2/dCdPB8v9b0l3HB4QsmtjaWteGQZPfPOBln0i+yTA8ZhW3h0UDQTYEyuWdqPDNTQhahSvJf9Paur2W8j28dAToHNXn4pmgjxSxocFk7aLTC1NKuK9hjeD6/5xVUZpgeFrrCTZnAg+EirPxosJAYMRTRRCgKtNTj6wFKkRzNjydepdrdnhwSzRirVi4Pj2NmpeVAVhYWQ/ZCOPswlhS0FJ2Qa2F/LYLgNzakDOUVLa4XyGmKqHGUdXzl3XjW+0Oh/CajuFQZyvGXJOYCUuCjbfDiG5g== 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=9eqajpk4+3ws8bxcDBFm5ZwUraG8nNOzrwN0wwelu5o=; b=QoOT6EXAyfedRUzPinnN2J0mxiY5aozBA3mCTcQ83vmUXDr68tcxnJvLTxQKVzy1g5ZK/T/+Wj0ALVKvPrr5k5+70w6xVU7J+hBZEhCztTZ0AYz8I4FHLqgLCi2lpUgM2Z3lH1cQKUo/GlHDPQV1KIcEaZBBIXL/ksGK8NXtMk8cZQH/FLUYLwsRsEqEoo9enmObGfXcXW3zuXceoKxg8Adz6j4qcc06EKSZXQ9Dmxw15c1mhPgfTbUiD74e9LUB3WRESuvvk7P0aMto3qCl5OTk2NmZ/lY3it+k60FRZxrsKw97n6r3KKYAdd62ozOgJb5jq1JbawEwwC2eBDMb5w== 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=9eqajpk4+3ws8bxcDBFm5ZwUraG8nNOzrwN0wwelu5o=; b=gI4x756lm02+HcHGLXQR9PrJHqZGxzjdHDVA86KDpULKVuN0L2B38ztI2FVmfwvPmN4BtMX6ig21wtb3gtKJdcr3jkk+Hu6QMXXxJJFxlv+7ayK/eOvLmKMDVks0EC5atVXrHxj6kbaO3GdZNFrqhwC2U2OX4Nqrq37lMnPPXgE= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:01 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:01 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 08/28] libmultipath: Add mpath_bdev_report_zones() Date: Thu, 23 Jul 2026 09:36:06 +0000 Message-ID: <20260723093627.2327456-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR16CA0021.namprd16.prod.outlook.com (2603:10b6:610:50::31) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: b3c4e19a-03ea-4207-5771-08dee89df25b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: 1BIiFxmrbD+W/wauKL8GaxXuxIuLzHSY4YVh4cK57ex7D/q0lPuHb98Q26hFw8J8aAEz0rasLBK2wn5CyGQR4x/fhFL1fjS8B7CdWX3f0gBMKtAx/Ju0zN/E+XDo88La7Lr8dUS/4gB3HMeaLj4V0m4vqC2y01gy/TYcrq/2Vei54SrEtL9mxa18IZ5dJYOCnt/1mtmeoltq/Rv8QHKny0ER9Lngm/i/w5wSIicyPxtPtzIk1fJyiz4BOFbDBavpbVjvxgJ8MRVuAIiHOGrcz2+27T9mmX+Soow7N9ULsJzokZBw1JrpTWSu0sCBKICNGRYbO+2NNMmox438ss1FpkbkFAdOchC71WW+mkGEDLALuuh8Gv7ROafgOSt92J5c2CMaESsmE6qw/7cCr/BObA8jcV7jyVaImkpSabZS7T5C6fBFCRhZYeLUEKQWzVYPUzJsVmZEWHN5+dnPN8hffH26JSLfX4uOuEGpRM4GKhGTASksC+RWkmeIu5O8q/f/7qRheWnzXuR+jbMQZKNAJwQ9cN/KmjIP5Q8QUx5ydvAZ69wrMzRMPG2HGIQPj/7+/raVN/BllMlgKZ2y5BE3WLxl2xrHrx/lwnx0ZcNaBNpRiwe7KIqwy3RNhXed0uTsJTpzyHKoSnfoN2C67LNkp7InEdgXiJjqdkpo3JHN9sY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MjDrE2FCl0id6YWzPwhrJFA0TtvuEO0pY4pGuisXQ2rhlYLEWnzeXx4gictr?= =?us-ascii?Q?gbXCAegOfGuxGZ2ORswW6zddhqgP5eAuBjcUi9XdCC8NdQgw1ZOgAojfKHiB?= =?us-ascii?Q?YRx5MLiCwSGth9fTj84gXkv+f3fnfLcQdI/5J5JT3aAlVmyRXaSlAV69K371?= =?us-ascii?Q?ZD2sBJc126DMyYBGAKtf9DA8pXYzzrZde4aEvpw469su4GeXfsDKdJydPO5e?= =?us-ascii?Q?Hug25vLPfiOyczcX9pARM0OD0WirnUZQCDvu/li57Mefek7cR6NCL5Bur1VR?= =?us-ascii?Q?0cPlXNZRiwZzPzZVj28s4+X2Jv2yYLbezqsRuT9SaA1dpp7drBqt0sLOaLQh?= =?us-ascii?Q?gCaBRdhjF/O6seGCcsxAjTV5K09OobOqTuWHWBZNmKYlUDVPJ4MnGNsr1Kni?= =?us-ascii?Q?p49CEFZpJVTURYVSzejIOePdizdxFxczP5npcfSJ/gGOLcG6XMSdVqxsVo3y?= =?us-ascii?Q?oR5N+8/wV9y5M3/CHCjAHcDKqawGKsEIS+p+Q2ww2T4rTQzU43wIGAfmg1AE?= =?us-ascii?Q?tGG16QE0muGicjaeal1H9UyJfuJZgXbFGWhfAoovu0g7ad4yrqBTRRcurvCS?= =?us-ascii?Q?pzm+uuCTcnyO3HNaBh1kY9zNik0mMhi0MflwFRH0uZMAOZVWawzayefKCnUJ?= =?us-ascii?Q?4yQFYIlu5Ev5BsIXmtYyoqsZQOfEjtLsNshrBvJ9i5duUMivgrZea4xThu/5?= =?us-ascii?Q?SBaNhbJ8vxvAawW3NzUDOnHNrGVH0Z4s1Vg12Qyzrm1OM48jwLUYo5hLZdQ2?= =?us-ascii?Q?iSenVNnj4jvT6dUwCtkJ1ebj915Z0QllLMyTB/vTDRj+wj0T2IeJatFk2opY?= =?us-ascii?Q?8v7Atss60+PxliHQ0T42l+89UcXECAsQa2zDrBkfT2h6hF+c0YtOKc6ae1br?= =?us-ascii?Q?ywhbdPCzM1XTWw0JSnfouel6ssU9iaCQfdgU6HIrwqnQJMvFSFJ0SSZ9o5uW?= =?us-ascii?Q?WUgGhhg6LO4aN7Z9ecRk4r6l+4Hwgt8oNW4luM1VVFYMoPoSpH5qzDDbOpBb?= =?us-ascii?Q?OLHc5zwE/xqpgGibS9ErGcSsac0BwE0FjgjOkBta5aQJo5Hrm3LzRLtifk+1?= =?us-ascii?Q?sVORX83PYF4AxhHmN4Iu1VrxZARq6Jgk/oUDr3W4C1+zvXxnypRL1LZprl9B?= =?us-ascii?Q?+9/AICOMKBKN2j6zyjW4HB8cvayyzXPcTf1enpfiBLyep+Sugw9k/vkEwoSy?= =?us-ascii?Q?KOSJ0O9oQNiip3KQxbwKOkomRNdsV7DA1UYeSXrJP9Zz1eWyrPShQx4z/7Rv?= =?us-ascii?Q?ydBYTc6Pje3YmNbuJSNKb4ovfxDgcikI8PD7cseyf7mtxSHqTLeRhN/SzzPq?= =?us-ascii?Q?/nGuP8Dk/bPoWqiSFc+/5AasZmWic9iEA98VnUgZqaQ2gKQXzl0veP2WgPMG?= =?us-ascii?Q?NxdErTDZG19Lz4nRpOQXQ47zmMb+JvqO0SO5PGuR5UlwWVCw0nH8EJR/Y2eY?= =?us-ascii?Q?k05xArbnuWdZdwwxPWmmz5g23z4uIzaS3PjZAbrKjUWb+qnqtgllHiZaTw/C?= =?us-ascii?Q?JhM6uEhq9/ERAHMI2VDEJMu9unBQNm9mlOGxeynrIpUtUX8JJXZJ8oZoCWj+?= =?us-ascii?Q?GOwjibsKVzNcwigtAUE3nRXibG3FC1ZBw+vdrd0TTIteKO0GdkVUlas5t/dQ?= =?us-ascii?Q?LU+/i08GJhOFQQbujC+3yL9kLTZHBNDep4Ew3p4CUYGeZvA3SqZZBY58Jr+r?= =?us-ascii?Q?K3TJgKaEsIdjqk44CHMFz8b4vyHzCLFOKttk247mZO0UCI33wiMju4FVggsr?= =?us-ascii?Q?IxmDNKC2xQ=3D=3D?= X-Exchange-RoutingPolicyChecked: rAJgzUgi+qp2183DHD9wiadRalTevucxYEh8l8+C+DQulz2hPMbzx1NaTg92RjNSSERrkrZh27X70ariJmLu4VUA0w2I/76WIfzPMmXocLFPyplTd2734jINV807KjCCpWYKIUmJydI27wtHHSM+psliDvODY9lYiu0RY/wcywnbmOwQl6+gZJ/VEeF5wEkRrC2vjaFdBYv1nlK8dKVXjZ16cyn6cmF+JzoW2/UDTGQQDIJN41dBwUK/TWCTv0/hku3tulRig8bp287zy+VELoA147AdvFliKDs3GlxJY+X+EP3qsUKmobRrQteqDGcR41N9a67CtdGHmq1L50rIMg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: D5RwVkumI+szki0PVYQz6gHiy6XZVmUeL3Cb2PwT5/eXRdrdyupPw6Za4n3rHfhxsIrV9pDKz0Ud8FoHq4bW82Qo0JETqsHlAQsPD7qPhbQaMHTtCLxL/gTe8pcPawq1T92PL/bpMwPEobKh0DoXUOqWoUsN4KURNowmX6kMMG68W5XjAixDpceXaqE8W5NfGGHprs5l2XVvroIIVuRz8I53G/OEbPo3C6/Wuj/yZIrbiv0MA0Wi3zHPIShraVYaBlUtVsZoNnfhWA5GcQIujcTprRh1b6nTMyoc89M5rxveXFZA+CF2vMHIAUvQahIcHUtinG7XLG5f3zqQ907WWkM014is6ui1EU+N7VGs9ERh9b20x2gvNKlf59kQLffu9hNQUh+GA8URWZ6UIZDogDDaBoIRMEDLvlJiQzIRNQnFsSB1QNXiLe+Y6pTUs0eAZ/5TPwDPZcFRugCdLgtIaRtTKAsE2nBx5IG5G7Q87It/sZ5q2qUtvIyKqiVA+IPamuHQTe5897VBSLC5sIVsgCmNV9k6QVpzBCTi7iH0Kh9q3m0ebSQ/cRWLNpKAXRCb13U+Cd2P+pPHmEqaLDXLc10FyRlyfQ4MIYuu/HwTNQY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3c4e19a-03ea-4207-5771-08dee89df25b X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:00.9070 (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: uYEtYDADiIOq6c4GqiePK9Mf+bNgk72Hu2cDgQzi1Sxe1TSJjtetysZk/zlbLpN30VcM7wUF6BoVp8KV7sEhsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: kl6xyYDi3rm_hlMjDMe0OoZeT9S09zgk X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX6aHOpGdX3ZtT dWHW2ZsIXGnq0izP2WMH+LrgpTDr2+jmOzRfKKvfIaDzJoDAMOk/xJv5E9sqae3dxdBaZyunX86 uJvzR82QXLZ1quvTZIW/vo9i82NGK+aJ97y/ZMI3nJtrck9RcN24 X-Proofpoint-ORIG-GUID: kl6xyYDi3rm_hlMjDMe0OoZeT9S09zgk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXzG6UOBGMhDoo wLMIO3UY68gGb2HSDUTAIkK0WthcBzE3HsnuLq5kQb4JctXhltpLwpEq6e67ZbJeIsDRrswsu1L NwmJMZjOcoNaoGsquioUeXCZ9zefyR0IezO7SxAMM7q83kqlTHm2Gy+eQ768vWv2FZKEAqMwSZl dznk+RSCcOpn0kw1++GFJaxvK3NE1J9tBQbAYgG7RujCec5Tko6sjf7hQB2ZXiUWl4eGq5hUSJF j0+qZTPod3+8nR23SQqe7WLZq0cTkV45vnDsYomaNOvVHiNdDwN7P4TUV1EljKerPfmrLMfA3tM KXkdhR12dLkzM1d27Y1ghoBGziiFIVOCpuCo4KG4vsIUIH3HTxgnxFE+5+Ub6kSn1XBa5V2wbYz c0xcm2/vIX4NMAqNlvX1nUDovPDiDty3LuZEpBbok0i6PGheJBDabYYu8LDWH+VNqjxdi0p2vIZ KKEttdZzgqE2iPm5dgg== X-Authority-Analysis: v=2.4 cv=PryjqQM3 c=1 sm=1 tr=0 ts=6a61e0c3 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=hSvAkUGrqjTGy68UynwA:9 Content-Type: text/plain; charset="utf-8" From: John Garry Add a multipath handler for block_device_operations.report_zones Signed-off-by: John Garry --- lib/multipath.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index 3ff4f42a096c2..0232f51f64742 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -44,6 +44,30 @@ int mpath_get_iopolicy(char *buf, int iopolicy) } EXPORT_SYMBOL_GPL(mpath_get_iopolicy); =20 +#ifdef CONFIG_BLK_DEV_ZONED +static int mpath_bdev_report_zones(struct gendisk *disk, sector_t sector, + unsigned int nr_zones, struct blk_report_zones_args *args) +{ + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + struct mpath_device *mpath_device; + int srcu_idx, ret =3D -EWOULDBLOCK; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (mpath_device) { + if (mpath_device->disk->fops->report_zones) + ret =3D mpath_device->disk->fops->report_zones + (mpath_device->disk, sector, nr_zones, args); + else + ret =3D -EOPNOTSUPP; + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + return ret; +} +#else +#define mpath_bdev_report_zones NULL +#endif /* CONFIG_BLK_DEV_ZONED */ + void mpath_synchronize(struct mpath_head *mpath_head) { synchronize_srcu(&mpath_head->srcu); @@ -459,6 +483,7 @@ const struct block_device_operations mpath_ops =3D { .open =3D mpath_bdev_open, .release =3D mpath_bdev_release, .submit_bio =3D mpath_bdev_submit_bio, + .report_zones =3D mpath_bdev_report_zones, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 0AD7242BC57; Thu, 23 Jul 2026 09:37:35 +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=1784799457; cv=fail; b=sDLsffviR59iq5bAOn5tovrGSCTchGRyzPCIw9yNNh5EkvTVkKEblEav2yFl5JZLIsH6KzdGuM2x7XrhW12slYMAwPjXQsx6TzMkQAX08u9rXKR2h3QDXnTbw7IMzz2JWtRq+9IUYYP46qC1AzfIc4z/fNOCI5FJK1pkExYiyvQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799457; c=relaxed/simple; bh=kUFO+oDV5zQsT9o5YCWDJk6W7MGU6zfFoqQmU6X8sQs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EURZZ3IHHPU4rcgW5Y6ny6aJAjGXJRDjEJDOD0eFjL8Qnr122c50qb97Xe9e5b5lLxc+VZEPQcNFF8t7YId6m+sicNDU/pMdx3elRxqkO7apaNPK/4U7O7lVyyn7ADItLbZE4EB2Bcy2jHIk4iI/0MdLSyg5dcwEf6tIrRudR1M= 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=AEU7JCvS; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=JctfvQPS; 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="AEU7JCvS"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="JctfvQPS" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtfvW3573953; Thu, 23 Jul 2026 09:37:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=xgaRse8ZbTfEZPQsWNd3PHir1B1w/jmQMD8p6NiVf4o=; b= AEU7JCvSJGqEcLhcS3aSVWXGTwVYksSst0TsHLGfa97sXljKQjtBPH9MH/QcQHO1 D++vJ/iisnbNSh7efuLOeCFHXLUL0r8A8jv+A4559Xx24kwcw7uZ9Aip7UGKI0Yb kfR9qhSVRPA4zRmvKp6V4XCqA6hm3omGTts4UKML/uQpMr+11m731BcH3GaaUKjW wjPMzcw+dexh+D369bJ/71haxzA3RPpzzbU4pmoo5vd1hG7ydXa/AWpqEUpBPe4z Oj+4/+kzfFyl2QuDe1BWxwMWgM5qYgh08dRnPHjcWRVBaUK37F5Nf/GAlRBOVoHW YIR2CXMwnJs7WjR//nAFwA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1sqpqay-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:11 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X95v003534; Thu, 23 Jul 2026 09:37:10 GMT Received: from byapr05cu005.outbound.protection.outlook.com (mail-westusazon11010003.outbound.protection.outlook.com [52.101.85.3]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxen51n-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:10 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ogKBCioExHS0VyFnNkJAtp/4dx6jznnKQApqCJ2dsYAbedk6kWb9L+GId4dYhjrVEKa/1kmScqhsgefcfBD4o3zTkTIfp+LFYoouzk0fAZZFKVPUWtXvlfuegt7rr3I4ZDIgabqWAqsS9p4qaWhR3H0DYu52H823IIlQf0LOZjfQMVeXe6HHr2lthZxJeXI/fAO0serfMbIYqfKf6zvLt29WtqnqF9kcmCEvPLeN0Koidzdj3Umr7dOR0FXnHIV+NSO4xF6+rB6DRhpsJHDkv5maRkmYZXrbRIf43k7zLHfJN9Lpa9JE6iTg/jMpaNT7FIzvrxGRSbeSKtieKL2Hfg== 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=xgaRse8ZbTfEZPQsWNd3PHir1B1w/jmQMD8p6NiVf4o=; b=EGan8NClgJV87r89U3Z0Q5JYs9oZYxHBhEHXzNNDtpPRpRiJApZJBQAyMTGau6/WyBY4Be5V+/Zc9bLbzFD+C2vYvkqKg8ZSs/0eD4fooHBv+bbZjrvUTu7wuMzuRR7xx9MtDR40Q7BjSeACzk0BQepDunk4FZTfzlv1b+e9JCQT4BDEogRL2/CjFDCFSmBwyiu0oIOFo+1U3WVXO8DGYUGZqRmsZ89QaIsH/YddUrFpxfL1/S+hfX8pUtKDuD/FTmBNOru8lU5dcAYuK0WLTCG7ut0xNk55i6BqVI0neSEemclXQxJxTYuIWaAoFHa+VALT3zy78YURF49lM7EhLQ== 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=xgaRse8ZbTfEZPQsWNd3PHir1B1w/jmQMD8p6NiVf4o=; b=JctfvQPS2c5/VYK7BlTt0DvWjqDKgjF7YMNIyM+sz7fvNm2Z/oPn5g1BsDNcJM8jup3f9bSD4UWG6pvm0UYLQam1wt137NbElFHF1yRD4djm1akH6jMNMpfswL6ajP10Pe7Rv9lUzzjsF/7R6oa9+MIPfbA6hAoZyADS2v3oJ+k= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:03 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:02 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 09/28] libmultipath: Add support for block device IOCTL Date: Thu, 23 Jul 2026 09:36:07 +0000 Message-ID: <20260723093627.2327456-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR18CA0030.namprd18.prod.outlook.com (2603:10b6:610:4f::40) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: fcfdc179-2159-4f79-e631-08dee89df34b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: sCUQhNSzjAjbg5CajC/2anpBjLWR4uzVjVl4NYLdNpthlJKkJKtc0MeQLj9XH/edNwAda6eHZ+SnjB66cWxvl3w00jNgbHkBT4ARD7F5FRsMg1yhTcGPB5nXW1YBFNXyfAHxR3WMC22TJUWgUWQQkVc9Zyb1WbGmN1AG0Em4VvZjBdHndvi4UPDWwLr5gKiH+GalzRs6OIxsTNCsT6nJG9Cul3Xp3JPxScR8d1L2bGo2S97lHTX8JluiJ5Dl/SRdl0Td9C/GBJfdUB4yGuSVtr9F0Tm7WchJ6u7FRbA0zvvhptSySMNlc7BvHJflv+QHgML3VRSA+/V6ChGWI+zAqRe8Q3wW3dGj0eqJHN0dHTaogXanBwgEwjMQqNjH00ZcflccKPZxm8I9QxrdZfv2F12tZwLi6yQ0zCA7qhvyuzasOiQtr/o2/md/PD+m2JSaCsXwJBKD35WoBDOUPTAzi4xmKsGfJyWo8QmbcHjGl9S+9CZikJHC4UfoBuLZaTY4HntTL4aUhN6qFpqdkwPAfoaIHU1KojCNn4yWvqP35fE5irTBzw8KDlzRhsvo5O1oWhyzvViduALmq0dN/LKSlAwfFKUYVoAq9OW6bOJnPjY99OG9SPk1Re3pwVl3L2HcKv0CAzl80GoMfyYSSTZuu2ONzZA5DAWfh4DXC6FOLrI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cGyMd3M/N06C2chPxg/T0Ep0nC6zGJyuiRN2X/xq6aBc5urz6EHu7ygQLevF?= =?us-ascii?Q?2G4Lg2RdKgZLnTw7+mjNB8D0nFWmVtmOTk+HfNehUf/X8HPWoOxM/+HeSRbN?= =?us-ascii?Q?LVgmAEgpLbXFT2PxenHRQRzwYrxkIpsc9j/crhDvBog4l92l7vPaofJnpRT6?= =?us-ascii?Q?b6t9Il1uSYLLC8gcGhtyPMgp7CTI8kggy4GUdtnFwqJOix/iXKNl4PJfh9kl?= =?us-ascii?Q?+KvbA+CGQchSNcwP6FxVFEQJ+oWhRk3iEErZANlgT/BMP/4m7r1+7u4ryEAI?= =?us-ascii?Q?s7Zow5+hhoq012l7hBd/NiKoktBwEkNJoAnanIQ3ntEQwJxLAPgSSdUwm7DX?= =?us-ascii?Q?M5wmrzhX2CqYJ91VZuC0VSnqAro3umOs7troXLRlAECUf/3IumtL/bgzWEtf?= =?us-ascii?Q?28Ob6lKoacG7x1ERMsemPxfs88iHIMBf1KTEps7LLToGontt9eIF6UA8R/Ro?= =?us-ascii?Q?/NhfIZtVtfEubPsTZBuXWRZDcfOkzzagTtihZr0icm530KOo6bVb5SG25FpR?= =?us-ascii?Q?3uwaz0AGh5hpAFuNXMfGIIsWjtAYanIhzTbLrgqBRuG/f+mNIQfkcqK729fo?= =?us-ascii?Q?1GoxWOW2MsiZ2SI2PakPXE8uEbiS4RBi8Njcrjcpfj+Kqw1nDSl6xcdeJZWu?= =?us-ascii?Q?N3zY65e++wLjYK6PPgbKtW/ZUpy8HsZuUP+6yMjcenapWcpFsCbdrqeF0dtY?= =?us-ascii?Q?5p7Bh7n3qx6PXdPP//M+5o9nVk8cf2LvVifbotUUjTIvV2E8McEwc7rcKzyJ?= =?us-ascii?Q?afKpibhCUwoDSwuwTytll02HCLHFhMBRfGBrNQXBqW6s9IBhv5WMVrwVRnxL?= =?us-ascii?Q?IYGG8jYx3tqKxe1pIOchDF/Kd+USR1y8cwwUQ0CQqEQyzguyToGCIJmJoAAl?= =?us-ascii?Q?zTb7umGQzZlg/+Ci26F2WBVEuiREuZ7kbFdAchxEAzt62BuA8KPORPvZpmLC?= =?us-ascii?Q?wTA7daJfKTkpPvIXhNganhzTJ3YiY8MweSp1WZsvlUvX2hxbxXsnBx66WCzV?= =?us-ascii?Q?ERvUBnmaFj0nUWS0hlcPRSgwDmHAZ4tExRkxcq6q2L5Gw1igqw4MpdYcFtV2?= =?us-ascii?Q?jzyshVH2nhaVwfYltD6qy2hKTTl+9hKWvvqwWIdaYdsisljDRGFCTDk7U8Gl?= =?us-ascii?Q?QAxD9rm2jslkVpIPqUvG0/NWN92lkboE5BjLBQYH74/inFq4YPDCWtLzf5FY?= =?us-ascii?Q?nFuJdGGhWZf8kn2IWUNXpFqkGT5emS+wPelFu91JbqHrAfO2R9VktllAMzAp?= =?us-ascii?Q?3PQxGP2umwwco3ugyjT63NON+TeLgYgw5DQBO1S7ZGsg3k/LsXCkU9T2kkPL?= =?us-ascii?Q?JLRAcCKgrDqDezS/aq5KvZsrJUjdjVp4ffYQd+jLqRUtCxc21is3AKeVjo/K?= =?us-ascii?Q?iZlMjSo+rNs2KVVCnfBpkfOf72VNEZvwBCQ5vtOhQQZS2NMg8ny0xqbtQeyI?= =?us-ascii?Q?FpXxtNQCoiHXF/Bj5DrWP4SxGMxOLiUFqBY75GYcNqENsI7b9z0RQ8EkjUKM?= =?us-ascii?Q?YPJ0MP5xLJoligEwx8d6rsAiMmVbbx7maPVS85Abk6L91kLd7OcdN1FLEzWc?= =?us-ascii?Q?siBnio2jUbmCcvPeglBqTZQ/0hp07eDUbo2rJc/jvinradrwk3l5jjkKKgid?= =?us-ascii?Q?ZqAJ19QjGtTMOJEDTvQvLlhdi1RO3gou9mrBbrQCfLFQoCGPjuRcy1w7Thq6?= =?us-ascii?Q?ywpC/uZrlHbDQH76XV6Vi7cW1eh4SGvfAv7/DEbCo+WXeeMJmNeVPy4EJMfK?= =?us-ascii?Q?sWMF1SuP1w=3D=3D?= X-Exchange-RoutingPolicyChecked: aImsmQbxQJRA+oAVvbK/P+hI3qhlELkl3McTrv8yuHJ4neW7Of9pAVRqqdx0yQAwcX0j3PfHijHmMO2vdXKKK/OT4yjLNi2rrdXtojN+27MTge1tn/6pApOJMJDuqSqsHwgk2nkdrbXSgImmz3BOeSbGzgoXLDFl9kCkeKuKMIXx0ZEe1LzIONPQzqdRtATYTG0r1fdTbsTmD+qdzIYtbQ2pJq1ctOEDKNEmxGfE9SdzzUUwqZ1+uV2WMHuAo4Y+E7sgoxsPD578V530XhjDz1uwZmIL2WszktPUFAPgmpTdHJtlMfptzXlZLFUvJV/db4kIxVLJrPjE4wOiO0l/Kg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ei7hQ8vK+vUybJw6wczt0XRaWmMLonPnJPGIX2ElnierXJ0dvoNilSuCZe9lLnJOQC/fPqFSCKUE6npqnRR1/8U8qMl5OtfBAEKF+WQ+C/i+cXPEVaOvekLZ8Fo9zQ5SQOEiKbybWaWfWzh5p45rSRtV1r7L5dB5DU/qSGEtPXXIGKiAG8RF99+QF/s5coAgK7eEiYPbHJyeTL19LhhKef6OeiU2kPIEXyx+Ig4XC1iPdGSzf/XhhIx001ay3x7ke7O0/ihgP61zaDpV5U5A2HSGf+rOBWGnknjrL3xCCgnZ05KqihcZVP8yX6O+j3gW+6UFefsq1MImtbzrZlYf1P6tJy9GMpgC37R/gZDmrDs2gq5wmuB74nkaPdO/FWk+OjTCLwooHecNHPHNMAyDRSvKhXwPQ1cJE8WWcOTWNSWjlIrAYVflkYh9BuDzuu+wE20iDdiSbka8Yb5+of0R9qeirf1mPB+qPVzq4UwJ3ut5OIRu0jaTkD0VGc/ybc9gJfQT4IFFIqvaiAkKq6M2W6as2xof796FmvHHn8HsOH8mAUpy/u1A16F5FzFzo05OiQ3lPMoscQC8op5jviOZ0c0EvQaFNy9B+5PZFqLHIQ0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: fcfdc179-2159-4f79-e631-08dee89df34b X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:02.4780 (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: 0VCcXffZIaDE4zDsQ9TMXGoXrwXjrvkD+Ocvh3c5A7ijfconD2HQDSPGvrS0HmnIyOu0UB9iUX8UNG19CIKu7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-ORIG-GUID: ZS2NtGRBxRGFIXZAHfOokrTfIofReEHi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX2Z/IR5/SNRMv YgwZxym5kp3gH3mVnzjRMrMmCe7ZEAKVd+VMQlSRT6+XwVJi7nWWgx504QD6Gwl8ERL+2yk/N3Z RABdHf7YwlRk8yiA9DOkUUxId6Ziw6Uur+qUDkM1ptSZcHvwOP5Gb58lKY79NBbmV2dZ64epypY L+WKFG5U59rfihrn+yEVrNBUTVNPM01Wl20qrtPL9oEZTToCX6IMCSh2apTipvixTPFsrk/l9tA Rh1LILnYznvMdgKIn6GBdoRoY9kpi5Llh8ruYBH3PNq71COdz2oHFovmmFXl0sg9LFelQwxK6X/ z7I/Qt7VgJuvrJ5Ez1j7RUXLwyNoynBKTv94HK2zcqFDc84CrI5qZjYhoqka75aTqf4yeXJ1jd6 Z2CI/bESTx8/sM1FqL6PRb8zauEw+Nb0xsr/rBOZLP2+txbmqe34xn5it/xCy/3lwgPRZYQBZPq f+QJ8cXjlGiNEoU2llA== X-Authority-Analysis: v=2.4 cv=auyCzyZV c=1 sm=1 tr=0 ts=6a61e0c7 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=DqrFQuEEK8k12kQt16YA:9 X-Proofpoint-GUID: ZS2NtGRBxRGFIXZAHfOokrTfIofReEHi X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX5pu2zVVMCcl8 OKnPd8M+WEVZ1x064ciS3V5rylhy8k04BxVcyY4ShULuTtIeAKPs8YsxvJd0RHvEupyU9D+Kot5 7a4kCNpLVQrHnaSG3lo2xXe6nJRRARcP7zC0LqT/rdkRlb94QgI0 Content-Type: text/plain; charset="utf-8" From: John Garry Add mpath_bdev_ioctl() as a multipath block device IOCTL handler. This handler calls into the mpath_device bdev fops handler. The .compat_ioctl handler is given the standard handler. Signed-off-by: John Garry --- lib/multipath.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index 0232f51f64742..fc8ba8fc501f1 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -478,11 +478,44 @@ static void mpath_bdev_release(struct gendisk *disk) mpath_put_head(mpath_head); } =20 +static int mpath_bdev_ioctl(struct block_device *bdev, blk_mode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct gendisk *disk =3D bdev->bd_disk; + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + struct mpath_device *mpath_device; + int srcu_idx, err; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (!mpath_device) { + err =3D -EWOULDBLOCK; + goto out_unlock; + } + + if (!mpath_device->disk->fops->ioctl) { + err =3D -EOPNOTSUPP; + goto out_unlock; + } + + err =3D mpath_device->disk->fops->ioctl( + mpath_device->disk->part0, mode, cmd, arg); +out_unlock: + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + return err; +} + const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, .release =3D mpath_bdev_release, .submit_bio =3D mpath_bdev_submit_bio, + .ioctl =3D mpath_bdev_ioctl, + /* + * Both NVMe and SCSI use generic blkdev_compat_ptr_ioctl, so would + * avoid their custom compat_ioctl implementation. + */ + .compat_ioctl =3D blkdev_compat_ptr_ioctl, .report_zones =3D mpath_bdev_report_zones, }; EXPORT_SYMBOL_GPL(mpath_ops); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 CCFE04302F0; Thu, 23 Jul 2026 09:37:51 +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=1784799473; cv=fail; b=HIBOAQ8tMcOjUZyH/PxcZ+X5f/rZgBTuLY9OfvPcSf/UPOMty/cLTRspMYlnn9yRs2vwlh4iLIhOaz3rF62jeAqX1N4Q88p4ilhLpn9djsWh2WSxOabZdeDj9yUO5R4NQ4x2oy/FY4wmVutiUDgLUr2SKhvDMUPoAIi+QeSjsdQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799473; c=relaxed/simple; bh=s/rR4Aljr9E8ylHbQ+OkrdaX42rt3uSeAGghavlv+HE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sL+VOUBvFvIfNpVFRNA3Q/SjIgimsgL5KYSxtCgpDuDwWjUHaUNEVuO4se/AXoEHEqdaOexVGAzD7AJ4jwWquV4UYScqS2pXnohAOf7tUYi5pcL8mKHV/mbUU34meovodbLifw8jdo60I1JGs2NB9wb2xiSYPCVUlcrRS87CF8c= 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=hLP4Cmy5; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=pLmZDCL2; 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="hLP4Cmy5"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="pLmZDCL2" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N4JhQp009715; Thu, 23 Jul 2026 09:37:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=hKtxHbgpXAGbmMxpz80kWGKhxr7fBY+vZz09Pe58vIU=; b= hLP4Cmy5A0CIYYtWuf2G/mNGKb2q3s5onIM4KLGi1LEOVucV/891zDKkdH5xk87g qUvwgUH1r8Tf+qFsxSZzDwbEDAuQLpYjxn+DewSBjYbGytbnot3BjYkqOVvD8QZ3 k64xSgPpiW9apCTrs/C+Yl56AxY3hEyonT8t8U+4d3L78ZDuVMP+HcvnhQ7VH9IR vzqlYLUTS650YilBZhzDYxKxC2Y3n+e5zUbXXQvTglbaiXosQrr17RIvRcqMaaRJ jIjQXR9Nk+h08zXrUumNX2i8YTr10XqNUnFQ+izxSHkpd/CHCOOe57+QsWDVe8Xo xShU0+kQZI3VM3TaXlGIQA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6mux-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:10 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X95u003534; Thu, 23 Jul 2026 09:37:10 GMT Received: from byapr05cu005.outbound.protection.outlook.com (mail-westusazon11010003.outbound.protection.outlook.com [52.101.85.3]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxen51n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:10 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=omSVYLbnOEyeed/dGoBaDOGazz8bEtXUfHFt3AXSQqxGzQ3k6ZXdrLZ4r8aRC9kBaB9AtgEAUNQYS0lRLuyTGexJEVVKpQpsl2G712eiZh0cfIGgQ2f0rWI2yt3tELtCfxS7MTBmIhY6H0kamihurmfXodLtc3KFGUqW0Lr+kfXI0cdw1NPPP8DmksctIbSCQgIrNMFofAYhptqgjia4isS46AjGiecCOk0ghaJAuziXttyCTfh4at5OICzVhd3FC7ZgNgFhW3+2WSGt4KtbeV1jsrQfSNmYzEX5sw91nbP+qYRc3BUhasFYD6OptXJGJyOjbimWXNDEiqSvTam40A== 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=hKtxHbgpXAGbmMxpz80kWGKhxr7fBY+vZz09Pe58vIU=; b=bz6ryLnA4U9TjNyAOVjXN74sb3hzEQJPJ7VywpsgpULLooawYEK15IBIkJU9JGH5Y9t1JmeUUcN/Yii82vC6ALApWJD6JXnoCG2r7Yeh/dRUdK/rUgi5Wl4TMNkAN2l8oowwsWdOvSA2k63ylWHXcHUX05Sop3xqBGe4Prmy6XFex24C7DgWu9W4awQUNzzmpZTtBvf46ZOMXIo8sCfxPKV5Dieqy0oa9A18g4p+tg71IelHeoYKaXeoihAZP6/LIQaMr0ZAB7XBjakDowlWnMOmzBA4zElBuQWLM/nTU1Udiz4brfudl8l850LOaL+w/w8WacQFRgeyl0Pq56ntjg== 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=hKtxHbgpXAGbmMxpz80kWGKhxr7fBY+vZz09Pe58vIU=; b=pLmZDCL26HeqBfu2CTJ4EZjfIJOJzFnqe9qMrbvsnf0pSISe+YF0GHtS08+5BGF7Vwxc/ubx+UlH+NGgIHeQh9SAYWxlUqEk+OJrKBhaAxmHmBqlz5DN2U4uBlD7LGKhQ4aN+TJLfdjOvWDqA9NnhSoMiY4YwHALbFeS8HNtbrY= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH0PR10MB4678.namprd10.prod.outlook.com (2603:10b6:510:3b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:04 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:04 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 10/28] libmultipath: Add mpath_bdev_getgeo() Date: Thu, 23 Jul 2026 09:36:08 +0000 Message-ID: <20260723093627.2327456-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0392.namprd03.prod.outlook.com (2603:10b6:610:11b::31) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|PH0PR10MB4678:EE_ X-MS-Office365-Filtering-Correlation-Id: d3f80ec4-3725-43d3-3d3c-08dee89df439 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|23010399003|376014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: FF1Hk4+4+qBvTQwNdiFGQHkLPrK9iLSyqmSy/XtePxCT+a4Ii5bMk8aSzEst6UtllWb2YiK6v+YGRfdyUsFre5r8hLZqGbz0XHHoRXuiG72w9ZORHizPQjCaazQFBbQzglRsJTF7BNMgSZfmcbG6FD6LYOXcnq6gAnK35vT22QsWEJFe4v8LmKwHVL/bm4Fo9AnlZ4RssFy9IkbLvA6wJCl+KYE41KwE6Qzkd+U6hS1nNqSh84hOzxwSeF2WcMttdTEWjrBK0d0WtIk1hF0hkDC5I1inF357br7nSdo00LXmVu+PrnTux+9AxVo+wXTldf9vkFVZWtij1YRWmKps3bYlZTxI9OPnEuL0kq+Yjeat4zPaPk52unOr9snJ7dH9EMhm5d5yRMO2H7hYLpm7NaLg2L1SNmwS+yTGVWL6a3oltDZuE7f0EHsZFrOtp9hzlKp21H/OqkbGuxYKVaU06fumqDdlS0tQ5C2pHA1Kpw9n6KpCPUiVdM+Tqf4NvWPQbmHUPSFQqQWIFuSb3VG0dpJLOVUQarPZ4dY1bWdv+XmKkDv2PHxiIYoP5NI1LYXsXGXpOOFLJ3vI+e7cnpSTlQM62X1cIVeBRbB7qpCQmCYSM/ykndTyO9pxjBaA0g0Zfn/KQgYI1hjQbb0ql6y6vrwO4GPh+6zmbVWaOWqlkx0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(23010399003)(376014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8MfSbwCH7GpzQF3t2W3kk7UKkIE2BCE3KCbNEHNi++PUwUnJjrdArBhW51Zs?= =?us-ascii?Q?VFYD4z9xO5sEV4AaQapWWAg4FITKUOJSB+D7ZygpJX1nbDLSSfvv4LRU/aqS?= =?us-ascii?Q?YwMZGrB8LFhmidgLr5/xGSH2FTmNMSVUKYp7HmCXMgQIgiNPOTrNX+x2n/Hq?= =?us-ascii?Q?15QNZevmizOrujVywEj0EhMR0tVOOXDYk7rypFYEQc2PDNQVVYuh3Vzh21y0?= =?us-ascii?Q?6dwYV6spL4IqMRcOCmObAACmx4itHPbAt5sxtMaQYPaVDqZPNWq3OspcXI+E?= =?us-ascii?Q?jvj+Hy4QpCvOn8CDQ4tOZjJAU2bpTVqgeaT9FjzwRl1rWuvMdrZWvpZrEfI+?= =?us-ascii?Q?+5N8TSkZhsTSIZni2sNaWuSYR7tSthPOsArKF0bRc7PQEQEV0SnE6YV2GU8c?= =?us-ascii?Q?U7njrhyQMeWSIDOccS/ZR8vdrZH6fCj13FR9+ksd+9Goo6gkdE3YwA3pNT+P?= =?us-ascii?Q?JjZBbzGbY3cV+lfh8fooaV4kSgrqEzEysBSWfZw0simQ0OM1BQuJRuS5Ootb?= =?us-ascii?Q?+ZyYV3m5NAip0Ckr5UpXy0PR2ngCaBg4/UenXWaKRSTbbXvGgc2FLplmN8E5?= =?us-ascii?Q?NYDb+1/iA4ug3XGvrVLyLXbrr4bgxN3amXZZeZAIqB/K9Os4IW3jVyIThbdI?= =?us-ascii?Q?3h8DH6yuBAKdypMtOp5go8Jkmkfaaps/sEdqoHQ8RsLSOyjJmYO7BZnvdo7+?= =?us-ascii?Q?YE+4YIvKLq5YzkMI6pFjtP5GZ9McOZ1bx+VpD/QLcmF7PNV12S9GlKp5V0ph?= =?us-ascii?Q?tpUJ88clPX/UvaJElFG5OCs0Ftl20fsi+MJzU724fHqTLFlkez+usniuf0WM?= =?us-ascii?Q?rJwuZiW+kjnKOHrtz9uyGsdqbRAETNV5P1uHB9z16N1KavbogcwRY3i0BqcT?= =?us-ascii?Q?GccRpAB2zL3sYqUjTlfU9wSMjf4yV1iRGBjdKZPzP2QZP7q8YrH8F1v/JiAp?= =?us-ascii?Q?97afxjqcAGAyouQZ4ciSewYQiHfgN734F1SiuGHGPY2tWYQafbPDn78p9V2g?= =?us-ascii?Q?N+7sKFBSi5rbYgwcfMCzokI430j0xK6JjBQscYEiGpUnby/BpvFv1U0eAXNv?= =?us-ascii?Q?EQbwqKnWh2srT2qV9G8fVXtE9C86Doi0LFaj14SmHWYy1NeqP9tq2m8ER/lN?= =?us-ascii?Q?Snkj+aRcVAYyvvYtxAbX/PJ6o68VPvHzS0RxZglt3EszwgfrZasZc/xaDDxd?= =?us-ascii?Q?OGMJJ20NvqIJEQgO8wi/Q2bGP96haa+wC3OQOzCzDPMjzz4qMWGLxDrIZlQR?= =?us-ascii?Q?brz7f1/deV1sQKZlDHfxBk2b4lpBwRuTIuoMGdPd/sezCJ5mHI8wGPn5+/gn?= =?us-ascii?Q?Qpix2FRk52UBKEUXqYnwoh+0KTOxfE+oUhIUKDmqTtcYsy8WyaC76uwhn2zV?= =?us-ascii?Q?9QkpHrDMLwF+l/6/xzgSE78PnMwlqLESJu3dIX5P1lWFs03knYjMByiuEAVE?= =?us-ascii?Q?LmMW0bYovi/Se6LrDt+fPMJx2gbWcs2v7QmGwrxDd3N7OyNTZewnvftmSs0J?= =?us-ascii?Q?OIXpTP/ebLdi1UKpLXEpOkT4zs80LWuT8hBXYnUSkIpZvrSSywofXdc6vkjr?= =?us-ascii?Q?zI7engmDUxKuLjEZpvFFDZppaltbzOFHkgRnFdV91bmt3lu4b7ZEqL5MoxyK?= =?us-ascii?Q?ye8ugPv6cpG3VRC1WoDhCkdfnaFqnkN6Q0vtYqw6w8f+qNONcaAFliUu1mTc?= =?us-ascii?Q?EbCLEyBl96r42NYZ6aAnJEZmB70VAHq+nZgc2op7GfapZewe8rXgqi+lgnfB?= =?us-ascii?Q?qxl8Bn6uPw=3D=3D?= X-Exchange-RoutingPolicyChecked: ImB2CU0fgZ8Igu4md/Kl+nrEqK2ZsbvegzTza6j7+VZuSWYRxRZK8yqIFeusSYdB/e+ruFmUUF/645vL92hB6+DpuqV7x/OifZ3/rDKJRoTAwBvP3xpbxJaWiiAg46B7CoYdIlGws3+xWSKvWY89STc8CpWvbGb9atFisQhO/leaOSwxBBDCD/y9Dj4J6ONqvXheTbcpQkhp/82IUHTpH52ZRxomMQPyUV4gm3m8cxU7bqEFvweYfLhZZO7T1jVxDNP71R8kaaGqS0ZHu0r/7kYFDVTh5d9/dtycsuF93FXQp3Q5FfI71VlpUgk3cI2FvPSCKFyHaCQgVXtjY5uMWQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: qNHXavgKmZx1mRwdgdQo0OoPkWi0O9yIjEL6L1lEHopc4J3EHiBOyjcHbjuqFBQQN6VvBY71XYp0SeKaS7JwnEd5ckuAWz0hLrwEY/0BDhQxbFBrBrkdq7s5HNnZLFI0Bfq2n9wlLUL1C+9jYY6o9W34J+cjy+jPkXk09RE9pAVb4XhJ3GSqNyHGVdGqXk6/1UBgUV4JK8ZwcdWMLMKNBVTsnUZlvVfCBV/MtwUYJ/XbpGQmcIwNDp9mcn1KbqbfnXoHHoGZAtR8+Dd4xvNIf3g4v4wBnkejP2Nb4dGXLApOu/VjzFZsXadGUE0E1ypgmhQtAPiAPdOZnjjHMITY4tQkzPRbbWJ5tOAekAH0NMhmE04U/TMwVKH9i1lyicWlqqvDC9IuAa5ZjlgAPO6B316ECtvtx/LWatupVBlW1nvCiMUfiPu3m3blFEl9juSABeFxHw/asl8Gp0ODUAf1Nvd5LtxOk5Lyl7WqgLC5M0rKLiMCnF5DAxj2swvufHRQYCh1vpgycRJL9mVRp7j6o+T1L48w6/VBz+fw9QykK7sQzrt6GNNaOgmhzfZD4tTMgxmaEBGp16r5dvevbvnoaIGfITZ2gu9Su8HeaCP/LQg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3f80ec4-3725-43d3-3d3c-08dee89df439 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:04.0365 (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: qLL1nDFuq82uo1Ct7QLRTpNZS5iDp2sE3PV2m2pfDTOFFH30OG7M3psN9TBd1/Zx+r3eqnmvd9P5UHq6A5XdqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4678 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXwZH1Hoo7Kq6/ 8QAIdZtPcW2vZUe6YzCRHCY/AaulZ8M2iP0Fl47HYQC3a+e5VaxugstwXr9wXJQDScY7gANc9cZ Y/uijDtM2xpUE+HXoqM0b2WM4F0FSdIUXBv5zq7tNZ5KRxpD6X2yXGKiTKKSrKjNUSyjzwrMjBN JCaZVYTuzYO+Uj4OnuREgGCVse3riHcsE2HEJFZr67lJfIpOgA6gbUE1ETcHA9R0xOXQxykfDYQ vSvD0NaG66J7NwMxS9Nrho9HDJg+56leL0SX/4+Vesu4b4/KpcKLvr5o23dZenZ1MfSfyg6lY5R wdFP5r+fLAeUyxc3RQvsxcY0Ap61hjOtNhZy4nWraeb3GhAlnzjYOQQQoh5b5hLryoW0oXFrTPr A9xpuklfU18GHhl63OXJH1qNjwaoRj/WU2inyv2OX7yS1OPqPKQa6XsEhQsw1WGY3x9tirmOjcY aPIRoQCTn76hn2wzT8w== X-Proofpoint-GUID: j9CY8gmzovYH2UUt5Gru8-Mu4IAvnWFE X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX4giu77nzRfcq +PdOZ/CPgpFQ/N5E0jBkJlUh1D6wQ+NzaFzXZYEQ1AvvHXFB0WKjL+JGS9Up/4hORjvHe1MMmsV EYaHsV8XbcIhheN8jGPXK7wCY0kZPkv3fgjGVaC0QzIDsBJ6Hv8t X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0c6 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=XmuUcEe_06tgJQQ_RK4A:9 X-Proofpoint-ORIG-GUID: j9CY8gmzovYH2UUt5Gru8-Mu4IAvnWFE Content-Type: text/plain; charset="utf-8" From: John Garry Add mpath_bdev_getgeo() as a multipath block device .getgeo handler. Here we just redirect into the selected mpath_device disk fops->getgeo handler. Signed-off-by: John Garry --- lib/multipath.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index fc8ba8fc501f1..b90d4827963ac 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -505,6 +505,26 @@ static int mpath_bdev_ioctl(struct block_device *bdev,= blk_mode_t mode, return err; } =20 +static int mpath_bdev_getgeo(struct gendisk *disk, struct hd_geometry *geo) +{ + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + int srcu_idx, ret =3D -EWOULDBLOCK; + struct mpath_device *mpath_device; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (mpath_device) { + if (mpath_device->disk->fops->getgeo) + ret =3D mpath_device->disk->fops->getgeo( + mpath_device->disk, geo); + else + ret =3D -ENOTTY; /* See blkdev_getgeo */ + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return ret; +} + const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, @@ -517,6 +537,7 @@ const struct block_device_operations mpath_ops =3D { */ .compat_ioctl =3D blkdev_compat_ptr_ioctl, .report_zones =3D mpath_bdev_report_zones, + .getgeo =3D mpath_bdev_getgeo, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 79DDB42BC2E; Thu, 23 Jul 2026 09:37:34 +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=1784799455; cv=fail; b=D0I5l0j0IysnOXRZozeYdUhJKIZ/PhRjNXPT72D9eDsBznLQi12q787rp+Px9UWcMBS1FjNYAzpqGmPFWDeUcEwTz9omyJKSyTjNi0SIWvzYAOVhi3Pto/jDgKJyqWB4bjCibIsxiMG0MsfYN/pctv7DuD04HUOMe/x7R1v+PsA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799455; c=relaxed/simple; bh=2QLxqN29FI/4LUUcSZawJ40G58ca3Kr+oljqeNyDz08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QxIWbqTPlIVTN7NaY6ZfHrS2Lx9Ga/BPczxEU7X/NJ21GHk5rpsatkfh/GLeHeXsubsllJ7WsZRRMFR9prI7cigU+sBsc0ZN3cHh+N93hakhJVsvmQSitXg2AeRmFrkX6uvrH6rt9mGsCtWhDV3iI7P0lej+um99QNmbM/Wyftg= 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=kzvA3iSX; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=SaXra/SN; 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="kzvA3iSX"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="SaXra/SN" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJthrM3360515; Thu, 23 Jul 2026 09:37:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=8FZlxv8JREh+OZB2fliujlWhEUUc6aNAhIl1RbwmltI=; b= kzvA3iSXvnLT/2hCdrJtRF1GWgZGokP4nKHCAtIsd+b4HdESU0edBmB5/Rx5O9cV 49+h79Z+F9nB3YllKRY/4eMpKqyZNsuZvzEjMRNKk02qLjHKw+lyDmCea7wKfrl/ UknlCGoMeyQNywAU6xeWXkcjBx2efMTPCRV2coDyEqB5QbUn3RkS5U/gmyo0Di0R TilwWU9oEOqBOdef+BnoIYNNkCLTno7SYfvlWnUX9fCy7VH27wvKtM97MHLbCx6m ggih1XOQ41BpoSu4tl2zPrAkyEsUSvT5hSUpaVKkiQ5Ox0YB4JqeFUtFs8XhUPm9 333dlk1dcF3swQOP0niH9A== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6muv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:10 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XYno030082; Thu, 23 Jul 2026 09:37:09 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010003.outbound.protection.outlook.com [52.101.193.3]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxs5xfk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:09 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ugdNFQGnKGCS9j1ReHj5FQNdfIcD0pv6i9aJkzYBs5ssGACskzmag+yP7dj718Apby9yJxWETcIsAjjyQ7pn9gZwJYs8NOluIVOzZrVx91V5yJ13h3Cg+/AeEgdqZqNHTYvd7HaCCMwSpQ7E20lkp9oQlfVRLIH9U9m6KOTWhR+Wjg5OnR1MA/zC0DN3lyxPNmXsT36p94h6J+tuQD9u70loilvsZ/0VSWX6fPPwPl3/Yi2PBBrzIRUR+pgqoBU+FYUV/KSoFbSblCGSl1dIt8xbKhVpHY8hl6bdjMvJlb4JMdCYOF5YJcGvm68weU5x4KFtuBSpbGdgfdpx3tHTyw== 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=8FZlxv8JREh+OZB2fliujlWhEUUc6aNAhIl1RbwmltI=; b=iSFuG1v3Uw43mjd5P5OB1FYxHpatkXHz/hevPP7wGX7ygx8V6junbWQbICAIw/5W0xDJfX5wjRTvZGjjFUigR7VTB2Z31sLEIfER7K48q0xQddm5BsLVc3oWBCcIBS2cS88Hc6g6Pugq5tEFniMoR+oqs5Q/OFtxJDSp/l8o+3zDkT0dykwF6pcQ169Qn72xW3dDVhy6auHL2Kwu9nr0uoq9clECFydi0dRkXBM7+IkKNf3WJp/TQW/MlIsjOz/6UFCtp7qYB68uBZw1fvSwqyPMKiCnbzPdBw4pCxxDFPOI1L6a6JaaZQEbFuznl6nivBBRsvHiOb/StUdLAeBLng== 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=8FZlxv8JREh+OZB2fliujlWhEUUc6aNAhIl1RbwmltI=; b=SaXra/SNnLV5+myNMFeDB4tp2be9ceyV2ZDJTDp1T8i5xIvH6ErMAekjGhHh7L6yOg+UohS4vDV3PzDrumM6a58X5UZYXpeGEyK1O3X3qmZHO7TIS5Vcj4juZkhUudBFRddSQg8S6/6cH+F4xXP9pN1UHbZ+EnWV5NX+WiQFKSo= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:05 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:05 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 11/28] libmultipath: Add mpath_bdev_get_unique_id() Date: Thu, 23 Jul 2026 09:36:09 +0000 Message-ID: <20260723093627.2327456-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH5P221CA0011.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:1f2::21) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: f8ee48c8-84aa-4b7f-3507-08dee89df51d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: jrYMJ6APbMxikSw2jOuHrH2FISGriFx1dU4xOiMkdsgA6zkSN/E6iEZsXARbVMOQF1w9xxnpONci2wfNsSu6WpHQVl5V1EKKKFmXlhFXNvOmgRh4SxdPtM58nrLpf7i7uwQFDRBIe7gJkr3S4+dR0nI9CMp2ubNS/OHbv2X1IlklYhdx4STHd4o6r6BBJRIenAi+a+T7zEgoWKXL+Yl4LxzTZJ0iTk3a/zx/inIDh8035N2kCRTHG8F5QhQ3oxnjJ4KsXlTAHbdPz0rW5b/rnMAbQaSEWtLh4y2pjwnEMT39vkzNwbMJNY/BxdGF3yNqDZh00esbJ/1uGBLtBVzujT4sdKJUqKDLwlkkGgZEI9AX1XjioCvegt2yiQzCsCBNtPJYzbEKFRfMwVY9MOsBr6LKNwALBMBHQZOCGB9kXSylE9gO2op0eYGg96AhJDOkeEjHJwXMTW3ocwtVaZfGdijONUCY1yqqGpOk8PZRQlAl471YsdKgqcT9JN9sp7iKUvcdEBNgpsaw2lIi3j6A0EeRt+t4Rt/95Kh4oysjV1O1mQ6tqJokeYVqTbUDfVZg9JLsY2KAFtpO+gbUGn0U6l9TZESb2+BrRHVcy+k6IV+9J2wN4mheH7Q4yNuv9Bba435mBMXR/v+OrTwM1AgyrzH1USwgfkHnUg62wVTnW30= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nVEGxdRw38LFTjOECN4MYpfwAae9kBp2HN60N3ZyA4cAf7QMZlKnk5KLZ4mc?= =?us-ascii?Q?TluBwfyNM0hlEo0RsTGsdwsUEyxj24qb2Z/VQH2s3187BT1rCWG9c/dNfuMr?= =?us-ascii?Q?Rimce2PYS7JW4sgqsQaJCGPr2oWplw+u+HvZxQrKlGBsYH1DbYSnxHQoncoM?= =?us-ascii?Q?6+VifRu0wxWBeNTkkMuWK5BIEqVmDIJaiHJIqxP2tKbpVARXof9rh7hp7W5Z?= =?us-ascii?Q?XKRkHV+Spx6o8WVUtE7Pym3oC5reGj49XWIYDBtX7JG3LrcUrtLcirQdHUj0?= =?us-ascii?Q?wubmSnvwad3kSAybAhAo8Ducac2mQJBkx3I9W0y7O6PJoLsr/jWX9XcM72cr?= =?us-ascii?Q?7ZzoKVVe6hYE69KTte0/oM+Q5DMAA23TVwPknnImBFafL+lLjFaPmHBttf50?= =?us-ascii?Q?4YMOXGZu4wPqVwVvmxkGUxeIegzA2C6MOAsDPak8G8JJ9SiPWld4EzjowsBF?= =?us-ascii?Q?8Pt35PmWlG3UgfKzC0IEh2Fq2op5s3AyFm/DjmlbgfHVOAS07AS1HnctxXpb?= =?us-ascii?Q?hebf0AYRcUz2kGGvoPCc/K3Cdc+SZFvbWIabvVt7ULInlsIF4Yh71M8JEV3Z?= =?us-ascii?Q?jt9MYU5Gn+08X1zL4f4Wy0NdZRtzm97BTRXuzbp5hqZK0dKgyjfcQkf8j6u6?= =?us-ascii?Q?9ctIAa/x+PEdCGjJH3COYtMLj4gC5unbZSaPIRkBlk8mCuqawWSY2R0Qq6D9?= =?us-ascii?Q?wIc8CMLw+AFrVkJAu8isWf5W4bTMrd/jDSsPESX83fCe6P7VCrcBjT2dbsg3?= =?us-ascii?Q?cyTZmFH64gQDMUXtK8p9Lg6KwcfDDzZpZAwXQzqzbwiBDr+GbYvmfB8F9auu?= =?us-ascii?Q?YphnBX1wS3hx1sqLOA++6VNvHUmSUc10d2wSdB8D9BFPngobBWCueOs5HP0C?= =?us-ascii?Q?7OGnU5VXrvGItNzeJiK9O76gpu9XDVrhGerhWIpUgmXSsc7ImYVv551W6Qm8?= =?us-ascii?Q?bqM8iX4SMT0hbmrQkFsgJ66TlnSAwHwXxZjSMTKK4e/Aay21L1gcDJLZfngD?= =?us-ascii?Q?5gO/FdXhuwWlR7P8FEBkvNSiycy7RUYPH1RpyiQVeJJKTZ+qF70gaaCJrBPR?= =?us-ascii?Q?HKA6At/dk/ji3CVjD/5PW9LhhtgCHQL0Wd0Hv03nOdSlgVYWxwmET6LSEs+S?= =?us-ascii?Q?r3R/eOIVdBNb3dzHFqhwSxFnnKW+RWYSUfsB1Oh3XZ2mdOlsOF3gdgklJtep?= =?us-ascii?Q?gNfQPqGiK9SqoREENdYaptVCBiy1gd4o0KJEoS9Rz+cFCIISwRXgPnTWNR+k?= =?us-ascii?Q?uLH9hqz3Jf1TD0YPILEapz3BEH5WnaBydXljxD+NUQK4vXBHcaWItisq1McK?= =?us-ascii?Q?f8RsNUDE6QOshmO54406aY7cQusmIM9zF8KBpQNW4qRJEisNmodfAZOPguPw?= =?us-ascii?Q?X3IsibCP6FVELmoV+K79jGAw2bj1RrHk25vQKqzfWZuUok9Qh8ib0/6TXUDR?= =?us-ascii?Q?PoE0A84eZbzn1ODkCVD+6yRpT1h/z5tlB0dUnsTrTPbMRSPRABMnL/JHPFlO?= =?us-ascii?Q?8SBKGZ/HNXnybflb3uQMWsR9FLrEQoxPoP3G5+g59utD2Df3kH+1wDU4Uu9Q?= =?us-ascii?Q?+kOrWPT8h3u33SlO3rg2h8++o/Sr4uNPSCaNmppZdMykBKZqm0E6f/STd3o7?= =?us-ascii?Q?z5fSBAMmeiF/LygPmulnswxRaqsk5DWmqjjSKsPerC/kqA4qTzJd5LtfYSsB?= =?us-ascii?Q?zzAEHEiojN7kC3OIc1RZIZDkI+BnEZf1pcqUvKc++3pS6Km/vUWVIxW8Q2DY?= =?us-ascii?Q?HC7uLxw/EQ=3D=3D?= X-Exchange-RoutingPolicyChecked: EwsJ1RP4owXj3wWwsUobuVbapP4GAMBkaoQHhe8PzP7QYOfh5WzFwQLF73pTDeXh8QmdfrG8lzxgyfx588/+DEZkZE1pScORqJs0L12aq/b1uVQ6UzjFty7F7BcdZmXZ2lPlzusViSGleWTVMO9Hv65CzFHL+a6ANheWcfO0tL9/GTXFKnMnl5vVf2smRM1f2jroULre/4YanjXzgG335jud7IT6O9VyM2FYDAVEDd2OXwgNCnS1c+4Lu4yrOh3KinLK32ZnwQJ9asvWQlq5WyQt3Cc7YX2h9VII2zy5qjew+h5g+sYNQjnZgF/7gb56fhUWrjuJq6QKkkgUnlUzSg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Bh+LTJZ5MmhEg+8OIxOJ7lLWMtUskCkztVvweY/Gk4816v+1m+AfSLFcAn8eRqUVVA1vNr5tPU1IRdeAmktYxNWH7++ZV+Ds8lTBfEIGBr2DitoN+7Miw+VChe6PaSM7jsRWUFOu/zbksTwhM8Puk2C/9uYwUpkMRbAe50r8W6t0cLD+zQB3tkpXr3KTCnvcV5CIfZ1wOhB1tZNdvyZ+0Yb8ve0IIMAAaZbzrDYj6YDP5nviiY3GEdUU5QqSXMS9TNaZdael4Lzn4CSiaLE9KwrFEsmoZ5DkSVKPIW/QNljGGJUoGGuJQYC7qeyGAj04EqSZnQN9Tr0ETuTR/HyWUAYf3HFGIbVeYLzotZgg0CZA5VaNnwgF3HT8I+aYvTy2gwkgdOV4ooB5X/J759qcFOQxGjP9YdbhImCJz2HnjA3q4nyC3/uU+6FW8Cqq4L9b7I3WaOTKNFLFXrAWHbGmXKRxK0r33LPztrksqysiE4a1solno/mtdwGqzMVKDUAT5E8cWTlrbQrIo9vXC8+sBpP6rvAImOp32eTXpPwzdxU0QdXD+khEOC+4qqJkDPWzaHnYr7FXSffcXsT4zXIseuExwRy2iRd4bRh09Nt3qI4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8ee48c8-84aa-4b7f-3507-08dee89df51d X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:05.4976 (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: 7l4AjMt1T7O1oGTXWyIEKwNI8rrjhzMGxlWupVbrM7JxsLfJ3KGcBLZMD6zXSnaV2wSRx5c6AohBLiMBkaWh8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 mlxscore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX6GKtLedfzI1y dyXXpMIGACTi1w78Z2gJyOzf0kQkFLZm7xg9Tm4SWmSJZdYflmhFWFGvhjjO7Gbd21fPi02q8WZ D/ycukxIu1wyOj6NE5CyfiRiRVktsl9R0BVXZGlzS8YyKIXRVxgkJ/Wp1oBO0S4DRBiAEZD5pPs nJ73PgGKRkIymZdzzXwJVuK6lXd+zALbFOCRKBK5VEUVlXp9oIc3JCR+FnHaLP9ZW4uE51SYpZ4 y+S3qCg3HrIdrF3qHB1xKN3Pj/ELgd2gAlnWdDGODtOZyvQR/ZtgrkA6GJ/gmh0fqgYekBetaPD N0YOWqbJD5WS7gs4xSth+setwKYNcHhCWxXQuh2ZVVnWSjwNFUg49ha7kPOrd3UNvRcp7fj9/vb jexTIJNQ0gaH0nZ7DjNtvqQh1iGqNkcSkwBhhfHJvB3KAwVu657uCj6yh+77UregWDGggkUJv5O Wwt0o6Lq4c6+0eqb3HnFuQXGKElktddPusIcdzsk= X-Proofpoint-GUID: z87inY--TrvaJiyieZyfjPKXCU72aBHm X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX9xwWHKuiWy2+ JNaGpd718U1ahX/E1ac2EoeMlPOoJlWAFlAmCpzYdKsiuZMEkGw0hbTVXjXPBuWNsGYXw6kewkn wRfo7sTFag7He8WSfzk6eH7TpwKP/zX+HegB/af6M7MehudQMa17 X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0c6 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=9Fc21ttQGwgXjhTEdUEA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13523 X-Proofpoint-ORIG-GUID: z87inY--TrvaJiyieZyfjPKXCU72aBHm Content-Type: text/plain; charset="utf-8" Add mpath_bdev_get_unique_id() as a multipath block device .get_unique_id handler. Signed-off-by: John Garry --- lib/multipath.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index b90d4827963ac..858801d052ff1 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -478,6 +478,27 @@ static void mpath_bdev_release(struct gendisk *disk) mpath_put_head(mpath_head); } =20 +static int mpath_bdev_get_unique_id(struct gendisk *disk, u8 id[16], + enum blk_unique_id type) +{ + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + int srcu_idx, ret =3D -EWOULDBLOCK; + struct mpath_device *mpath_device; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (mpath_device) { + if (mpath_device->disk->fops->get_unique_id) + ret =3D mpath_device->disk->fops->get_unique_id( + mpath_device->disk, id, type); + else + ret =3D 0; /* referencing __dm_get_unique_id() */ + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return ret; +} + static int mpath_bdev_ioctl(struct block_device *bdev, blk_mode_t mode, unsigned int cmd, unsigned long arg) { @@ -536,6 +557,7 @@ const struct block_device_operations mpath_ops =3D { * avoid their custom compat_ioctl implementation. */ .compat_ioctl =3D blkdev_compat_ptr_ioctl, + .get_unique_id =3D mpath_bdev_get_unique_id, .report_zones =3D mpath_bdev_report_zones, .getgeo =3D mpath_bdev_getgeo, }; --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 5E3DA42A7BB; Thu, 23 Jul 2026 09:38:26 +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=1784799508; cv=fail; b=SQN70nubfu98AoWV7fg1WYd1F2ds38AhwEj7IoHThIt6DNMi9IiM3bA1cT2zJV9/LpmESBhpK9aFC1lz7khJ3YweT0ntrX3BAsAEL26vKFxsTegu/Y3MkacN/LGbfsmHw6onU/PELn0jNgx23t/LD87PXqsdtWgeGoaWYHU1LO0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799508; c=relaxed/simple; bh=6PpzII+tLOGLjy0Xa2gKITREMUr66wbpnSdMBH+cyx8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=boM8n4FJWYTQjh3QZEyBKmiHcQoxUXvZnnylvW1SKYr2oNoZpJnqpTbkk5f/uFZXLUW2dIVVW0wGDNaKMN5EkukpV/cYYejWNggcQGYbsRmISMYfeTuUjlaMwyu0eViHQxVMVswHNBZRdPreS4Ht9rxStzf/z4kMDJ+3hrD9Q4M= 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=p9/nOtwi; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=UaanbVZ4; 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="p9/nOtwi"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="UaanbVZ4" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJthbn3353529; Thu, 23 Jul 2026 09:37:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=8WY5zpBveHhpGo39RTEV8d6/FM9E1MSDdqlGBk7PMbQ=; b= p9/nOtwiuGBO97yz/AcYGBo44ZWZ2WqsuHAkwI5LGvXoqxQvy5Q7r5Iwv6xAzu0y pXLcxpql7WUx67IIfmed3h6Wgir2KhJaGITIX5E1ijvhQj8m9S9Uw4uSCwWBFiuV GEQWX9FhoI6J2K6ZeMDF1iKPtb1RmGY0jUYxAookjPYsNbHvrpaIkubNz1/QAbRQ S1y5GcwG2YgoEASW/W4VTGS6DDLxK4BWYMzgwiv582XmNl/dJjSThpmQ2WO5sHek DOrxRlTLR14dieaWOMm9pCmTVtDNSF69BmpoblSs7Gw7JZ0cwJYW+tblQ3oyXW0g 5ltvDQQFswYd8s6qY5NZMA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1mv6kp0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:10 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XYnq030082; Thu, 23 Jul 2026 09:37:10 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010003.outbound.protection.outlook.com [52.101.193.3]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxs5xfk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:09 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k8T33upQZRsMrxNWJwBT88d33Kye6cDNWH+SqvpU3gz2jVLov3/rd+M6+dzeUyMpy4Oizav118xdlL9GD59Df5wrUABQMyaFL/z8t32lNrE+qRpv2C+23oB0Yk8RPEwsa8e2i4K7HpuJ3mPYSaNgmsuQUm+rwX5qoGVwYbPT9C5vIq6XUKxqRHelOIeVfrfwIEcb+O2ZFG8/kW1c3GdtT8SxF+jRBmFfTNY4jyaK0Yk9TpVRse+VyEzF6xtAK34cyM9V9G43WZ2lZomdB9AI8HG2Z8GYz+wF/s+MhVEHdVUMjpF+CaCCPm05cC+QlmLKS9zs4GQwowcCfSf9+H4xJw== 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=8WY5zpBveHhpGo39RTEV8d6/FM9E1MSDdqlGBk7PMbQ=; b=M/Rvs1kJ3mIrtMVuYMYOIEBvpOVkKCujt4QsqgaII7SBH6b9WWws4xyhk3ZPHC6prstXnfpDE2GHvRmmRKrFppFqj84IWv6kx33mnWjY/E9BAvkEPchlpIZK1VQgIdgwYUW+Eo5L+9R6cclAD03gCTt56NfttQlMd8iHgJmBKCvTf6TYs3H0vg7HT+9qAf3PM+fR2BZuMX7VsveeoiTioZDj7kr/bFvhFL08W1qvyr3Ec3mrHPMx1Vk/yVRDYtJUcH+WM5r0VftUfoSZVt7TuVDV3fr07sHpLOpwu5eFvBQlsb4rDiHtENT+cywHPwNqDeHRxZTJH3778gKpZRewhg== 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=8WY5zpBveHhpGo39RTEV8d6/FM9E1MSDdqlGBk7PMbQ=; b=UaanbVZ4NCvi0wkvPJQICcdKt/dBe8a1NeBUHTRen+60EbN1fWE2qhSyqamqOk62/cOWOdpb76Fv0NauamG5h6TqH04lOISUJRxK6sZnm57YRQw4PJwxr/tsPPyNRUF7QFsepaQYpqlF8bgT15Hus9abNWaeXZbjmsftQRtFw4Y= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:07 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:07 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 12/28] scsi-multipath: introduce basic SCSI device support Date: Thu, 23 Jul 2026 09:36:10 +0000 Message-ID: <20260723093627.2327456-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH5P221CA0022.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:1f2::23) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: b22a8c71-72ec-4186-233c-08dee89df5eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: KW7kq1VFHCgTODlDbV0PbMOG95FcyD0Kg/X+aif1ZbmOm87O0oqPaskkjged2pQF+S2r6oYIq01NfUFZc+SwBEMIk+IugGyppsN7EDJ5UXpyyPfOFrRMYwfVePkUhCJQSPzXiDWLFr0p/A/LggCEiqZcTePIgK1OwOrIBgpWhF3orgFADv7PHQSo/IbjC3WeFOl6P1MbRsay2zj4922MOCozCPteCNWl7YHDpZjG4B8igaeGyaxaWpIDhCOz4GWTdrOQ50Hd9HV88lmYgzg+bzrbtsfpt6DTMa5ukLs+6poe/pKrzY3ew9aGAfbxCZaPv1podBiyWPCrFV018xEijbsil8/M2dT1XsOvSZ77WfNeoT1NE5HbTJIg4y0/1XDdo+qlcTGmXmYExox7lwrPtFKB3AYLoK6AmyM+pXMFY0vUYl6BUrlJR+tbZgQBSaURRsgBfFWE4OyYu1dPaf3kn/ME5ZIb03jznzdbhy1Byzev/yxcFg3IDQLSPIATPjyl+I5wSQVbEhT6I1ktBtAazCdsc+KgTqlp3tVmEsHimPFxQQeoQdEY4d9GuyeopLO9M3s/LAIC8CPwv8qdMHPLrXJYmZ4gMPs3C7JHWdfQXHcCxcHTskwPqG0n3bOPJnaExPHKBL8cMBZ3+MG5YwSpYDEo4LHks6MU0SmWw97F11w= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?odsM6570R3n6qwlUfnYqqqWSQVJVje6OHENG4DQjf33IU67HP4tbVf/d4Ikr?= =?us-ascii?Q?uDzX+tmXq2pwEhg+o4MiLoI85tkMkPz1FnCFnNW+Wv1fe++SZCOF0Kmwn2Rw?= =?us-ascii?Q?j2YuI2QuDiDSIxUonFMjwX1gzyDw8fZ7aAii7Dn+Z54b2moGOvmbPZjFnhpl?= =?us-ascii?Q?LMfqCihirC/fuOJgANqC9gc4I3sZ+nLLVsylaytFv0m9V1kwrcOlmUTynwwG?= =?us-ascii?Q?clfeIPL0hFYb4PuaCw4uYGZE01wNjRsDyN+yOH8j4UGT9+T2axdayMb0jTPy?= =?us-ascii?Q?/wkRP3M0tqb9lQUG7onsvtWNMvCoSUoP1ffAGU7CwtfaTkQpN+oB7/GiAne9?= =?us-ascii?Q?7oEc61H4+hJSER1tUD1O2Az+a4KZJapDYEqc1EXmIi3rom06WXVyf8b28M/K?= =?us-ascii?Q?MEHmHGpL9tvPIY8usQNAPVdxUuZxGrjRtasFRcIA7IYzoTBlqi/NGVR4w9cG?= =?us-ascii?Q?ddlmmgBYVHrYomF8pQngAsaPIsRz/IrYKhAL+WIw0fRKL51ylAs1DDXrTJOk?= =?us-ascii?Q?v46hGZqflJPqtvePn7NdcYgvdkO7yfi7Wf6fhN8Mc59uuE+oHpRjndiTk3+i?= =?us-ascii?Q?OQmDrz51apCqfPZiODnVkMK2L8LGDTmAdOKqw3y0QWmgiDVNWWAuceBecdEY?= =?us-ascii?Q?PFDVi4l4eoIG6ucckDEfu1b0TBPGSgVOHzjEWeUWtMTtYSz4eZSPBUnS+xiA?= =?us-ascii?Q?pU+6hYJIGOjxsxiQGmHRf8SYGSlCEX8LW4EAcbClglD1VGeSWRolELF4Zlog?= =?us-ascii?Q?XsHAI2NY1tmJgOJTZMicwO2RJsOfajTr/9ieWgPxVJ9DmME7r9eW9KSm5tuG?= =?us-ascii?Q?D9Lunia35XM3cqAAw5tubDIO9wpK469u/xCOoBTc9EUrY2L1FlJ40yhAYqtq?= =?us-ascii?Q?uGGl1f1WIuVy+e+huRHkDDNPmvTtl8A8E4W1SoV1Cy4OrfjHtGmkG8lcnxDx?= =?us-ascii?Q?yK/SgBBAW1Bv951tfofFt81zsbxmzd3peSRCVH3yWTKH3UC1kh+s3y+MDChD?= =?us-ascii?Q?fCdTlgFPIOmgqvtEQTwTKdm5Yddl4gIJCAoZUdoR9TGUOhP26qZyuKJBzAn4?= =?us-ascii?Q?HKeM4WwW2f3WPDtXC/lwZcyHKUxTr1HUPr9ttI0rw/JLL62pdDzVzMvCsZGC?= =?us-ascii?Q?lmR875J8a8uuVf27fmKZ5fWtvcN0GKAdSuM+48OsljFns9y54/PW1HRmCAv5?= =?us-ascii?Q?0gLaE5nKxFRSGQ3VbEqPsmIKGVxsy4VtX1gbfnnBGOYOSkKhA7XYc5YibE7S?= =?us-ascii?Q?V5s7T2zxHZJLije5BjBpXx5booYabWT7tOKcvD7Ipbl48AcC96C2redsUkHH?= =?us-ascii?Q?NY2Y3WzMdDzV7YcUfiMdq6A6wDOKWKqZCkZWJ35QhBqWLlNRZ9WZLq3i1nHr?= =?us-ascii?Q?GYdaEsrGKF1481t7MEDWmgqq++ANG1nRGyFVvasa/LJt1jiuQsshEQ0/zGW8?= =?us-ascii?Q?uhXUVwsTl5nh9cMb9KPUuKNjXFxsvP7AOIyrdwGOFf8MFzFBom9SxIU7VRnV?= =?us-ascii?Q?OI9UDOWxm3+X2V763JRfNcQv7ZvoisOy22Xj7zJaCaIaA4HJv3cKLb+ylUxF?= =?us-ascii?Q?mzFDAPQX3YiGF28cHlKn5iKivhSUMHW8d3vZjxfWDRD0uuMlfEHfCfupsxU0?= =?us-ascii?Q?+r3ycngeJH+Uixyy31saQIYg+73DqhOXGxLDlCjVcEXSHcJFB/4acSpC98d4?= =?us-ascii?Q?tmgeGR73uxgdmpJU6k+ojyM1ILT+DLb0uh3KfLtAQKarGQwIbdcNaCVDjbCg?= =?us-ascii?Q?AN+B9w51SQ=3D=3D?= X-Exchange-RoutingPolicyChecked: rGYLvW9qRtdt/UMZSqxpOxdgAcA36fb6hOt2t+Of/LTUZfff8hoc3MyVeMcYBdNeUFwv32uv4RgflkJyOfCtW3sUbuzr7WsWkB3okfOVITFQuw/iTqzzl5S3Ex1/taI3BoXBe4P3Y5fSa4i1ZzeBlxtuW3lc7mNtMWyq6iuqpFCuXEzp0aH4C/cKUXZgKUxmK6t2c4cdPLr48ejwHeey4EirYMYM+WwXU4zOGvICQHY6ago3eZoGJd/W9dxpzO9i1BfpJAVUHXwt8ITwh+MSF6keMUgPcVpQ9EiJ6UeWIztivi6cgRFg1PEdUhc8nmlMHLPTw4xgrR2T4Y4oo38Wjg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SvpDLsgEKCZaKcBie3zVuXoY8/xP+c8OjsEEIisKml4lSTYecQxF7zS8eqZ3A2D+0NzgOVnbhr6r0vrCtNRNiso6l1f200Bt36d5fSu/RM6WgqbDqdaK3rE6qxOGWLcUyx/XBiRz2m5z2CuDVZHmP+aeP6u8zyUr0O+05Uu/xe6kUjulgo3z2u7brYYUU6K/+9qw7yBcLZA34lcvsKuxdBsYQTw+nefJycT5gFEIJuYkTvzcy/GIapbf69YW5rp2p2K/rqT/luxAdm5FH2AyWRsS1h5HWI2wvWBoN0Kf7aD87tFTt4BEM4m8gX1WfsjPZxJMAldBPmgZSmhLXzlNuGF0NviFhxE6ww87ZEN9qxVBRQW9dvOPx2hG4MjXeO53lsNytFmeMj94vG2WQi5RJKdZ2m5FVXjEf2CHN1DOa3jbUyG9O4/H6YlPlprNlvFbM4Sk/cXjz5LEb8AphUm8BCCFUB5+PrMneZjwDr23tMbmmoacUZVvgpNiyez/hXTh4RfMgePArlCP295JBL0DzdaJIpQJJVeCKfYbYXKQgWG8a9q2712sT+mUz0IAu0xhRb+o61UsTMwlRVZwzfTvKKeBGlVaZcY4s/5wGB185Xc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b22a8c71-72ec-4186-233c-08dee89df5eb X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:06.8878 (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: HI3Fi4/UL0vnyU3ZvdFuxmMH1xP4g3qkQWIvtn5t7nklRuVMDHUiYcy3y4fIjIAEZQx+Pl4g8LDvWYh3x9/QtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 mlxscore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-GUID: FaIsBb0QXqF7LhC5lVw-H-FJeQO3yrLy X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/tk3EVW0dHdC jrYg0d0zedWrsIgfNm5PlHryQAhvLRSdOXNE147zBLnWLCerEhEDu9+ZuiZan43hl5zBg52SMIg 92YzGFYMajF7qpOCs7Jts+C1bCZih6CvDbrshdI6ai0aMsyGJeEt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX0DOcrwYNvpE2 26XKfTn9iMFVOMc4rHhgCQMHGlTVYhLvGODruYvjnZndBYj9ExvK2GzG7NhgTLtITmRwklhklOh 3jCJNKhYao29Eh72kd+r7Fg8FUfDZRNnvjA5CSR15DeGIpgXCPdftg2XF0UFMtsigypB8X8BVPn Ssk6kOOJM8LC0cHxczsod2GJz+GQAxaKciq4R2msswdw/WbzwoAEvFQf1w7BmlSbonIKviVetSo dZEd463hAzSsNMayYax/ZdSNnSCIJg7Nk/CQbN74eHsb+zhTcRdF3vbyCJN8Njd9nGeOyw9U+F4 QjF/GMJrXIrnddXbezNi7HflfDEd+RzqBge386kufvQRS0uMGiSyAGiL6jlCeQVZaUQtdjWAFVA F7c7bOIKWbDyjowKf457I9Q6NXTJn9M8yLdmIxU1ljgE7nEWHXWKynFUp0qbEDOLlzdIZ17ws1O 5MebD2Dn77WbOHcPyIj3sMipK4eW640U88TT2CAM= X-Authority-Analysis: v=2.4 cv=ZpPd7d7G c=1 sm=1 tr=0 ts=6a61e0c6 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=yPCof4ZbAAAA:8 a=pCOl5fTshOrEa-n2-VQA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13523 X-Proofpoint-ORIG-GUID: FaIsBb0QXqF7LhC5lVw-H-FJeQO3yrLy Content-Type: text/plain; charset="utf-8" For a scsi_device to support multipath, introduce structure scsi_mpath_device to hold multipath-specific details. Like NS structure for NVME, scsi_mpath_device holds the mpath_device structure to device management and path selection. A module param are introduced to enable multipath - the following modes are available: - on - off - always SCSI multipath will only be available until the following conditions: - scsi_multipath enabled and implicit ALUA supported and unique ID available in VPD page 83. - scsi_multipath always mode and unique ID available in VPD page 83 The scsi_device structure contains a pointer to scsi_mpath_device; having this pointer set or unset indicates whether multipath is enabled or disabled for the scsi_device. Signed-off-by: John Garry --- drivers/scsi/Kconfig | 10 +++ drivers/scsi/Makefile | 1 + drivers/scsi/scsi.c | 8 +- drivers/scsi/scsi_multipath.c | 146 ++++++++++++++++++++++++++++++++++ drivers/scsi/scsi_scan.c | 4 + drivers/scsi/scsi_sysfs.c | 2 + include/scsi/scsi_device.h | 2 + include/scsi/scsi_multipath.h | 55 +++++++++++++ 8 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 drivers/scsi/scsi_multipath.c create mode 100644 include/scsi/scsi_multipath.h diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index c3042393af234..d6c31df454825 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig @@ -76,6 +76,16 @@ config SCSI_LIB_KUNIT_TEST =20 If unsure say N. =20 +config SCSI_MULTIPATH + bool "SCSI multipath support (EXPERIMENTAL)" + depends on SCSI_MOD + select LIBMULTIPATH + help + This option enables support for native SCSI multipath support for + SCSI host. + + If unsure say N. + comment "SCSI support type (disk, tape, CD-ROM)" depends on SCSI =20 diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile index 842c254bb2269..04f9c2e51fcbd 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile @@ -168,6 +168,7 @@ scsi_mod-y +=3D scsi_trace.o scsi_logging.o scsi_mod-$(CONFIG_PM) +=3D scsi_pm.o scsi_mod-$(CONFIG_SCSI_DH) +=3D scsi_dh.o scsi_mod-$(CONFIG_BLK_DEV_BSG) +=3D scsi_bsg.o +scsi_mod-$(CONFIG_SCSI_MULTIPATH) +=3D scsi_multipath.o =20 hv_storvsc-y :=3D storvsc_drv.o =20 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 76cdad063f7bc..70aa1dbeacebf 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -64,6 +64,7 @@ #include #include #include +#include #include =20 #include "scsi_priv.h" @@ -1042,12 +1043,16 @@ static int __init init_scsi(void) error =3D scsi_sysfs_register(); if (error) goto cleanup_sysctl; + error =3D scsi_multipath_init(); + if (error) + goto cleanup_sysfs; =20 scsi_netlink_init(); =20 printk(KERN_NOTICE "SCSI subsystem initialized\n"); return 0; - +cleanup_sysfs: + scsi_sysfs_unregister(); cleanup_sysctl: scsi_exit_sysctl(); cleanup_hosts: @@ -1066,6 +1071,7 @@ static int __init init_scsi(void) static void __exit exit_scsi(void) { scsi_netlink_exit(); + scsi_multipath_exit(); scsi_sysfs_unregister(); scsi_exit_sysctl(); scsi_exit_hosts(); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c new file mode 100644 index 0000000000000..b9b58a3641aa2 --- /dev/null +++ b/drivers/scsi/scsi_multipath.c @@ -0,0 +1,146 @@ +// SPDX-License-Indentifier: GPL-2.0 +/* + * Copyright (c) 2026 Oracle Corp + * + */ + +#include +#include +#include +#include +#include +#include + +#include "scsi_priv.h" + +#define TPGS_MODE_IMPLICIT 0x1 + +enum { + SCSI_MULTIPATH_OFF, + SCSI_MULTIPATH_ON, + SCSI_MULTIPATH_ALWAYS, +}; + +static const char *scsi_multipath_modes[] =3D { + [SCSI_MULTIPATH_OFF] =3D "off", + [SCSI_MULTIPATH_ON] =3D "on", + [SCSI_MULTIPATH_ALWAYS] =3D "always", +}; + +static int scsi_multipath =3D SCSI_MULTIPATH_OFF; + +static int scsi_multipath_param_set(const char *val, const struct kernel_p= aram *kp) +{ + int mode; + + if (!val) + return -EINVAL; + mode =3D __sysfs_match_string(scsi_multipath_modes, + ARRAY_SIZE(scsi_multipath_modes), val); + + if (mode < 0) + return mode; + scsi_multipath =3D mode; + return 0; +} + +static int scsi_multipath_param_get(char *buf, const struct kernel_param *= kp) +{ + return sprintf(buf, "%s\n", scsi_multipath_modes[scsi_multipath]); +} + +static const struct kernel_param_ops multipath_param_ops =3D { + .set =3D scsi_multipath_param_set, + .get =3D scsi_multipath_param_get, +}; + +module_param_cb(multipath, &multipath_param_ops, &scsi_multipath, 0444); +MODULE_PARM_DESC(multipath, "turn on native multipath support, options: on= , off, always"); + +static int scsi_mpath_unique_lun_id(struct scsi_device *sdev) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + int ret; + + ret =3D scsi_vpd_lun_id(sdev, scsi_mpath_dev->device_id_str, + SCSI_MPATH_DEVICE_ID_LEN); + if (ret < 0) + return ret; + + return 0; +} + +static int scsi_multipath_sdev_init(struct scsi_device *sdev) +{ + struct Scsi_Host *shost =3D sdev->host; + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + + scsi_mpath_dev =3D kzalloc(sizeof(*scsi_mpath_dev), GFP_KERNEL); + if (!scsi_mpath_dev) + return -ENOMEM; + scsi_mpath_dev->sdev =3D sdev; + sdev->scsi_mpath_dev =3D scsi_mpath_dev; + + mpath_device =3D &scsi_mpath_dev->mpath_device; + mpath_device->numa_node =3D dev_to_node(shost->dma_dev); + mpath_device->access_state =3D MPATH_STATE_OPTIMIZED; + + return 0; +} + +static void scsi_multipath_sdev_uninit(struct scsi_device *sdev) +{ + kfree(sdev->scsi_mpath_dev); + sdev->scsi_mpath_dev =3D NULL; +} + +int scsi_mpath_dev_alloc(struct scsi_device *sdev) +{ + int ret; + + if (scsi_multipath =3D=3D SCSI_MULTIPATH_OFF) + return 0; + + if (!(scsi_device_tpgs(sdev) & TPGS_MODE_IMPLICIT) && + (scsi_multipath !=3D SCSI_MULTIPATH_ALWAYS)) { + sdev_printk(KERN_DEBUG, sdev, "IMPLICIT TPGS are required for multipath = support\n"); + return 0; + } + + ret =3D scsi_multipath_sdev_init(sdev); + if (ret) + return ret; + + ret =3D scsi_mpath_unique_lun_id(sdev); + if (ret < 0) + goto out_uninit; + + return 0; + +out_uninit: + scsi_multipath_sdev_uninit(sdev); + return 0; +} + +void scsi_mpath_dev_release(struct scsi_device *sdev) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + + if (!scsi_mpath_dev) + return; + + scsi_multipath_sdev_uninit(sdev); +} + +int __init scsi_multipath_init(void) +{ + return 0; +} + +void __exit scsi_multipath_exit(void) +{ +} + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("scsi_multipath"); diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index e27da038603a2..3f1ac302719c2 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -46,6 +46,7 @@ #include #include #include +#include =20 #include "scsi_priv.h" #include "scsi_logging.h" @@ -1130,6 +1131,9 @@ static int scsi_add_lun(struct scsi_device *sdev, uns= igned char *inq_result, sdev->max_queue_depth =3D sdev->queue_depth; WARN_ON_ONCE(sdev->max_queue_depth > sdev->budget_map.depth); =20 + if (scsi_mpath_dev_alloc(sdev)) + return SCSI_SCAN_NO_RESPONSE; + /* * Ok, the device is now all set up, we can * register it and tell the rest of the kernel diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index dfc3559e7e04f..2f80d703ce640 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include "scsi_priv.h" #include "scsi_logging.h" @@ -455,6 +456,7 @@ static void scsi_device_dev_release(struct device *dev) might_sleep(); =20 scsi_dh_release_device(sdev); + scsi_mpath_dev_release(sdev); =20 parent =3D sdev->sdev_gendev.parent; =20 diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 029f5115b2ea0..40a435e66b34e 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -280,6 +280,8 @@ struct scsi_device { struct device sdev_gendev, sdev_dev; =20 + struct scsi_mpath_device *scsi_mpath_dev; + struct work_struct requeue_work; =20 struct scsi_device_handler *handler; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h new file mode 100644 index 0000000000000..d3d410dafd17a --- /dev/null +++ b/include/scsi/scsi_multipath.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _SCSI_SCSI_MULTIPATH_H +#define _SCSI_SCSI_MULTIPATH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_SCSI_MULTIPATH +#define SCSI_MPATH_DEVICE_ID_LEN 256 + +struct scsi_mpath_device { + struct mpath_device mpath_device; + struct scsi_device *sdev; + + char device_id_str[SCSI_MPATH_DEVICE_ID_LEN]; +}; +#define to_scsi_mpath_device(d) \ + container_of(d, struct scsi_mpath_device, mpath_device) + +int scsi_mpath_dev_alloc(struct scsi_device *sdev); +void scsi_mpath_dev_release(struct scsi_device *sdev); +int scsi_multipath_init(void); +void scsi_multipath_exit(void); +#else /* CONFIG_SCSI_MULTIPATH */ + +struct scsi_mpath_device { +}; + +static inline int scsi_mpath_dev_alloc(struct scsi_device *sdev) +{ + return 0; +} +static inline void scsi_mpath_dev_release(struct scsi_device *sdev) +{ +} +static inline int scsi_multipath_init(void) +{ + return 0; +} +static inline void scsi_multipath_exit(void) +{ +} +#endif /* CONFIG_SCSI_MULTIPATH */ +#endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 78FFD432E85; Thu, 23 Jul 2026 09:37:38 +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=1784799460; cv=fail; b=kPD8pPNXnVR2rCC95uw8x/LYN9H7G5SQSrbBRZi3wS0N6Q+a3OiYWwQbiEF6YgSy8tAOapSI5CH/ljitggk81Wn+T2466vXwBnBfUY6z7/EksRebsl5uyF60Ga3g9vLFNXK6NZU7mulkJpVxv151W297MOGEGHHz9WnIL9Tfkx4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799460; c=relaxed/simple; bh=urPaq2w441c8G6b29NuPR6UUMlfY9/XTp+TxQ0OHp4k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bUqopC8LD4SKb1jgSvoMKK4q0EYogRWFuUAOyDoMLQe78n8O3XlIsMY2NrmtjmPQv7M/rc2ZTLwHE2SS54YSh+DR2/0ZjnZoVuI5AdcRRKTFH0g9BEUJhW+JbHy7//m0RUOVnkImZsI2aEpdDFJEwB4p+6AUbZZ74hFf/5Gr45g= 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=bciuhJe+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=K0B7nfuH; 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="bciuhJe+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="K0B7nfuH" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtZbC3391769; Thu, 23 Jul 2026 09:37:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=gNgGC0xtc8EfdX7lZEYykCeK6U4aig5OWHUyoHKtOzc=; b= bciuhJe+9lkS6WSxIF+XPEepevyWQnA1vqzjOOFAvvKH3+EC6ZUHJlUXX9+nasbZ vAPeuQg0Zm64s1LnlpXOgwgPHKotcgEKRTt7E1pijvFhQjZ8ULHl/eOb/moGwWyE nHfDABCoQrFYxLwdxGt7rFDm+znVKYfDg1zVFLoZLk1PFvIAtp4VqtQIQp0OcCvd Ch9PbzI4/2AX7ONEMVMlcNaIobv9OnTbIZuUDwj7LM2dJPdb5Ca17lgr7+s+EhsT 1A/tyFm2xGr7SFTnuwA6b/g/Dvc1txF/U+ObPmD5rv1YI5TYB6R2LYxqX74Rw01M R0L7UQJhyAXpGha+B5ypwA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1tjxn58-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:13 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9NVo9008033; Thu, 23 Jul 2026 09:37:12 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010019.outbound.protection.outlook.com [52.101.193.19]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxrwmtr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:12 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a4/5mMOYgjiBxhXE0hrIKwnMAOAPXeiPsIHtdLdrVE6E9299/nMoD1weU47t+L/4GjHA6GPEVV//tbgGmwlpeNo7Q6oRv9Q+nFuHtblgcdgAtkIYpklgjPgl9WE/qIFPhe3WvlL5jq4Z0LrA7LFg7GYCNbVV6iPJoNQrFODdXCKmclt7cilD8z2QzQL6TJHq56xd9Gdy5XpaI1ChWPi778JC8nz1bLARijNt1b6KKCkjhj82HyxCLouRXfgy0+yTWmSIFhYpY9I34udcBCcD+xxws4wqMkziiTtZDZ2S7njWu43RF26u2zv/0IVOcAZZZR0J/mbaFW0AFiBpdAqX9A== 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=gNgGC0xtc8EfdX7lZEYykCeK6U4aig5OWHUyoHKtOzc=; b=foMnlHkzOue2p7nrNRzP9mklGAFY9iBSctUI7mxHLvOI/ekK4hWEZC51J+JPaRNpHOsvjLkPkU0iEZw0EToZrLx6lHBr7fNFrcFA6NbEAMx/432xC19ALp+4LrCRoIE7+8+Qgsf4pT53TD7YE093Ocoi2Tj//ExdtXdyC0euKdXFV+YLsLadKhLoT49aKSp3xOVvBQqKvxjLqQ8fJSM1JTezNmC4FMpkPw1UGSOyR6njhjaz/PmV45I7BO4yltOHjuUflxNVau2TIZN+a+R4+IYZ9dwEig90Uoqzhb5dq2cFDEAWlf/BkeHGsYyUmvOp8HI7N2w7bs5OKzrXWWBFLQ== 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=gNgGC0xtc8EfdX7lZEYykCeK6U4aig5OWHUyoHKtOzc=; b=K0B7nfuHEmwBPCTdyql3XcFgXFcUPm5xML9DyRiZG8b12OJxru/pR6uhJyf3907AuLY8QBUqLR8SsOkS91+O5gw+piO0juveNrkornhATusPTpYhV1jN3BoG4uxxXir5XRsQ0TvTsaJcWFJReyXCmHzvQxUB31aI58n4anYP7u4= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:08 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:08 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 13/28] scsi-multipath: introduce scsi_device head structure Date: Thu, 23 Jul 2026 09:36:11 +0000 Message-ID: <20260723093627.2327456-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P221CA0045.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::15) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 02df1ea7-c100-47a5-0f5f-08dee89df6ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 7Gkku4LqX5vz/QG3J6vvi2pNGFH4csAViCLvSGwrWU+VDsNeJnKFwhaGHPl6eXHoYNT4Op6YgapGHDSgLxcjUxSlPwzJnxxuOmd3WvHVTUbQkJgz+Eyrn7E7ztTnaKBpbZhsMkw/k5OSZXagOihXoPPUQ2AiW6XUxz9L+xYH2hBWFAA7ZRUlxPrPRKx1RSivhuCO5AQe7OZvHyX5gk0zfMdEaN3y40IDiRzIJpRHONtLxYJaxCzxj/tqjaNbu/s43FUJdSeeVG66diueHZOICbfDxxG6e/XqXafsjEAhL4Ydh92ZH+2OCcgIWl4skz0YupMR+AWIEnKQZd9VTUSTMPzBjLi8WhDZvA08cTWoADA9sLx9nAMmL4sZZv/x+rUiKdUKhhM3ELq9DUfc2RCgodUCnCaaQA2LmqN5jKERqr15WjIS4pVOvZwC/1ONFybnKb324hZEca2YVKoEz5j1ezmEppUopwIcQ5Cdy4IHn2BewVaSj9rv3fs3acDD9sAyWWYazgqPFNWKEOJ/aCgxrCVtHGI+wxjF7NOb07/XizSE3XmwuE55G4RvEx8QkqOSKGzdkuNNn9WGTSY/Br/3CYsVkN40oaYKElBDXshw4fsKO4TqKizgG8q15jHhG04L7NF86mrydqvM/mMbeebgPW4W+3wtwaizHjb+axxPn7k= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?o6p2I+/QYkTbY5+cNrbtVHxID4+e1C/6bkqZfjNvQqPtsYmJ/V7/c24HhvSt?= =?us-ascii?Q?R7u/0nkAlvQ1UscN7TgDTSJejWStOVnw6Wz8IYscG3xl34gXOMHPDHTZTHtB?= =?us-ascii?Q?3Ie6pmrQxqQE8aQyNHje2DRNRhbrL9OtcjFirT/lBo7HwJqaLJeWKqYNPaH6?= =?us-ascii?Q?XFDA+s3PoLxZiJ9IWnLZkXqyOrRDjUzDK74Kwv3B9OISmO8m2A/rs8yKvYHl?= =?us-ascii?Q?Uc7DAnHmDFDqL1BU58i3TI1bTclILVnHpkP+amz9u2HK5DU/5YnDY5RkT8DK?= =?us-ascii?Q?BQ2O+0J8MAlnlLdCLMsqAd/8xya00xvwWn2Hu+ZV6j21cih6LP9HWcqphKIu?= =?us-ascii?Q?2GXB3A9Qh/ysvqbqt+UMgv3owHEnqZWScFQ4BD+A7O0D3cIAF4DrzyVRtlgW?= =?us-ascii?Q?fATfw4epSgkA/xdHqpw4bseKD8TROiAmbPQ0VJJHl92+fZ1xtjwhZRI7emng?= =?us-ascii?Q?W5locNqSPfQltCwZrp8wQ06X8kThErrzsJuLD61h1hsQzneA1EnmRFSUiXYb?= =?us-ascii?Q?euU0pt+t05L6p0IQRq3ajjrRCuPTxlELLzElv4Ao/1Vb3XOx096a9o4Ry0ev?= =?us-ascii?Q?vVFiFW9mvMGTOky1wpeXZX+ou3U6PumT3rB1GqO/xnW2rT7aR4/Wzp/ubgaG?= =?us-ascii?Q?8WVkMPs+GE0IS5uXbjwcFRgeEEirLB7AqR15zhCgSOIFcZrI0LI5J6711Mh5?= =?us-ascii?Q?QewOx8ps5HQLEnAYjIOGzBxti3CEkd/mbLtgpUPRjEknfksx8MatDn5epk4+?= =?us-ascii?Q?7csa5kip9M+IC4sROy2UIQVIccXAd5XA/MoKcBnNoVJsJZut2z3R4w8Tm4bK?= =?us-ascii?Q?6lKgb3baE5i6MGeCIPR4UUwfT/jTJ9D6g3HzMN+I6MTRPNlxgRbmL8mi13Dx?= =?us-ascii?Q?Q+xwQVluZnz+AZZ/MlK5O0cA4Xe+cUql4J+zlD+MfM2U2GKLf4fp19MKLPhH?= =?us-ascii?Q?y8ne1YYYVRZWUd+/34W/UIsvPIlz8gcFE4smYDIqMHhNkotxy8Ry5n+Uto45?= =?us-ascii?Q?UgFaCDCqe/wHQ8KJD5WCPEjI0bGtQCmH7kk1+qTNii12YQAkQuV13hu392lq?= =?us-ascii?Q?yF44hYfR1idWrsqXk8LogSbeQohsJ4O+BzXAEkeXpZ4cmUuYmQbtSeFPAM1X?= =?us-ascii?Q?kve/PR+Us6pm7Dkg5+Ex4xqgzvZt1OFB+GnCDLPXnkEf5inqcq5U0T2cox1Y?= =?us-ascii?Q?Qruv8+ADQ/wBAa3bsTqYuHOev/Uxuv8+XyckU461f2eoqQNNmnBjAOyCECHI?= =?us-ascii?Q?UXdUCvNP9k2eG2jvyFaaphm7G0oXdlVpBRPjoQEnuWIVNzWkq2pyzO94as2V?= =?us-ascii?Q?BbiZ0CLxeyNvXlQ/HEhg2R58fLNZQ92lBd5vIBuOJ/hsK18fCpfTy9IITIBd?= =?us-ascii?Q?TF4wusL3fAXFi04IxGPBjyBx47/NLrRWnPG4REtdg0NI4c7hpEyDj8Hql6yJ?= =?us-ascii?Q?LAln1lIDMdonOLYhgM25v2Lh5NOrwQ7sIPsNDIcSvqJoemWLqnO/MU+EszmK?= =?us-ascii?Q?4Argywf7jp3ZlkqkKB9Tq2G2cbMwRJMz/ekJ6iMnDUc6QXcN5lHulYPWB7Tn?= =?us-ascii?Q?E5G4ejM76uPCvnsEd5ljsXcqDxD3bgymQGoGVQOWh20go98qzOtBKI5Fvv34?= =?us-ascii?Q?ZVA+MpNlN3FJlvFL8+B7zoC989IDYwKnVszRx1An0i9/wzFBtl2S5IicEaOR?= =?us-ascii?Q?L6gEKfIFTgl7wl38fYsAIIHKWyXIQgVqgdvWFX55ovhQrvQmSvkHCe37/3h7?= =?us-ascii?Q?/bPgYuy7wYyqNH8f7sb8iDsm4U00PZA=3D?= X-Exchange-RoutingPolicyChecked: QO2b5CU2zT1HvziozDgI2hBu6o727aJegxN5gRSh+7RcUPDWVUEsJWDNy+C+puqFVRfa3BCwEveUiHHrbprMcZr0orzsmZql7PapjFOy9GurrOxMlqATwOHg/ED73AmCGMfWGIzg2Fut/PsjiFgGOWYN7+JQQEgCPeSKho6jpVqzuk/vskNK8HBTs83zKZju/Gmn3TqWAWr9Q/kMWL82d8GIXm2yDd5RgMCqPRChEIhXLcVTHM9GzJmpSPo9V8ag3/WukX1eJmygCeN3UpM9OjsQk9VpqcZJswqCdLu7XYGTQ9P9z8NPOYl6FdrriLcrL6tlEIM4oBtG/sy59SF9ow== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: IRDOfDost4A49/RUVudm+6oZ+brTVe/o/pE7hhKQXdHTTKn5wxDYumQQQwFqw/hGyBTlDVT9uP/OT3mgbkLJq7p/Q2cUmddb6/0I9PiJCY39I1tOzMuXgSfzRl7u/Guu9M2khDIkRyi9OTqoGE6bUU5XKmEANHL8KAd+Y/3LLkb+CvcJFUhL08KWftlGUPErX9JJ4i5elozmbSYfgIHffEYWt29twIjxgyZKF520UhPIbhSLt02yqYfyq17xfziY0ae1r7aHigvVWod26mqy6X0mQiVBR83VPsQgfd6xSWfYWV61bPBG5r4PH5zzxSUPTZXIxoudGw8gpIOM2ZOX846c/JdwEJgbzr8beqXhjK9ueJseyfRliMzkG9sc1g0WEJCStFFwKRniawYQShwo45dso6ET22BOlzgvFiv12Y1XkkHrgRXhYTwekYu+vulEls/IVqKOesDuSXmr+jcUa4DGxFcbME7wQ3kDiwxiGUu9b6fDM5epCBOF9NIrYqrtaYFXkoYpZZAlICZKcQgDTFfwz31IsEFamVSIzUfDzlr3be5/cGU0CAOh+/yKYNelaEeTJfKDpb18yf+q/ls3dJEeoj39nx7scrDjK+O/9ZM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02df1ea7-c100-47a5-0f5f-08dee89df6ea X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:08.4907 (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: zYE0xBRzzoKIf0JSR+1Kh5eSrk0PsE41WR6913VVUCxpHSm4rYUy+YpM9ykyVpWtMZ5Yo6Fl2FgEg/u2+iEYUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 spamscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230093 X-Authority-Analysis: v=2.4 cv=TN51jVla c=1 sm=1 tr=0 ts=6a61e0c9 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=yPCof4ZbAAAA:8 a=rslDvqJ3sq2LG7fXSO4A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12114 X-Proofpoint-GUID: XFwmw5CZLmI9sDLtezQDiMO6mRe5s4Oe X-Proofpoint-ORIG-GUID: XFwmw5CZLmI9sDLtezQDiMO6mRe5s4Oe X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXwubBNsuqZKEl SYZDttHju1xuaoj3AyqVDExh9zSEdOHPFyzAWiblhDNelCIwW4PG0EFTOymgZRrfKpL/4zq/roC KMtx04bMKGBcRxbWNxn1Z2fgDmlVOAaUeZVbxJNhWI0WMda1oEOd X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX3NjHB8q5eTXh d7bRvaklvDmsRIVoB76rW95C38EVen2H97e5a8TuHcd90x8blPxr3jKVrvaKN9lfwUJ+Uh/86HC sSbAGcwTLw1AS6WIh92bBhIE0CURQaLURwN5AUhkeWKZEJur4GiqWX10WxpkDgLhAXHy1Jn2Spj Sz5QS6e7z2ZbGAFSsFOW10XEcL05HkLXQn0WYfbI64jLisHOgbZSn8xYPx2ufDo2kn4loij4eYB yJtoJAYsvMbxC8p7/Y2V0OjbLx1Bk8F3SBZSJuRk+4vt/wnYPaccJONJatmmI0eQpLuKUZx8f0l ATK/bzdfFcYalRGX59craWhFi3MqAoZa2yw0gOJIL0wpSZMGf2B6z0a8WAKqvaV2pzMdVITv5Uj 8RcsmxMv77Ua8hpi+MrWpBOgVGe4lzlsgcZZfIFGp3ZXyRBpdZeyTJOJOewN1lsuSa+uz0N9zzK GIx0BwwU3C8i2Ej6MX428hYsuUVyyChYSvUTfgdc= Content-Type: text/plain; charset="utf-8" From: John Garry Introduce a scsi_device head structure - scsi_mpath_head - to manage multipathing for a scsi_device. This is similar to nvme_ns_head structure. There is no reference in scsi_mpath_head to any disk, as this would be mananged by the scsi_disk driver. A list of scsi_mpath_head structures is managed to lookup for matching multipathed scsi_device's. Matching is done through the scsi_device unique id. A new class for multipathed devices is added, scsi_mpath_device_class. The purpose of this class is for managing the scsi_mpath_head.dev member. The naming for the scsi_device structure is in form H:C:I:L, where H is host, C is channel, I is ID, and L is lun. However, for a multipathed scsi_device, all the naming members may be different between member scsi_device's. As such, just use a simple single-number naming index for each scsi_mpath_head. The sysfs device folder will have links to the scsi_device's so, it will be possible to lookup the member scsi_device's. An example sysfs entry is as follows: # ls -l /sys/class/scsi_mpath_device/scsi_mpath_device0/ total 0 drwxr-xr-x 2 root root 0 Apr 13 15:48 power lrwxrwxrwx 1 root root 0 Apr 13 15:48 subsystem -> ../..= /../../class/scsi_mpath_device -rw-r--r-- 1 root root 4096 Apr 13 15:48 uevent -r--r--r-- 1 root root 4096 Apr 13 15:48 vpd_id Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 195 +++++++++++++++++++++++++++++++++- drivers/scsi/scsi_sysfs.c | 3 + include/scsi/scsi_multipath.h | 31 ++++++ 3 files changed, 227 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index b9b58a3641aa2..609f8009e4ac3 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -29,6 +29,10 @@ static const char *scsi_multipath_modes[] =3D { =20 static int scsi_multipath =3D SCSI_MULTIPATH_OFF; =20 +static LIST_HEAD(scsi_mpath_heads_list); +static DEFINE_MUTEX(scsi_mpath_heads_lock); +static DEFINE_IDA(scsi_multipath_dev_ida); + static int scsi_multipath_param_set(const char *val, const struct kernel_p= aram *kp) { int mode; @@ -70,6 +74,54 @@ static int scsi_mpath_unique_lun_id(struct scsi_device *= sdev) return 0; } =20 +static void scsi_mpath_head_release(struct device *dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); + mpath_head_uninit(mpath_head); + kfree(scsi_mpath_head); +} + +static ssize_t scsi_mpath_device_vpd_id_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + + return sysfs_emit(buf, "%s\n", scsi_mpath_head->vpd_id); +} +static DEVICE_ATTR(vpd_id, S_IRUGO, scsi_mpath_device_vpd_id_show, NULL); + +static struct attribute *scsi_mpath_device_attrs[] =3D { + &dev_attr_vpd_id.attr, + NULL +}; + +static const struct attribute_group scsi_mpath_device_attrs_group =3D { + .attrs =3D scsi_mpath_device_attrs, +}; + +static bool scsi_multipath_sysfs_group_visible(struct kobject *kobj) +{ + return true; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs) + +static const struct attribute_group *scsi_mpath_device_groups[] =3D { + &scsi_mpath_device_attrs_group, + NULL +}; + +static const struct class scsi_mpath_device_class =3D { + .name =3D "scsi_mpath_device", + .dev_groups =3D scsi_mpath_device_groups, + .dev_release =3D scsi_mpath_head_release, +}; + static int scsi_multipath_sdev_init(struct scsi_device *sdev) { struct Scsi_Host *shost =3D sdev->host; @@ -89,6 +141,71 @@ static int scsi_multipath_sdev_init(struct scsi_device = *sdev) return 0; } =20 +static struct mpath_head_template smpdt =3D { +}; + +static struct scsi_mpath_head *scsi_mpath_alloc_head(void) +{ + struct scsi_mpath_head *scsi_mpath_head; + int ret; + + scsi_mpath_head =3D kzalloc(sizeof(*scsi_mpath_head), GFP_KERNEL); + if (!scsi_mpath_head) + return NULL; + + ida_init(&scsi_mpath_head->ida); + + if (mpath_head_init(&scsi_mpath_head->mpath_head)) + goto out_free; + scsi_mpath_head->mpath_head.mpdt =3D &smpdt; + + scsi_mpath_head->index =3D ida_alloc(&scsi_multipath_dev_ida, GFP_KERNEL); + if (scsi_mpath_head->index < 0) + goto out_uninit_head; + kref_init(&scsi_mpath_head->ref); + + device_initialize(&scsi_mpath_head->dev); + scsi_mpath_head->dev.class =3D &scsi_mpath_device_class; + ret =3D dev_set_name(&scsi_mpath_head->dev, "scsi_mpath_device%d", + scsi_mpath_head->index); + if (ret) { + put_device(&scsi_mpath_head->dev); + return NULL; + } + + ret =3D device_add(&scsi_mpath_head->dev); + if (ret) { + put_device(&scsi_mpath_head->dev); + return NULL; + } + + return scsi_mpath_head; + +out_uninit_head: + mpath_head_uninit(&scsi_mpath_head->mpath_head); +out_free: + kfree(scsi_mpath_head); + return NULL; +} + +static struct scsi_mpath_head *scsi_mpath_find_head( + struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head; + + list_for_each_entry(scsi_mpath_head, &scsi_mpath_heads_list, entry) { + if (strncmp(scsi_mpath_head->vpd_id, + scsi_mpath_dev->device_id_str, + SCSI_MPATH_DEVICE_ID_LEN) =3D=3D 0) { + if (scsi_mpath_get_head(scsi_mpath_head)) + return NULL; + return scsi_mpath_head; + } + } + + return NULL; +} + static void scsi_multipath_sdev_uninit(struct scsi_device *sdev) { kfree(sdev->scsi_mpath_dev); @@ -97,6 +214,7 @@ static void scsi_multipath_sdev_uninit(struct scsi_devic= e *sdev) =20 int scsi_mpath_dev_alloc(struct scsi_device *sdev) { + struct scsi_mpath_head *scsi_mpath_head; int ret; =20 if (scsi_multipath =3D=3D SCSI_MULTIPATH_OFF) @@ -116,13 +234,52 @@ int scsi_mpath_dev_alloc(struct scsi_device *sdev) if (ret < 0) goto out_uninit; =20 - return 0; + mutex_lock(&scsi_mpath_heads_lock); + scsi_mpath_head =3D scsi_mpath_find_head(sdev->scsi_mpath_dev); + if (scsi_mpath_head) + goto found; + scsi_mpath_head =3D scsi_mpath_alloc_head(); + if (!scsi_mpath_head) { + sdev_printk(KERN_NOTICE, sdev, "could not allocate multipath head, devic= e multipathing disabled\n"); + mutex_unlock(&scsi_mpath_heads_lock); + goto out_uninit; + } + + strscpy(scsi_mpath_head->vpd_id, sdev->scsi_mpath_dev->device_id_str, + SCSI_MPATH_DEVICE_ID_LEN); + + list_add_tail(&scsi_mpath_head->entry, &scsi_mpath_heads_list); +found: + mutex_unlock(&scsi_mpath_heads_lock); + ret =3D ida_alloc(&scsi_mpath_head->ida, GFP_KERNEL); + if (ret < 0) + goto out_put_head; + sdev->scsi_mpath_dev->index =3D ret; =20 + sdev->scsi_mpath_dev->scsi_mpath_head =3D scsi_mpath_head; + return 0; +out_put_head: + scsi_mpath_put_head(scsi_mpath_head); out_uninit: scsi_multipath_sdev_uninit(sdev); return 0; } =20 +static void scsi_mpath_remove_head(struct scsi_mpath_device *scsi_mpath_de= v) +{ + scsi_mpath_put_head(scsi_mpath_dev->scsi_mpath_head); + scsi_mpath_dev->scsi_mpath_head =3D NULL; +} + +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mpath_he= ad; + + ida_free(&scsi_mpath_head->ida, scsi_mpath_dev->index); + + scsi_mpath_remove_head(scsi_mpath_dev); +} + void scsi_mpath_dev_release(struct scsi_device *sdev) { struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; @@ -133,13 +290,47 @@ void scsi_mpath_dev_release(struct scsi_device *sdev) scsi_multipath_sdev_uninit(sdev); } =20 -int __init scsi_multipath_init(void) +int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) { + if (!kref_get_unless_zero(&scsi_mpath_head->ref)) + return -ENXIO; return 0; } +EXPORT_SYMBOL_GPL(scsi_mpath_get_head); + +static void scsi_mpath_free_head(struct kref *ref) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(ref, struct scsi_mpath_head, ref); + + /* + * If we race with scsi_mpath_find_head(), then that function may + * find this scsi_mpath_head in the heads list; however we would fail + * to take a reference to this scsi_mpath_head and continue the search. + * As such, it is safe to call device_unregister (and free + * scsi_mpath_head) after we delete this head from the list. + */ + mutex_lock(&scsi_mpath_heads_lock); + list_del_init(&scsi_mpath_head->entry); + mutex_unlock(&scsi_mpath_heads_lock); + + device_unregister(&scsi_mpath_head->dev); +} + +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) +{ + kref_put(&scsi_mpath_head->ref, scsi_mpath_free_head); +} +EXPORT_SYMBOL_GPL(scsi_mpath_put_head); + +int __init scsi_multipath_init(void) +{ + return class_register(&scsi_mpath_device_class); +} =20 void __exit scsi_multipath_exit(void) { + class_unregister(&scsi_mpath_device_class); } =20 MODULE_LICENSE("GPL"); diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 2f80d703ce640..d6bbaf424bd4a 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1501,6 +1501,9 @@ void __scsi_remove_device(struct scsi_device *sdev) } else put_device(&sdev->sdev_dev); =20 + if (sdev->scsi_mpath_dev) + scsi_mpath_remove_device(sdev->scsi_mpath_dev); + /* * Stop accepting new requests and wait until all queuecommand() and * scsi_run_queue() invocations have finished before tearing down the diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d3d410dafd17a..50298056181f9 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -19,12 +19,25 @@ #ifdef CONFIG_SCSI_MULTIPATH #define SCSI_MPATH_DEVICE_ID_LEN 256 =20 +struct scsi_mpath_head { + struct mpath_head mpath_head; + char vpd_id[SCSI_MPATH_DEVICE_ID_LEN]; + struct list_head entry; + struct ida ida; + struct kref ref; + struct device dev; + int index; +}; + struct scsi_mpath_device { struct mpath_device mpath_device; struct scsi_device *sdev; + int index; + struct scsi_mpath_head *scsi_mpath_head; =20 char device_id_str[SCSI_MPATH_DEVICE_ID_LEN]; }; + #define to_scsi_mpath_device(d) \ container_of(d, struct scsi_mpath_device, mpath_device) =20 @@ -32,8 +45,13 @@ int scsi_mpath_dev_alloc(struct scsi_device *sdev); void scsi_mpath_dev_release(struct scsi_device *sdev); int scsi_multipath_init(void); void scsi_multipath_exit(void); +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev); +int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); #else /* CONFIG_SCSI_MULTIPATH */ =20 +struct scsi_mpath_head { +}; struct scsi_mpath_device { }; =20 @@ -51,5 +69,18 @@ static inline int scsi_multipath_init(void) static inline void scsi_multipath_exit(void) { } +static inline +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev) +{ +} +static inline +int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) +{ + return 0; +} +static inline +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 1531D4334CC; Thu, 23 Jul 2026 09:37:40 +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=1784799463; cv=fail; b=QjreT2kQYua/OqAAvqX0Fx/g8tw0WBoeMDwbUts8AS/WwtkLEVWRGaHsF9vKYPlrgyJK3EG5tmDzqrK1av9cruOkd/g2MrXlXeHvLijiGI9ynApVfDAwm8m/1rZLe4QPmLmSJrCxqXPbU1ZMMCvp3na6KvtjX28a1Q5rGmT8nOU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799463; c=relaxed/simple; bh=w0BLhbk9mRIx1gQjf0SlS6tyIl041Gpu+sle4qebvvs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HF0qcN46ASZ6t8zoAQ4dsI79nKhVUeBbH8BFJESzr8YKq9/D/yNtZruFy75W2poa24AUn9wxXwfY/V6JiGnPbxvB2OLV5/c12ACuwHf7Xc7l3NWZuB2zrJHaNIMUCGVnMmNwq25d1MrriNNicrv0IxbvRQ1pPOJyMUw0vS2aX68= 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=GJfN5yXv; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=XkVqKNbU; 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="GJfN5yXv"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="XkVqKNbU" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtfKe3360384; Thu, 23 Jul 2026 09:37:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=vHgOPiWqppdif2y0QFBAPDqvrX3HhcXZc0qi0dTxj1s=; b= GJfN5yXvwbF1SOlCxMt5Qjj0DrFrTTU7x7FQBNf3+6CESivjC069xjqOuhlSj16l RJ+bxjGh9Jq3cnTJ1t0yKXpuXzsOeR2ZSQaRw9bO8ArE0exNNxYx9r1PSAFSTmeT K+D7/9ocERvhmZQz1cv8/0SWV1TJFF75+8y+jWwDqMZc+7yVi9BExF4uTKmoYMc2 STsPn1aSpmPygy4ZkLqoWRsBIiVZ5bEfgNL9oRbVbafx/zQF17vZffXBg8tak7HN 24Ks53NCNBvgheMvOiAnr25tuazQ+c1ERpb2XuxM/LxkL4aVb/2l0LNhdc3KYLS2 HVMKd4PlGHuiJmjLV511ww== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6mvb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:15 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XYW6029990; Thu, 23 Jul 2026 09:37:14 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010013.outbound.protection.outlook.com [52.101.193.13]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxs5xjc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:14 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ftYQkdNhgIFZmFxMSn4XE2hLxfByzkir2fSZ5IZSs4ocn+OI0zujcdToc67pDLQqtTRKI+w1E4Vluvh1eYMOhQp0F0HYjyqljbpJyuMSkysCT19rCVk+VO3TcGyml/QRQEMeI2aKL+3TQdpMI0MAsE8JGLgJvBZu5zOgJ3b0A1MxrVTbO5ifhFLsoIYu4nDzcTjKwJpmKz6vYnDNSGMraPI0DrpBhm0ZTJd1ePEX4qklV9l1gHNhw++TeWjyJl11aA0w5mFZOrvfyPGj/kPTzR0DDnEJkLHXk1jeCY0Ekh24ApK4OEO9EQn6skCNJsppEdDkZcY6o7EUQznHLb24ew== 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=vHgOPiWqppdif2y0QFBAPDqvrX3HhcXZc0qi0dTxj1s=; b=XEi4ZmPxUYWFfKFC8NLbOIiD97qMGNTKpDJcO8RPmxLNjoSUa2FLZVDaGqLona8lH14ErXov4ENZxIJ3a9vlvt59kndmnpQ/TXLJqOJHj6u7nUvuWq2vle7E6FUuqsMQNLcQqCgTcg6pkefiPXIDRZ3rn5aXCuVvqQqDDgdtRV0Vjn29KD6RW8D9nbKNJ8KNvBw+bQD88PXq0/NJTVCx058X3sWzDoZICFA8AH2TxvkpYj6YH7rkpUikHta6J8qMhquZUTDMsnz2VvHL7FPHi5KimtwJUGcfPGgHy/+pAmUkS/q8xY0nrvERELnZbge6Pake4e2XiC5MzwW4M5FEXw== 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=vHgOPiWqppdif2y0QFBAPDqvrX3HhcXZc0qi0dTxj1s=; b=XkVqKNbUZA4VBSv71EPHLyB0K8aDZ4UbJDTpCB7GlyLgRsi01w7pkhpHK9RU0/i1IyHMFjMCsSuU+OuXMCKTeFRj/BaZMZz4/BoyIaIY4vvwAVvJhZSfXdwHhLN62to25BDzLJHB9G8NC52lmWfOLhSb31pKc6V+uf4kkhgKXWw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:10 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:10 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, Hannes Reinecke , John Garry Subject: [PATCH v4 14/28] scsi-multipath: provide sysfs link from to scsi_device Date: Thu, 23 Jul 2026 09:36:12 +0000 Message-ID: <20260723093627.2327456-15-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR04CA0067.namprd04.prod.outlook.com (2603:10b6:610:74::12) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 9eb70311-6deb-45f4-a05b-08dee89df7c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: CaOoL1O2/uNE45cCHKIIUGtCkjmZd6wPhfOHFiNFMfCOOeGpk4SH/F5ZuJe54j5sbHC2FIFsNRx0swUoBOUWsiuubFELrlrqK6qNEgBKdd4ClP05cU3cpsDtMVgl7FKk2dmLogsmQiheS41YD4JZE9kYjtby9kUF1eb9qmKqeG7EpTZA62kgphaRwkmPwkO2qFHvRQhRYenl3MYlQozoSMKM+c6uH6apuDn0+5gR1f1kl1zCkalprfB3QMtGbhD0KO7BODz2/rtjxd3I25Bizd21OojJM0a8Akwz+DBJqkYJOhtMQJ45JE9LnBhwvUEU1sHGJmzlMDSqEftLWfh2rq5PbqyhjhPW+YOUhDcYrvVCLxFyRXrbW2WYuIVWIjQTRnqc76QAow1ySloLVeaBXA2Pz9U7OEpM1xle2C+VKi4xGCaj+AghbFLEfvte+zlBlcdFtA+q8C5TXDStbhYFN3NA102FVp0dPynAY1qs9WyuO5Or4V/LXilreVHDyCV1XZfa8EQH8GySJ4U8+xIZ3IV4lDpplMJ5EI7V9v3Qz0pYSasRJimFoAuIoBpp1wmWAkF0mC3oOz76UDGr6uhn40btyhRnULY7OQfXjD0yD+v6dJJNiJvHL6EHHiYilwaN6MvkSCQ7AlleWpY1pYxw9ymMrs1X1NNN1WdYKeebzgo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IgZZR6VXw6mwotLSY9bu3y16I+OI9/SD78zBF/uOsVpFcu6W1p6D/1c7c1E7?= =?us-ascii?Q?3TYYhFd7/pQcK5YX4loMTmcpUSgJVTC88DnvYow14oVssMZG+CyKh9mX/5im?= =?us-ascii?Q?fAe6Jd4dHpcS0WqL9SP0neAUpRgNcPpb3PLmWuwS+Hw8Fonb9g9epGZPPRWh?= =?us-ascii?Q?Mk0PdCObb8CLs/5/akc/ESSJ6ugee2A9wNStT5U2bLpPORohA+jv05z7l8fx?= =?us-ascii?Q?3ksDlrchIPuCmJTZbjy5cLUyjnH59HvZcgr2x1Yt3BMjT7Zx0hTDLXOMJmpj?= =?us-ascii?Q?6e82D3fRsc0tvZtIz8LcooIPZ9YZilI1w2HBa2j7JmBalCCQotzpM/G/xqRD?= =?us-ascii?Q?99Bpx9QVZKrLM6SKWFTV9wlLRsYB6NT8NB46DtIflq24CZkIIGMVwdmygM1y?= =?us-ascii?Q?VTxuuciyNAuFgrN9dChNxXPO/xp29E7iTsm9n8OXHlciOmpCVqYF0eao7Lpp?= =?us-ascii?Q?bPjMOGHVZmbfB/89D1VfcjCxwUrw4STvkWp8jpgj9aOFdjgFkH4LAm2blx7i?= =?us-ascii?Q?Q8r8jtmMyH9DaHBaZ4OnUUr5pGtnLzWLES/7yWFLsjNzCG9afQAkBMc+EjlW?= =?us-ascii?Q?MWJCzSg+Hc17M2ENhqbnjEoHRzZS4DwWOcyf+D6VzQgFg1qz5CopKofxZlzD?= =?us-ascii?Q?fEcO8hNaqFB6ZEtTwQuVqfLI0IYlZliZtellvWVlWSmkLHlLA+SnKDmlSRk4?= =?us-ascii?Q?jEAfK2p3OenKUKI3PaWzpO7VgxWbCtoJuIBgRPl4HJHVhF5VyTdcPdXFxfVv?= =?us-ascii?Q?HtRqB24axTTekmMtnX3GUm27NU+uVwrI3rIRtqLUr54Q0MKPMIjctuYfV68V?= =?us-ascii?Q?JUPngVGxESGxcDH6bJ0e1aMDjr4UT8LgLODsAN/mD0ddGDlv2Be4Emah7nCg?= =?us-ascii?Q?Xnda2FkafdAkBIDj9s2UpuFvQXXu/c/Oi7rxiCvJk4qAlIKUbp/SjQDq7we3?= =?us-ascii?Q?7iHp/09COE3Q+sZdb5xZo1AhaE2hJTlGc4O7nb0Nhua+/IPnEZnUWXnf1SIC?= =?us-ascii?Q?roZZHPNXGp7nTkFY0e7m43Z+Zkze9kjexJb68qrcsrL4CPMsmK5r/tfGm30b?= =?us-ascii?Q?igPQXfwueCKEtBwcT1avVIoekrLwyT/K/tdT+ZGhCBVxXqvHdGzGQG6lWwws?= =?us-ascii?Q?H9O/S8w2E/gQ+Cvok+lQV4qVEJXb6Lk4TMm8MU3whc30ds77R99odTGKSTq2?= =?us-ascii?Q?x/0XVGW+t5GINiY6X41A0W++17SScMoBN4NzdQe7YnA+k/I4jnHeb+d/4BUV?= =?us-ascii?Q?EhD6MJtyBVvwrKl8+WbcOg9uD3cuaOuNUx7WUcAa/4Wl54mMz2xFpdzCE3Ig?= =?us-ascii?Q?+MTn45mdHFYM4fAK4Zcz4H4oaHWcT5jUBVM262lgQJcBg+wrUgK7dBkzMzcI?= =?us-ascii?Q?d1mxjXGYkQVCM6SfNivXZoObY46SavT5WXsCyddfojHc3PCPhtQpIQZXoFUy?= =?us-ascii?Q?BJMMPf1DRdQ/eIrwzWQhCdJ2dfqhZK5WpVcozk1yaKWuUAwcH83VkFz5zYI7?= =?us-ascii?Q?nPnQ27O5BRa/XnWt4NN6mNOFNZdwMtgbz+oO4sdOzd+mmGqIKOxQbeYSjHk6?= =?us-ascii?Q?USLh0PJHrhKhZ+KNQUsU95dAlF2ovQKzIXjCOElHtr5nbA535zY1Uaecbpgj?= =?us-ascii?Q?9aeruRKzRT1yLRZuozYFtepkuBfC66J+xQ9smNFRXWkMpRBKC77IZO88qi5i?= =?us-ascii?Q?y/kc4US8IkR0Bue5NVLgdrocAH6f76W9P9kZQlF8MFFc3P8P7IxcsZR3QIQ8?= =?us-ascii?Q?bdSsigLUfnHnRMzaEP9COwFSPzobgiA=3D?= X-Exchange-RoutingPolicyChecked: JHUhQiAKB4DGUoG8r07gZ6wGzeP3ZpEL1lR+ig1092t1l/jeIBMD6PvjZgDrajGgxo+NrXTmqACC3pxRbWb9JyhhGlhP4SiaDh/EnI3Bn3VnSBWTiNJR6ep6kQb8gxHyTn/IU77bQreSZobIepVIJfYix2VxKZwooqR6I1E7yvMc6GXu49h5bGk4X7xmCOGhNXvwfyKMZB2NAroMzWToma7m+ZxZRZcfVXW5eq6b4Ns1EwXYDeZBoxWrlERFcHfoIsaosnY/O7JTPtriDS3U1hU+CPca4eVX1NXdjJkKS4WIimbgbIRGlAVxFs6jGZyo+Niezxd0fdPHZaziBsc9rw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: zpaEywa5uO8byPCsg0QQZX5ScjNbbTVOtNrBcX9Yh6IUZFdEdgjRYjs095Cz4MfZ86ysrKGWmiumruasjuURWCYZpbUeoahbq1v0BfMThxUwpqPpUwCZ5uB3rDLivSSsF7lRQ1yg/BmTycAyBBXFAxgDB8w5e1ww7rjIRSuTZc5DCzLQoDSdEkKjAYOx0B3qQCH4tHOCsBcJ94C0hMSPx26u4MVTr4VCrtYLkWdurgObVGPe4wuR6dcmaqdVtcSDshp6TTBPbT63KwD9E+7nNCYREE1Pr6FNZSpQyRBunqmfHlKBYUoyk/WHjCyiODEaO7b6VMFL2KpYThHREqhCJDYqjpTMwkuYeFghLAZs/JQxicDd5vyoB92BcELg0Ka/nZ2nMc0ccET8X3g9R8tVI3CzNb7qzo4I2tK8kdXwkHK17r9EEdVGHRACbA7OL3xUGYYXdBlPieOmDZeVlr0aZAagrcAxVPFFsmgDiDF+VW8je0cXytNaa8xMIthUrRzrcorWIdunkdnaIPw3ZNG9IbzsJzj9nKAr29LPH40JnVtgo23WYBq1IazRtY5OQ1RFXFchgKLULqa7c6UZjjijafCc6i5TKSRj9ZGIwyvbUu0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9eb70311-6deb-45f4-a05b-08dee89df7c6 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:10.1397 (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: k+RmSvp67Oajl+kaN0T67TpRn5IqFl18Sfbhi5X6wrwiZKD1thCusAaG/rhEB/S4eARhriwde2KEMnWIp/HSFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 mlxscore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXztrmpPbL1sMT 9G9Ac7NvlBPffH5tsAUcAHIJI6GAcULibdsvNB9PpBol26ChzaPGgJLvsAAhUG04VdRlSh3I9dp 17+zpSpgqw2f/kTspgzCMyJEdVWyCc6I6+YvMi8uE3Cz9lCZQIR/s3AkrvGO88m3xgYAOu5kAa+ dhOY9mn2Nzunqj5eJ3Ff8zlL1y2beNdpu2rMqiXypYsKUZlu+j/rwGZszGO5eo6C3W9lnys23Re QI8CvsEVE2iLp8FKkc6kNNOEu/WiqedblK6tx6dDeH1Uc/nqg0VSgWKJVXNa+IJNJ/kD6LrFew6 GLF3RF7v7CxgIl71CbyKdurOMis/crUdgxNNPpy42MYMsnY+8ITHv/jT7u6CSx0D69HtaAalEwC RnTxmYqcz6RrDBGE3jT7whLWRu1e5sAuYEvQQ/VpQetR7HtVc+9CsD+t+LiHeoalvI5Dd44pbcm p5U+q6Ie7SxffbsZU+6B1/z4aQsJz82vWrUoVups= X-Proofpoint-GUID: T7ykGg2DnDjRkNKPqeOs-C1SWPYVZwTn X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXzzQST7uJy69B neGtseJ9FJbcWES2dFgaCZHa/zr0K7YJx4i0zbC5cdXHm5zuAbHQ4+Q4dZYKTiPfIH7Z2kcD718 ZJHYWlxEGrRbdZ3n25WvFx6U1bD0ez6511CS4YNvchhj07mVMR02 X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0cb b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=ZbQ-JUxe3OK3M8wTWUQA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13523 X-Proofpoint-ORIG-GUID: T7ykGg2DnDjRkNKPqeOs-C1SWPYVZwTn Content-Type: text/plain; charset="utf-8" From: John Garry Provide a link in sysfs from a scsi_mpath_device to member scsi_device's. An example is as follows: # ls -l /sys/class/scsi_mpath_device/scsi_mpath_device0/multipath/ total 0 lrwxrwxrwx 1 root root 0 Feb 24 12:01 8:0:0:0 -> ../../.= ./../platform/host8/session1/target8:0:0/8:0:0:0 lrwxrwxrwx 1 root root 0 Feb 24 12:01 9:0:0:0 -> ../../.= ./../platform/host9/session2/target9:0:0/9:0:0:0 Reviewed-by: Hannes Reinecke Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 43 +++++++++++++++++++++++++++++++++++ drivers/scsi/scsi_sysfs.c | 5 ++++ include/scsi/scsi_multipath.h | 8 +++++++ 3 files changed, 56 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 609f8009e4ac3..59d1c0b2d3441 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -111,11 +111,54 @@ static bool scsi_multipath_sysfs_group_visible(struct= kobject *kobj) } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs) =20 +static struct attribute dummy_attr =3D { + .name =3D "dummy", +}; + +static struct attribute *scsi_mpath_attrs[] =3D { + &dummy_attr, + NULL +}; + +static const struct attribute_group scsi_mpath_attr_group =3D { + .name =3D "multipath", + .attrs =3D scsi_mpath_attrs, + .is_visible =3D SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs), +}; + static const struct attribute_group *scsi_mpath_device_groups[] =3D { &scsi_mpath_device_attrs_group, + &scsi_mpath_attr_group, NULL }; =20 +void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) +{ + struct device *target =3D &sdev->sdev_gendev; + struct scsi_mpath_head *scsi_mpath_head =3D + sdev->scsi_mpath_dev->scsi_mpath_head; + struct device *source =3D &scsi_mpath_head->dev; + int error; + + error =3D sysfs_add_link_to_group(&source->kobj, "multipath", + &target->kobj, dev_name(target)); + if (error) { + sdev_printk(KERN_INFO, sdev, "Failed to create mpath sysfs link, error= =3D%d\n", + error); + } +} + +void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) +{ + struct device *target =3D &sdev->sdev_gendev; + struct scsi_mpath_head *scsi_mpath_head =3D + sdev->scsi_mpath_dev->scsi_mpath_head; + struct device *source =3D &scsi_mpath_head->dev; + + sysfs_remove_link_from_group(&source->kobj, "multipath", + dev_name(target)); +} + static const struct class scsi_mpath_device_class =3D { .name =3D "scsi_mpath_device", .dev_groups =3D scsi_mpath_device_groups, diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index d6bbaf424bd4a..9c4f8d4a6f42c 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1443,6 +1443,9 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev) transport_add_device(&sdev->sdev_gendev); sdev->is_visible =3D 1; =20 + if (sdev->scsi_mpath_dev) + scsi_mpath_add_sysfs_link(sdev); + if (IS_ENABLED(CONFIG_BLK_DEV_BSG)) { sdev->bsg_dev =3D scsi_bsg_register_queue(sdev); if (IS_ERR(sdev->bsg_dev)) { @@ -1495,6 +1498,8 @@ void __scsi_remove_device(struct scsi_device *sdev) =20 if (IS_ENABLED(CONFIG_BLK_DEV_BSG) && sdev->bsg_dev) bsg_unregister_queue(sdev->bsg_dev); + if (sdev->scsi_mpath_dev) + scsi_mpath_remove_sysfs_link(sdev); device_unregister(&sdev->sdev_dev); transport_remove_device(dev); device_del(dev); diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 50298056181f9..a9fd02bc42371 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -46,6 +46,8 @@ void scsi_mpath_dev_release(struct scsi_device *sdev); int scsi_multipath_init(void); void scsi_multipath_exit(void); void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); +void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); #else /* CONFIG_SCSI_MULTIPATH */ @@ -82,5 +84,11 @@ static inline void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) { } +static inline void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) +{ +} +static inline void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 80CB1433BCA; Thu, 23 Jul 2026 09:37:45 +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=1784799466; cv=fail; b=PxF+D+VC0JcfG3XAvQmAX/r+FfGR8HuychUaGBaHdGMCwDISCkYMEKxc+7adiDqXzLuubB9tVvNThRmtKsQ1M+8E9IK+wZJyOLxkeDWuhA0tUc13Ug22kQnRVH33+8whGwyPR7dncmhePofMgZOygk8hOISP2PZ55WDf+nWxkT8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799466; c=relaxed/simple; bh=AYcFrMjNcJHOjsHU/azDWM/aYk8nzhX8Qxo1B3KdliA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kRGm5TEnuDE6bJRoHwQBUIk/yq0iv5IrjcnDJcK7VzlxRS9id+BbFE4ZiCQqCZBJUwiUw6nIMSLIaAqx5XHVYhDMSIOSAmNAQA5V0KM4LI4vP6g4kV8OCOiR+q6F0SkHY0J5kGkQa06Yj44mhudb3WNUFh3rQ0ZFVcTnD96XhDM= 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=nVejIij4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=IEgR6Zd1; 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="nVejIij4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="IEgR6Zd1" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N4JhQs009715; Thu, 23 Jul 2026 09:37:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=2huvFp/mAnt2ozXFKwtSvu8IC7sm2+Q6WgAYcXwqf/4=; b= nVejIij49akf+x0y7O/jckEJQ+dJN+F85+WWa+hAifYKC9RVKejCN2Q6SXJX0MNb CJoa2FGUpmNDnnspEQ/uchDK23RZusex+9fxmXJoxCpFNNBxF2nhcuVAI61Uo3M6 pqZJTMzQtDmUvjuygAWmctyV2ebSkaRBT9rFQ4fuvYvKVXQ7flwIRu2OjorzF30F ITPhX4y3sCGQItAmA+WEYSwJb/X9fGt8tP/UbAlNeEYS7/+dF8xV8VFQYuiccvv0 xCZI8bZwLW0yM1x5ozlXuC+8MdUqhiVD1+WtUVIjBtAE9sd/6K3aW4eGhvW8YQ/A mXL2nksleKyttJ9GySHSag== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6mve-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:16 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9NXSo008245; Thu, 23 Jul 2026 09:37:15 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010029.outbound.protection.outlook.com [52.101.193.29]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxrwmvb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e9nd+osr2LBUiANqShsPsBkbmOEoaQEoheZJY34VbUAHIpeo2tnkx1a6UBQBwnBm1CT/oWedNKYWk/gzhn1LST6ywWSG0Qts6HXOBJS7a2TzuM9uuV7X8HJthV63ryMLNE/C8WFHXQ0IlekshcwvRHZHU/S2paf3+da5SmHd2kYOFgktTamiOjMRLr3meY/F3xeilW5/79w3rPax6ZwBnSjIYX635lWuGG5qYZjTLAKpH5I47NYZDNVEjtVREz7UzGCUrpGJckeXMq7zXUmaV10VEjvKY+QmOQk+MzA5PrjydjUfi7aKjHDwV2HE+eWO749zKQh/UsEawtvPKzhoKA== 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=2huvFp/mAnt2ozXFKwtSvu8IC7sm2+Q6WgAYcXwqf/4=; b=G4XjJwHwAwo9VDeeLTuXoVwLJM3HqmXD/1JHCW+6VzJVS9C/BZVghTDi28d3pV47fSr/PRyxcaAF9aCQM20w/RHRuO+4KPg4yDZApa78YP0lF6H2+S3K8zIc7T+LIQiNyCj2OWtBxzLEcI/lULRJaHyEOb6L/M/+D6kur74ccC8RPIhzn0xAkfGrI2KhDnONS0ur5Ye9QcCjO6XCB/RWRpnl61f0yAnyxcrehBY6I352WqbtpSlikXsXZVixteOkDmKTMbWjz7ZpmyhRvs0hWs06uEoRCpHV45ivpLQSWUlxAk4IQ85VkE8P+Fe1S3eleiqGAy005sxeszBkzW/7Rg== 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=2huvFp/mAnt2ozXFKwtSvu8IC7sm2+Q6WgAYcXwqf/4=; b=IEgR6Zd1QcwuX6AXq07iquZxSPin6D4DRXg6yYDq+P+JIu58hSc4ayU6teO2raoL5XgPKBSAgD0q25MEZG09PydoeYe79PWWY3Y79ojBBCAC23MvhUIBlMAdbj8j865I58DAvwdm2oSbkU5XCZ59ThSCF8FJCUL7wIal5x5goPw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:11 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:11 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 15/28] scsi-multipath: support iopolicy Date: Thu, 23 Jul 2026 09:36:13 +0000 Message-ID: <20260723093627.2327456-16-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P223CA0024.NAMP223.PROD.OUTLOOK.COM (2603:10b6:610:116::12) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: bf61f809-4dfc-4408-5232-08dee89df8be X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Hc+MBhhUamU5cWei1pcNQ6MooK5XPXLAMPVmsZyCp6yXMRJc6dyK6Q64gApUIXgzOD2jp3tncKcRAKd2rTS3k43k+gwsn8sTyP04VdDIsVLNSrUNmlWfiB7TN8qNOwD0X9AbHnC1R2nNuuqHbSuvXk+KNuBtGXZ8zW7FnIBi+CbnkYCicUW68e1Daeq1PTWXB+TcYg7h6BQ5sia6kWjIrt49IjtrQxqNOeZgrhGwarfqN0jD5lDzBLsMPF/ERkOfkG3hZa5qVZZF/jQVsVCfLK7eyx7hiJJIVIi9MuCSzSkrSqG7DVhXDB12477v6jxxct6SBUFATWAI0nRJ0ffbdMjfvNuCNkK/ry+Lu50Ec/CveeO/7jz80nrxhry97XyVlTOze8HJqFJRIYDocmTIKcYUbpQAHd5iMf5gKfR1OZdzjkVE8YBYE3FhlEMFA2GOXwghvULFyuhUfJbhZv7WecjJv7pct8hd7m6aXFJUSa1GDE6J9RZaq2czliMQtM5ZeCsiEN8pGtgCz6SnLpAt9VsfuAyNcT7hCs332xhl+9VG1SW+v1nR30PFE1hFU0PawJW4CEK7JDXAGAOurw7ZHXWt9+78kwAOY3df6ljRo0rg0L+tbfMMEfrJBoIv6p9Ig2Qg6yY6EIVdlNo2OHTZxc4uua7aSXCTIBq6OmqlIT0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u+StYWm2JtOhV3N1ekygntusnGDoeD3XxhruGXx0lC+HK1HjZgtADpL44tJ4?= =?us-ascii?Q?7Ngh+Z+nifFH5nvdG8IPa9vOmAVkDdJz00J6zVC9wiaLjouHPZAkcpPX1nTo?= =?us-ascii?Q?MUe4yn8K6CcmPbX/n2kg/ENNUrthPunsLrgItrA8HsICbse6BGI/vDB1Oyfn?= =?us-ascii?Q?HsVmjLIqupcYp3G0XsJeE7ZRJOINP/XG2n0PokzHXSIWccHCu/c4wqbIctjw?= =?us-ascii?Q?ByiLLeL90vNcnCpWOTkNuL93v7iWa7RSHZqmkV53ezSzBvHrOJRx1hosExPJ?= =?us-ascii?Q?9SYYCPHGNM1sCqcF3I8XUmLctkD/O2cVWrP5benb6wKnzv/6wnrbBlVN064m?= =?us-ascii?Q?Kfc8z2cGrHJRzMGEx/W4TL+NC1Cqmse8IdBcc+XfHnK6qZJxsImFb5Sg7LFP?= =?us-ascii?Q?/AaZT77X228wxNmXObZXB64LN8wr99oTURhQ6E8bnRvT6M/nJWnUDFpDXvK3?= =?us-ascii?Q?6TskWuYatZTTTb2Vo18JX9LbChV0IV30qf1rODfx7GP3sEby5PsMYkmq96+S?= =?us-ascii?Q?Jm1YzrUVlK3kMgt+b6m9Ln4ScrCGjopJovW2zWV7NjhLa/NFBf0ux2yMExVG?= =?us-ascii?Q?WEVsl65+mYKlwd1oYzdsbHV7fM6eIBxpLRn1XgZADiYmQBP+KVBfxVUZ2EZH?= =?us-ascii?Q?pmyVQltaj1wUE7EIjAQ0raOmmlHsDMj7aIm3rmpWrlQjVB2fYy1VAjfmeiEz?= =?us-ascii?Q?dAhP7v9g16MXTVYNl0quziYEcmENw8LTjMwOqExxlh1zNzaLVgAJNj1Fh5eA?= =?us-ascii?Q?VBrr/JPImvrejeWcRVUWYVqTv23Hz4yLuxFyCTu3LHSI9zhBiV7IntJ/L/To?= =?us-ascii?Q?nzrTx3KvUOB6W8F2e9LY6VBJPfBiU39Ah/QsXRfmUbPYSFqYKt3exjQ6/EYo?= =?us-ascii?Q?zXmr96iQ7kw5uVOe6zmb5dApRw8VWNaaHEFRfkp/uSwQGKfvtUTsHp7W8epA?= =?us-ascii?Q?llS4EnZQL1Kfvx0GUEciHBu89FgN13F49DqEFxujoucNFRGAPNfNKIFMBxYE?= =?us-ascii?Q?19woWOkxL+z6DfztHCEBhrK13RqVw5D8WfYqbxH/ahY2iYZVsZeVY3++cWGZ?= =?us-ascii?Q?E278fYkwrqspoK4TL16QXmyJQSo+ql3x4/GOjNrINAz8Whp4Iz5m1Djbehrc?= =?us-ascii?Q?LjFImzI8MHV1QChgFExROCQhLCdBZ9R83bd9Hh/9bti91bjH2toFoi5F+P7M?= =?us-ascii?Q?2EFd9vJanvM351jnaUNpVdUnpBvm9h7ZokioKQvgEBep9Khujl+Li8ebMlQE?= =?us-ascii?Q?NWztAXy0PWaYdXhKbJIkK59Iz0BRwsl5meiYSwU41VBORBCp30RUB4fx2bUa?= =?us-ascii?Q?Wo/YUTdS82CChGdw9aO7WcJ7HjSjnaF3R8kj3/FJH+EM5qeSGR7IhphKzBA2?= =?us-ascii?Q?nnwYXWjj8b6jU5fZKsY56G3fdUv1D410+GRaCCBIhfgtJO/Q3I8JZ+SBwsIz?= =?us-ascii?Q?Pt3iNUEwQxwUHLRylSMRDPJWvV4lET1lAvsqxqZeP9wKZ4nFQx95jhQvNgSv?= =?us-ascii?Q?lWTli3lxOLA3LeWCTiVLf5V62IfCh+crwzhgQuITQidyHsRp3bv6oXb3Itbr?= =?us-ascii?Q?G/SW7IOcR5d7CZwtlgTtTkARVeXn9RpJccf2uSERYU819iLilbfnnK8hf7ZR?= =?us-ascii?Q?LN9I+UxX/a+KzRA23rezcce0m11QtBWFpzFv9Vt/Fy0KSINhPpMWSStfzgjV?= =?us-ascii?Q?qnPDkfXjkUItR7huZ2PT8RLZgu5j1C2/vXalx4DUMMDDe7PbfnLDNeVHUwRG?= =?us-ascii?Q?O9ATICM1LXuom7MOUA4tFDbaY/CVEM8=3D?= X-Exchange-RoutingPolicyChecked: MU0oLo1ziKGAztB4CFKByX2pfBc/rilVmzTIneM7NYhi9oRBVOLsZAmiMVH0xcZ6DOy0jfhtjxPldAYfrbwrf7yHICZZhx63pzUD5NC5Y0w+3WPfb7B6qDSM4IdbpfbRFBtEyzHe0VbyjoFQlSgKParG/Adf8z5bcEGbYqEirwQoViay41upQFP1cH+6ye16n1ndviv6ll+AupmqrQI0PppgEgMGKNQge7qtIGIWupTCd+JYLq36a6qhlpORTpGP21oKqqaL0KN/5xYbCBY1srEeeJNQv61ShA68fC1rZRwyDuQs17kdC4DxOkjlJtyqWPfDq7A+VwYhZSkGrjQ3ng== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: IijRYVeNxbEBLK5qlmzLby7n3MoYNh/wvonUdSdIxacAUsLfS3SUMZ2UQ5bcN6m3d656OSsPQJ+/ze39yeCN/DX7GrgdgF53nHZMmW1PfhVH3aT0TtIc5sLcO999Eb5wrWjXynjyMu9LA61p8QPehMkEPI3KNmRYkSqomaFZ5vR7ZPpdYx2h2az8c7YWOQ2ErXQa7CledcufHDBDqRxLk611C53fAdQWatWetuAhrma325/kXmRkXvpYyTPrBDNDe5SGOGjDRLz0lfUxi4OB83E4eupAY+dNyu8dTHE70IcZ+1R/3n7qR58z6Kouk8dnLcALoKattSvEMMWCDOF+6DcCMH0j61W9RBagkyvLcYoNZy/BeTUp8sDWt7/pYVUcRCvCIxZn4e1Fw8+Vzv9QKPUdbD5rEHTbx1zPsbsckIs0TFzE1aWBbwDrYmxxP+0BvxQfMkgYBfICTVus3La415SxnAd8dXaBUzsHEbVqXeDm/o1+7gDeU/SVyEF9xCepldcANKeNa5VG4yhO/C6+JCRcZ0oTlqdfc9XVxICRpv+RsuJigw1/4TXuoMkdVn2Gz9eDHBzBosxw42akommcszMZaCw2sq1XkYvsV9od/MU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf61f809-4dfc-4408-5232-08dee89df8be X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:11.6697 (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: 8G+jiCqlSMe88eA5TMsm9BbjKj5dJ8fTUmRV3zb8Mjf3QlNoUVO2Py1NpevWnsr8AtCQGuPyGx6698SPFO5NVw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 spamscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230093 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX8MMeNHCcKNwq D0RK6xPQU1wNriqe4DEI5o9TCRyHmIQaOBw6PCA98hbhyH+eFwjR0c2B0z7b2wHser0jqXnXhRi 4xU4udpCumsqmSEUWC3JUWrNiyRWy1yeLV//5n1NUUhU4eJ9d4F4NIMzAHxp1Bq836NbeingFV4 k98EtJU/D72HOJCycRYkwO1/kMv+MSvV74YN1upaFbKx+TkEei/EHFT9bxKC4xAuXrAhqZru9fj G47RGfr8LeMxj4SFd/NSFxP0J09A6zvD3yyq3N5WnNj7q7opWrthxsscf8mllbUfTAa6Z4mirhf T02yNVk2YKyK4AcodUqiXRiMfYiUFZTWl/NMjiMcU4Z9xrzRNxPwzKdKahd+zHN7vItXPUsYLKj WT9fHfdYx4cKz54CyT+NZoapD3LTseKojhp9tZOaMmdCx0S8u5oEPw9ehg47inONUFBhbyoNYNK LCorcjoWhgDtMLVvQlzw36IRrEQ0l0Gnjfdz42FA= X-Proofpoint-GUID: EOTrwcP_wJLn31FSLKmT0Klviw9j87u- X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX+9j7OQpGfN8Z /rdktsRHSWjJF4gTRf8dTfbkEnDWQELs7CyPYT/luyEnb4RwhI46Ct+eoBo+/A3kQapoFk4wY9j VDADpmw6e+bqqCAWrbgZvuQIUL/c6IG1ZYqkU3WXu4Ggfd6sf5Bc X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0cc b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=8fwEAWchWUUFBy44-ZgA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12114 X-Proofpoint-ORIG-GUID: EOTrwcP_wJLn31FSLKmT0Klviw9j87u- Content-Type: text/plain; charset="utf-8" Add support to set the multipath iopolicy. The iopolicy member is per scsi_mpath_head structure. A module param is added so that the default iopolicy may be set. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 47 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_multipath.h | 3 +++ 2 files changed, 50 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 59d1c0b2d3441..6228ff4be4ff7 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -61,6 +61,23 @@ static const struct kernel_param_ops multipath_param_ops= =3D { module_param_cb(multipath, &multipath_param_ops, &scsi_multipath, 0444); MODULE_PARM_DESC(multipath, "turn on native multipath support, options: on= , off, always"); =20 +static enum mpath_iopolicy_e iopolicy =3D MPATH_IOPOLICY_NUMA; + +static int scsi_mpath_set_iopolicy_param(const char *val, const struct ker= nel_param *kp) +{ + return mpath_set_iopolicy(val, &iopolicy); +} + +static int scsi_mpath_get_iopolicy_param(char *buf, const struct kernel_pa= ram *kp) +{ + return mpath_get_iopolicy(buf, iopolicy); +} + +module_param_call(multipath_iopolicy, scsi_mpath_set_iopolicy_param, + scsi_mpath_get_iopolicy_param, &iopolicy, 0644); +MODULE_PARM_DESC(multipath_iopolicy, + "Default multipath I/O policy; 'numa' (default), 'round-robin' or 'queue-= depth'"); + static int scsi_mpath_unique_lun_id(struct scsi_device *sdev) { struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; @@ -96,8 +113,36 @@ static ssize_t scsi_mpath_device_vpd_id_show(struct dev= ice *dev, } static DEVICE_ATTR(vpd_id, S_IRUGO, scsi_mpath_device_vpd_id_show, NULL); =20 +static ssize_t scsi_mpath_device_iopolicy_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + if (!mpath_iopolicy_store(&scsi_mpath_head->iopolicy, buf)) + return -EINVAL; + + mpath_clear_paths(mpath_head); + mpath_schedule_requeue_work(mpath_head); + return count; +} + +static ssize_t scsi_mpath_device_iopolicy_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + + return mpath_iopolicy_show(&scsi_mpath_head->iopolicy, buf); +} + +static DEVICE_ATTR(iopolicy, S_IRUGO | S_IWUSR, + scsi_mpath_device_iopolicy_show, scsi_mpath_device_iopolicy_store); + static struct attribute *scsi_mpath_device_attrs[] =3D { &dev_attr_vpd_id.attr, + &dev_attr_iopolicy.attr, NULL }; =20 @@ -201,6 +246,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(vo= id) if (mpath_head_init(&scsi_mpath_head->mpath_head)) goto out_free; scsi_mpath_head->mpath_head.mpdt =3D &smpdt; + scsi_mpath_head->iopolicy =3D iopolicy; + scsi_mpath_head->mpath_head.iopolicy =3D &scsi_mpath_head->iopolicy; =20 scsi_mpath_head->index =3D ida_alloc(&scsi_multipath_dev_ida, GFP_KERNEL); if (scsi_mpath_head->index < 0) diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index a9fd02bc42371..2dc02313b0496 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -25,6 +25,7 @@ struct scsi_mpath_head { struct list_head entry; struct ida ida; struct kref ref; + enum mpath_iopolicy_e iopolicy; struct device dev; int index; }; @@ -40,6 +41,8 @@ struct scsi_mpath_device { =20 #define to_scsi_mpath_device(d) \ container_of(d, struct scsi_mpath_device, mpath_device) +#define to_scsi_mpath_head(d) \ + container_of(d, struct scsi_mpath_head, mpath_head) =20 int scsi_mpath_dev_alloc(struct scsi_device *sdev); void scsi_mpath_dev_release(struct scsi_device *sdev); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 056E842B326; Thu, 23 Jul 2026 09:38:55 +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=1784799537; cv=fail; b=M8llfe1jUU6WSqvaRLg38JKLkkTdidrcn+1YZeypaCn65iKfE0LKWNvfhsC+J0i9aoutCk9VG9r8r6pXW9Gves7/VI/TWzUF8ldE4m3xKeoxhKsv2jqYOkyEWyaaWtVTtH3By8LAK3PtzgU4DgCeICPWtcjknIpT6n1fxEnXspQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799537; c=relaxed/simple; bh=DV2jCK0NukbLJP5clvvimPyH7EFK2mF96MXN0oiRvOM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=MA7J/Kjug3T9w3GeZ4WdODiyo1/naV7aqhJcptr95pBUNyfqkQxKqHtCdRBEKMtLzTpF9mvksObm2haZsCtDcgGeQXYoL034MWVYZ+LIUVTNf5VIAQEctwCbYItSQVy7tXElZh1dAHEiOwk9YGmzat1ouXG8LV5pG9AX5WooTB0= 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=HLxDG64d; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=xbKmWPQ2; 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="HLxDG64d"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="xbKmWPQ2" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MNtJcj3766698; Thu, 23 Jul 2026 09:37:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=mk47meL/284dtNW3gJHBJg7x7HNt+T/k6ONWFKyLy9g=; b= HLxDG64dZ/DjvNjKcSpHhTWhKkEQE9U85MBlqiijpf/G3ChezOfLm4UV5ltevzAE flaTEs7M/CFkCucgquB9tWoBSy7CVhAOdIF99k3jtF1HfHfFydRSIfDS2/sg1KUj chUECLxfqerrbIqQbLeaCzne601sNLJYGieodWpR4XDlomSLKtiSf3+95rhoDuTL UGK0VUcl7t/nrDiLA3wu9zgpKoHbUG+r275XvaGewPB/vGIVd/+KmOsag8IRI/LT YMu36tqvDFqzT6gmsLbsC9Jtd9sxDk0XBsNGjf7MOIGJ2jFlOStwL2tmlvtQ4NXW IXB+rnNW/zVHXSfprUq+5g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6mvj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:18 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVeT029862; Thu, 23 Jul 2026 09:37:17 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010000.outbound.protection.outlook.com [52.101.193.0]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxs5xku-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:16 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZkoBiYfmPbf6Suja2mW75uilkZ3hr5CHU411tWJxh42QoTf+2F/ln9kgyGx4mw63f5T3oDfIn3wS/gzlmXfiWH6cTYoB5ELKQgxSoLh/Hvzo4tR148FnDmtIy+6zOujCjxMxr0nYSLhouY3TFa1uGo+Pz7k6X6u1im6fHQEypVdG35CPzHWNu+iaCZ/gErMCF9B4eQ6AH/wh0UExugsJu5PRdZf63RgDtXnoMiZkz97dQth7haS1JT6q/dl1HmngB4zbTKiGkvbeePLaSVxgpO50fCHaS7VTAZbdu2F1F8Jp8qVrTT53Dw5W7DB9+GIIGRfwv8kvsrv8jQIkA/94Zw== 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=mk47meL/284dtNW3gJHBJg7x7HNt+T/k6ONWFKyLy9g=; b=iDOdx26ML27wDzQAXImoiQNIkxAn1Wq0qWZhXJijUFe78pNR1/RI+jaHUeh9Yh194XJLHIVsgUGdXOW8d/7XMV8ASfhG6zYeuAnK4k9wtrSgwibaCBcoIdqTJS9fdV+Uminvn31+e6NvPbGexvShqDg6hizyIC9uVBOhf8n7ygBfAGhHWnfLQW67rk85DUM3kxHPm51mzpVHBGjmLRstiOU1juBnEF8ogJllxKoX2VmxrCl+Qo/cfVrFKpuuoZ2SGQePgkjyeCqQNyXKxB/weyv+JO1tAouNnKUCIb0rvdMtCDNTweRI3WwcqO/1LmfnjSowkQg3mVr2wkZFNlD0jw== 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=mk47meL/284dtNW3gJHBJg7x7HNt+T/k6ONWFKyLy9g=; b=xbKmWPQ2nPq+0uiw8oHJTTgtHKyj00DCbYw4qQVVu1HEwlMoqv7fJxtEP6/6lEDQEePNPa0c9wO6+oVnVIMWSaC7KAcdKKHrDptMk81WqUFsPEX4UiZf/FJnj/m6tsJigS0t7sze+BxNprWc8l8tTdpwz0eO36f5jy60p6BBU5c= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:13 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:13 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 16/28] scsi-multipath: clone each bio Date: Thu, 23 Jul 2026 09:36:14 +0000 Message-ID: <20260723093627.2327456-17-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0391.namprd03.prod.outlook.com (2603:10b6:610:11b::10) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 0dba31e8-6ebb-4ab4-dcea-08dee89df99e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: TQOGkEzyw0mLjDyS29l5MGeCccajYU5VzH1T6fnHgUXy/WP6zpHmpD7Igg0SN2FfijsfBgYbMCGunygCx4RdmnUlQ1PM985hEIGi9JQ+IVQxP3deZIXnXKHYubfxRa3NuwHsOXRqVYuUmWHY34jzv7w7IRRoJOQ8Ucj6ZvUDtgMjHCVqRJgvEwKY/KoWQzYVBZpuxbfEglnx1ia7ABFFqeqX7LXFiTV3mt9KIZUYJv0guqCy/unhQQUpceZCkxIi7Wd00xWcqOD9N3SaUFbbtC+6VEc2wOfWhkFu9upMT6mIDAKjLfoowIlEJM7smRWrMIDxjOV2bmXeS7kyG0X8AYmI67T7HRpr+6aydoTDCKwmKGRvpDbrTUOE2I8gBarz6HkpWTbp55h17kdAs3T1PZcGa+FNmVRl3BHC+3f16b2tC9zsSxUpEBjX2nANxJH1xoN8Es/9bLR0yFe2uVLJxhHKMrWvooG2n+uXalXuNUnkqHIXfifWGKXWlTVEDN+orZ/nFScM5suXQKGzLvtv6vMuOtzoP0CVWCw1UDoNcW/2Jt138JJ+4MgjrJeuFKmTQ+553A03F7yY/7IqdoujyfVaHQa65EMSWWXIyz2FjlfHhnCjfs4rHohXMBJBq15j2SgBtYott4j64Df6bLVvzMPDnkV3xP7YBZOXZoFmaqI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WwcIQxk0GYfovD29BdlYCkqdZ+1ImbdSLefMxRgxtYYXDt3f3CLqhDsHe2af?= =?us-ascii?Q?jSOgTv4toR23+AHV3iJSKzyZyr+hGNFGb3+TFg8Q4DDWNyS7lRwMkhAyp1ey?= =?us-ascii?Q?oCKn8V1wb5gsoj01cOUjfgBvSFKA4P7USLPYEUqIDSy2yANQaGhE8PHH85sm?= =?us-ascii?Q?7ytNAyUCoNAJPJZ1WNHKOA58JBfhR+9I85Fu+8Enf266DFLjDvO2cQkcjaHT?= =?us-ascii?Q?yFZO8PX0R9UJgoUEBvPFfpvP92wbilPapvdjLW4E9dQZmCxIgJHCKCDUteKX?= =?us-ascii?Q?GrLDu7kvecb16VAhd4NNg/0dVceZdUdIIFX2MEyHnOTjB3YboEC7l+AlTIqH?= =?us-ascii?Q?1oF8W2BK9Ak2EGkq93SgjqsfIcA5hiv60C81FOUAIf1aUoQ/cx72bfMeZkEd?= =?us-ascii?Q?iGJdi+dLJw4GAOaKhtPlORsHP0nZNVIc9GHChkPVlMhfbl2mL0vXWBdzSVol?= =?us-ascii?Q?dh2/0gbyZtstRo8li+6Jmsz7sO/iqiVNlwuvE4gEz6VOL3tok02zAnCxGoni?= =?us-ascii?Q?rb5mwoQ1qiU6bwi+eZL4954m+APcPOFCry/tWcOTqW6473dN5+MkIUCxkAWf?= =?us-ascii?Q?bT5WquCMIs+BZgL6w3RkXWdADOh0up34RimH8iL9jOV/vZYc/58M2osHyWC9?= =?us-ascii?Q?yb3+Fvs2UjndSQkx8rYzSlYy5USZLBb7ZSqEoRsb+RMV9TZreiNmQzpUiHUM?= =?us-ascii?Q?ZGCeM6I4TV1ZclR20ri6hAYsPxhlYimBTXraxk37rHbf/LNfIilnyCGQZ0LD?= =?us-ascii?Q?AFJ/TRr6Jwn4PC87gN9KgM1b1f8UsCR+0pytUXqH2AZFlphPp7AtA5MT+vOu?= =?us-ascii?Q?FJ3zbOJXpaOuGOSI9ytBC8yLqJ93Xb4HnYBtMUX1bi08/XVzKAsVzx19HPab?= =?us-ascii?Q?3hQVVBVEK47y/Eif7hBkZb6YtUtBGRp65Hu1tv07X569wgm9RCuUQKjqJq4z?= =?us-ascii?Q?At9QaiIsjVgE0wHSaKYFQANL4dAQw7ShKbwCwQ6g3ID0QcSeF+74lqZM0Kvz?= =?us-ascii?Q?da7U47D8SsG8ReEYK7r1HKJDo/cXc1qF5eH0MEge8d2qM47ZdFbm/fczvf4V?= =?us-ascii?Q?kr+beZq5StU/MQOQcIi0o3lb+iJG1Ixqo7VGCJgphObI22nUG2LwULUx8Om3?= =?us-ascii?Q?g/kWWYvY7yMbD/5Ru72KkKO64OFfsoL+9yfN95p2VsOtkIgG0ZO42T0RmaiZ?= =?us-ascii?Q?yO/FoAVhUj/3m8rQCGwxSdHQIFCJpJZ9G+LuergQQV0QFk+RkKOA4hEDc1d9?= =?us-ascii?Q?K94ngIlSYrnNEfRjo3zBgkZswROKVJ/CuVM6cy/2ZfAZ4XtwYBwfCVsbKiPi?= =?us-ascii?Q?Eeh042oOJDLE23cTgPPLXs7rRB2VUHMtLwW0nMtiqDgkuM80Jxr6Qsla6oms?= =?us-ascii?Q?n08cbeyeyh7Y5cc9YLgInM6HCN9bpytd1hhRdokX/JGerkfNkti/zzd9Xqig?= =?us-ascii?Q?aodz2POOgSINjk5ts3Z+Ax7Lv1Ocmfiei35yBl5io2VWfljSC+fGD4Qr3dqS?= =?us-ascii?Q?y1WeqH8S+sTAhK8T+KOD+3/ZbNo8q1lMeLGlYbQxHAu2ieMibxdZNa1hZ5Pi?= =?us-ascii?Q?P2KmpY0cwJfY/PnIw8uYba2R16veWln8oORmBgZhSao2i9sbfRLZzcuie9Go?= =?us-ascii?Q?3nsrbHJkzT1OarpzKNsCMEnS1zImcl/GsaFfRkCaNsQDOlW3A729TQobTyD/?= =?us-ascii?Q?poPx4IqF4EPTQmqeFQxkR/4SWJNqqkWSqCl44LF3UAqLt8atNGRHG2uDbhpV?= =?us-ascii?Q?P2tFP3wXVwVqlvLybudlig7JB6z/ujs=3D?= X-Exchange-RoutingPolicyChecked: iV10dB8tgpmR8gLtzDxFHUMpN7lSMA2sqhIWJZuqfC1gV179IINFY+9cFg3JcGUecr7USd8+CvFmGsjqpoxfeABF/t5TEzIby/+b7B1l6+Yq9ZDbnChGG8GgBefNPiMsyzBWkdYkYgjj0UqRIj3cgSq1EzSfI0p402vWsqfsTMqJloBE3p9mMH5Gb/7eXpBIryLQduYBABxFsOzCvLk5dYvg+yRXLrlIjbaINdJymQu0mc6FJpydfslnWChtpTypOhcLjxBRtrcq43uIXr1Sf7vDmTzEti3FewPjyR0m6zlNObKzOpayrR3JbPpbg9kP93zdZ0taxaO/pMkcIDRalg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: eto76t0UU+QLkFllEFwNmYQwiu2czOgJ5Kq+9PdtNg5NUPvKMk478owjbmnNag2aVUmLjevrtwyJkV6FLOAQ+dat7KoQTxGwr9TvhI3gQuhrNrV8hjAueCFZKDhDNwG/30rRVLM/7KBkegKDx+jaRNT79uwX6yNeb1M8QJT7Msl53O65oP8MBfn6fZnj8VP8HapcE12jy9DEGND31f1PYGS1YMZ62zfIBRfr6a39aYdU2aoG25TGtIByap8PGg18HWTYB2iYNxIoVSLCYwLuHfj34Y4LpPn3geZNkw0VBTSQSkYbiBXsW+5lFGiVTua+UEh12xzbcWIGVHuDWR3NxceiWWGpkSV7ZdRFYmlbjhkBEZ5HioKcqUsbO1SSrboTgJHvFExIk8gjt8xvpmAlR+snZIOS4gQ+NiZaBfmGvRijkWsJ/U9/IPWkS/9B6Iuv9SheeQqRyWZ0ee1fdglfyvCz7P3MTdn3Zw5Yv7XwE9Q+mbWlZ/ZMFLDiOzJJykss2g5/OMSBn88A/KHwZxzxU7rFPNl2U4HQv4BPvHk+ftdnF2IMvWakCAV+hRy+gqaT18UCxVIfeNGusT3gjnCRIyqoBt+JKM078OuorKC5cUk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0dba31e8-6ebb-4ab4-dcea-08dee89df99e X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:13.0596 (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: 9xc4BGW8t7BQuK/0G4KlEckPXYnVD/aAQjmmL1Mvwlk9BipsEYOqt63iRsXtjF8Q9lkXPVbEltJFcGOE5xtTPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 mlxscore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX6cuowHqIHM/B gghkxYDSuRSKAFTfzBawEVfkt2rStqhd/GRdtP+L1SgvAHUgxIA/rB2tQqur8wwCklE10X3q2hf fGMRgJYmGsDvgeUit/oyzAS50PFa+QU0RZZi0C8ONWvyO79WaacBqen42gPp1Ak0i7rhCCA51ew Az8qtNY2bL8L4kp/HEE6e+PWm0GB2y2QrLpE3YW/qRn7pNxSnPSCPummHafXkMyBBLRfIU2UbAa v+bvEfD6CWshJMDx9+/dlbntccrPJhOQd9F1e9zLrebRvWVll2/9YEtNu4eZJHMqXCLfrVanZu8 tzeOjkWDzEGB3mqht+TlkclkTmvSyTsblid8GqwGtPldLlKHKjCzR7u73kmPBFOS8psdwFDWQ3f W2OrN6l1Ggmke6ZbQV/XCJaI5cBCAmoe3MoBsro1MF+3KgFWRhEEU3wBYclIsn49rba32W9lKnL +vxn2SHdIHlhFjkuDP/+fTgNiB3noRhFo4hStsOE= X-Proofpoint-GUID: gplpqVz2ouNMk_cKhG9rJ6QsITkSggli X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXyDA+by6rDMvN zFhjAcor1kylfwyT83rqx2AN3vkSm2o9PjZpXUzeCF/y65Oz0DVn1iLE9EWqMTmTLVLCeHG0IzL CNFrxA2H8OICwOHQ1Dz3iNAH0CXKCTJMT+by/GVT33Crr5JaGFzI X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0ce b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=PbwEKb89bYuBhGpDIggA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13523 X-Proofpoint-ORIG-GUID: gplpqVz2ouNMk_cKhG9rJ6QsITkSggli Content-Type: text/plain; charset="utf-8" From: John Garry For failover handling, we will take the approach to resubmit each bio. However, unlike NVMe, for SCSI there is no guarantee that any bio submitted is either all or none completed. As such, for SCSI, for failover handling we will take the approach to just re-submit the original bio. For this, clone and submit each bio. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 33 +++++++++++++++++++++++++++++++++ include/scsi/scsi_multipath.h | 1 + 2 files changed, 34 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 6228ff4be4ff7..9a4b35c597778 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -97,6 +97,7 @@ static void scsi_mpath_head_release(struct device *dev) container_of(dev, struct scsi_mpath_head, dev); struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; =20 + bioset_exit(&scsi_mpath_head->bio_pool); ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); mpath_head_uninit(mpath_head); kfree(scsi_mpath_head); @@ -229,7 +230,34 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +static void scsi_mpath_clone_end_io(struct bio *clone) +{ + struct bio *master_bio =3D clone->bi_private; + + master_bio->bi_status =3D clone->bi_status; + bio_put(clone); + bio_endio(master_bio); +} + +static struct bio *scsi_mpath_clone_bio(struct bio *bio) +{ + struct mpath_head *mpath_head =3D bio->bi_bdev->bd_disk->private_data; + struct scsi_mpath_head *scsi_mpath_head =3D to_scsi_mpath_head(mpath_head= ); + struct bio *clone; + + clone =3D bio_alloc_clone(bio->bi_bdev, bio, GFP_NOIO, + &scsi_mpath_head->bio_pool); + if (!clone) + return NULL; + + clone->bi_end_io =3D scsi_mpath_clone_end_io; + clone->bi_private =3D bio; + + return clone; +} + static struct mpath_head_template smpdt =3D { + .clone_bio =3D scsi_mpath_clone_bio, }; =20 static struct scsi_mpath_head *scsi_mpath_alloc_head(void) @@ -252,6 +280,9 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(vo= id) scsi_mpath_head->index =3D ida_alloc(&scsi_multipath_dev_ida, GFP_KERNEL); if (scsi_mpath_head->index < 0) goto out_uninit_head; + if (bioset_init(&scsi_mpath_head->bio_pool, BIO_POOL_SIZE, + 0, BIOSET_PERCPU_CACHE)) + goto out_ida_free; kref_init(&scsi_mpath_head->ref); =20 device_initialize(&scsi_mpath_head->dev); @@ -271,6 +302,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(vo= id) =20 return scsi_mpath_head; =20 +out_ida_free: + ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); out_uninit_head: mpath_head_uninit(&scsi_mpath_head->mpath_head); out_free: diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 2dc02313b0496..5cc37acaa664f 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -26,6 +26,7 @@ struct scsi_mpath_head { struct ida ida; struct kref ref; enum mpath_iopolicy_e iopolicy; + struct bio_set bio_pool; struct device dev; int index; }; --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 A792B4334AA; Thu, 23 Jul 2026 09:39:24 +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=1784799568; cv=fail; b=BlZXYsvfGQs34L5RtExRPFDewGC5xzmSn+ADffno8HO8SAY1uZDGZPop2Mazez4/SH8oNCLUOPmK6BuaAmPzTbllt+K+i/MG4yLw7SsBEkxYU4ucfcEqVzE6cSA7mp+HLMJr7oTf4siEzWXVEBT9ihbKWFWzgcsce5mtkN8dqbU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799568; c=relaxed/simple; bh=3Yt7z7OVmZAl4vY3JxeH9qMcSiad6RIlXvD8ZcrXl0U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Q8t9AMDXx4jD3WfLFq1t14NGL5sAm95kTREXwT8jZtPzLiZ5KGUZNQGtzbS45uBJp9fEj0q5eAX/Rf3T8QxjKvuXtKztK6wfHIi7JUSX0Hffdtmun0jmuo/ZoMaxnXM388JRJkx3+NfYm+/Wc5zJmfRYCD8ErJSAn/P//3j6ZGQ= 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=VNUySdsc; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=QRA0UCnr; 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="VNUySdsc"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="QRA0UCnr" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtXA33495187; Thu, 23 Jul 2026 09:37:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=45rimpSBZVmZPGqS0vQ8dFmoB+VFoT4kTeF8ikXsH+c=; b= VNUySdscu+X3tQ1irAXvl8FFPPXhMseiv8nP+7eMktY43qWeb6wZRZluWAjH2gpt kGb+VgwR2exhzkS0jMlk1i8KVt6zBr0NsO0UPw1MbIi0EPFCnbkKJJEJnaGG85t4 JlXoXgyQAeJk/F07NUJ5sZjN9XqAP8WPKa2pAWaCBHB54FQ2J7ZKN8NsUYSFTL7G GliBrvo9o2yLfCU6XZ4fwmhXpijonHNq/ahgStr2+jXZmTvw+36rLp94wDbhk70z C80RXrNAlqbcRESjMpmiSsZAGun6SmEmsxpnCplDHAdSVhfc+f1IQ5gsD27Jzt7X fGzQvWjfawPhYsgKjdxXSA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1kpxn1p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:19 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9Jh021132; Thu, 23 Jul 2026 09:37:18 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010037.outbound.protection.outlook.com [52.101.193.37]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4af-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JmNDd0z4Lwx3bdJuTywBxsJNOvvjP9mQDBmJUCN9S3GdyW7VbJwQVFkmFV1CRnCTG+lA4p3XmC5JiEquNTelea3TxGr3YvMhuOlD24wQrxShAhIk4o08p1MrELvcu8teLzSPeGfFBDbwm1AS4Mqjh+sfBdrUNdI0L54D2B6FDRyvakWF9rYQYqLmyOWj+sl9owlxmfkbmxJktJzAO/jjZe2hYi8/gCY3Myb3pRfeGZ9eaSr/HDD1MBHD1CjQPbYaOD+Qm8/pe4wM7+EJqF51rj87TCCPuxHvIiH8l7hEnG6eti58WDAgQJElmb+5d0rLV4VtD/tBIH9QcEq0GX1jPw== 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=45rimpSBZVmZPGqS0vQ8dFmoB+VFoT4kTeF8ikXsH+c=; b=lRFGlVswnwUZCfMR1guOAYwTcMBBu31rkrnXhjv6O6ise9ZWGpjULeyIqs5QInT/yAhhDofsMcUTw9UZCvZ1XZGtO8wIJq18M6H6odZBVGbJDCJmvVii/5ELypr7NKM5CtY006qBee48xn+6u3kW2vBsaDL6Ctcp4iaZsPkbJHfsXk+fxP0A1MtYrS1awCH0oOA5ebOqXMAnvpA0rn7+KjcLuLIl83mTveXpm+sx804ly/AM2tX0dkH5Z/mwBhln2O/4YxOhi7KjeBf2L+SoZ6JHl0N+UH/zsBpLzbDnTXUmK8PCZDFC4kWHBBRpgb7qWcaUzNkr74wXgFJ4aSiAaA== 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=45rimpSBZVmZPGqS0vQ8dFmoB+VFoT4kTeF8ikXsH+c=; b=QRA0UCnrMiOimDUULdXpBiOvcVSeUI33C69sWIWshpOa93FVBP14aoceoHC4jTnVR/fln9i4JsQTESMxcNQtOiG6pHfLQv+M7QjHEe+SMFwFdMshWsJjisbBaY2FUX5lRJDNfw9ItOzFOQQX80h35Dx+LQuhAzn1I/n0/j3vntI= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:14 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:14 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 17/28] scsi-multipath: clear path when device is blocked Date: Thu, 23 Jul 2026 09:36:15 +0000 Message-ID: <20260723093627.2327456-18-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P221CA0043.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::23) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b16792b-784f-4482-5d6b-08dee89dfa8f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 8fHk4EL7IBEW2OVxWh5W/BWUpoDDFUiNMsJkifJ/rO9LJKWZqoPPZrTvXwQV7RQDJhTMsLBwCL8lv+ZIQ9+GeE0HWtNl/44/h4owBqbAcOmVUtXrP9f7288uKsNif5YiSBf8c65haR5QTmTNHoGhx/6iZcA8PfSTYEhOaYYFkPEgj3+uRzdJPfiW7dn0dBJ/dZp5B0K2Of9C/k2sjrYZACiksh5z1Fsd1Hd7Fk2kYLaXPS+e5GgSZGbp5VaTLPN2TpDO/x06AojgjLE3wW4cwyA2bvjO4pGAIwhGQ/a9wsiKtTKViQIw8ZL7fHLj9UkM0r16uwiIOyWgLBZ6gQOuSfUWQVl4Yl6ZlTCPyOXJlCWECvyXD95HtGVm6eQjSGTe6H9X5zlFolQs+Vy+hjZ6kYkzJXOFXg3KT2G9NxqxxlGog6SslxAmKTwIS7YavOipWQVZW8oL0A+MrwBzxeX4mMj238ZgADph4058+OM59tO4CPC3pcPmyhtGqtaChM9+pppFDejFE/NFnHOmnijnKfMcI+WJg6+a93V1GfBbT/WYMRPhP1EZUEZz8y0V6/Wo98ztr+9QJv7YM/e5327JQ/EjA7ma0Iq3AnICUIcFXip8dpiNNUGd3feQJpIaYuZ+3bA1tE2h7LvheIKkJsdB/d/DhTaYy5E06K/riBtlhjA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TOp+d/DP16fFwNz2mEaEcCDxaNULKpdkAIggix2W0lLfXNYu5mfgRelFY6TS?= =?us-ascii?Q?aRhaNa9kTxdrE+Xn4NjVjU21QPW7R6ST8Grwrrs3m130fF+AZ8bcmmHHBcea?= =?us-ascii?Q?tQRmmSo94m83DWkdm5e/Lmknv25RfLfiWtmnabgR4PKPYdoQ6ZhBT2wP8S46?= =?us-ascii?Q?nhuaAMEBEFYII2kR++A1xhdc5Yhii7HmJm52Hcm8sq2E6YqTehfUUfk2+jwJ?= =?us-ascii?Q?mkPR7OcEMMmEMcyxq5VZHgA7YzK8MSl7HVTg88X5MHN01TZAs/SF2cdESBrq?= =?us-ascii?Q?D/RpAWecXEGx3n68ARgajE5WsnRlhff4PMsTA2QpMn1KNkiLfry8FqwHCwAt?= =?us-ascii?Q?F17s2GfeMoVZ2jxsr+J0QflcfS3MpeBPbqrDlbi7krp7gPzK1Qm4u2T2beww?= =?us-ascii?Q?gReDcjGDLbt94yvpDGutmmOtSFZ70pYN3n03jVFZRtUEeuwiO0PA09P3ybeK?= =?us-ascii?Q?T0Pp6iKPfRIZYpmMxteBoeHvrfmW5sqZw8343AzR2s82+PPsssGs85TNpdgW?= =?us-ascii?Q?MJS1lWLwHRM2UItUVP0eaIZKGGsbnASQpsUNLrhcC+SXPpBavIlLnLU3krZ/?= =?us-ascii?Q?lTL4lL7P3a00NyqKWpuxDFspEGlrEf3Tzeplbvie4tx4W/BU6Bw7p89maQcD?= =?us-ascii?Q?ZhN6zfkJ4wV8JIhpJoMfbndrUzNpBQ1fm55ugWDgJv0AolRccA8M60aWF9vs?= =?us-ascii?Q?FaBgGDlbKQEHsKOvdgDTxCSCxyn9ld8IyzxicTL5v99IX9V2bWVE32K0MaK0?= =?us-ascii?Q?+8SC+Wn4UnMQepGAKS099JddMNSfNO25N9LyiFmVqa4BiBJEyfeCfH9SXGlq?= =?us-ascii?Q?dlpdmvHvZ92cIIsYBct8Vq1ZQiuvb4RBrQ2yBgOsES9Krs0RWIXzSFlLa5GE?= =?us-ascii?Q?LoUofEtrUNjpdUulOUieWOAPSdX9QvuNIdmGPjaoGbtUJ+d0wY/DSI2dFjCD?= =?us-ascii?Q?bz/xXdhCFIWm/06bQdpCxt5VvVHzS94nRPYmcsgjFrBJR1BFhr5B2rE1oEs0?= =?us-ascii?Q?pDXeKF3tKJHsdj+6C3/wHMdgoWQSdVBCX+50l8GWyQ3jsSMhM6KEPwT8bmtb?= =?us-ascii?Q?5Z2VQHforg5mBpEe1LH1NvT2KbZ3/245B13patz5/NXJHyzJ5ej6uMOxoPqn?= =?us-ascii?Q?vcBswLqrUfOYs5kh7j2qg20Mr/D4B6jkFOsqBHwYCRsNjNy1KLYg3WBpmZV+?= =?us-ascii?Q?AdKUp+YxETiK2qNt4zowc1MxNWnrhjSukUFEXycyZ5X4vqK0SbItQJLyu84V?= =?us-ascii?Q?L1wQ6jGMuuYzCltO+eU+vaqTCNnkU+tJ2BW/ui84K4itK+r51NF23aHQvyjf?= =?us-ascii?Q?6SDEvkU/Ibe5W8f1Y9kM4CXX3symMzWGF6FRqLqlD/mrRKr+G47ge6K/LSlR?= =?us-ascii?Q?EeOBwxx3EF1Z52f5+hd617fquWV0/ui8HiESNE7tCny5dCOcAHz+VFFxV35R?= =?us-ascii?Q?vwaA5TdJfVzGyz3BYTkt9WRiZrml71s3dFuHbxobKmqBIs0j6AMiRLk8iLkJ?= =?us-ascii?Q?48aQUkwzj7CP7V/hXKY/tcnWifHMDKrtDxjNpyyBfxxnvTTNPvniwNQ7fKml?= =?us-ascii?Q?KiDwePlVB70m5xmQ6r3ydcvasVctXHM/JOTnT+UDv09MmqMCAx1P0fX4qLHl?= =?us-ascii?Q?KP3ZQpHVhG0qtJ9tbpYyFZXuggEx57zucTxtVwf5QSABdYau0vWksU8VVRZ0?= =?us-ascii?Q?Tk5tAW85Eor0LWcx+epRmJaFmGaSJVa6V3hmOz1P16ebO11SnsKuipwlmTjt?= =?us-ascii?Q?B+kNZDFKM3QpTrngu5Eh/qNNw0l7AiQ=3D?= X-Exchange-RoutingPolicyChecked: G+JHAc3jABlS+z8dB/bLy0C0SAKcI3CeWhaE1gVhq77xkFvmFaIog6pQQyr0syBtHHmCiL8zBVXk2US8RbwHajJbfxo1MFl1mw6cPb6XWDfFbUXrrxsqbok3tuD3dWk7dBIDzw5P53iIfaa8rvQgjKkV4HQsREuMQpRYc9yUQ44wNjSVqlGHqJZlXvilL+GxjwVvRL3yZuj+/qpjawgmjzHhWdOTiLLkI0x13V0FjhJbMYKjLPsKvdFo8do7UPHQHRe5/5aFrIuc9JVw1VnGmXSkhW/ougA0E0Tq86cOGGo3MlSd8DiEJiOm1eubNFHPXH7hgh+DBDqhxum+5h2vXw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: LE21CU/djGt4P26qqw2wzDfErFTV0F/XJrAofdIYx0G6th7TCgOQNK5iSkyn/kxgshxwdKSH6BGEjx9PCGylQqhvnzRnMFJvAEBJgexyTAoXEeheAv/MI2QFJTb5/ia1kxA4YUy1CBUxCDci3nQsfTA0eF+RRovb6cE1Q5Ab+phLTH5/4Gc7pjnjLWEmLxSC8+Owsz7Ctpn+EUmzzOlrMyrDyzkUuR8j/GThp6PC/XT446eS5blq1G4hqAsGvm4iWiMdtzMvQdBctQSJd/avse9o/CjQsizUFrpP9Yptme2G65tSBYYOcNlCV4QyacxJn7T+OQKpwOnqEFPt/XtZQpIy6KK+1hXw3ElMyg8ow2sLiSVKiRxRMjyqRMalvcbQSInKNWPZ+j7re/PLEEcTcrpIOUS7yMtvdd5/vhWbLsTYZ0WBN+qKOPumEqiTkDKcyAz6A83aR3BFsiPxixlpbLOyQBqvFtivatz6Pt0/A7K7jHd5Wn8y+pf+goN56rEFBkTJRDCP65wIITi5WbKwOjpKhAtr4HigapEjb7uscLq02N3iYMPSy6KQUXMaEbUYOi8e+mMZ+8nehOcKkxNmV6HlurVB/aPfwT0ndCfkYE4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b16792b-784f-4482-5d6b-08dee89dfa8f X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:14.7342 (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: kn1pnmq2/le+S3dGqhYexreQ/Ojm4Y3Abd86cPk+uyFWDiLAUtYE0xv17QObMnmrYL6dgW83EXn+KHe4QS+0gA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/t9NFDec/PVv hThkJzN8kKRMOOKDvv4fWxVPjx3g+r6AuxTteg3tQKVNB5BSF6HMchjF0zsZ5bBDVBo/mmf/uIe qyIRP63NA9Kb36JE5ykNVItk1i07A3TR9H6WoKx5kh0XNeQE5mRp X-Authority-Analysis: v=2.4 cv=IKYyzAvG c=1 sm=1 tr=0 ts=6a61e0cf cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=9iB6f5t5XeFLL-rLAp4A:9 X-Proofpoint-ORIG-GUID: Lx5n9SD0tIKfDsAytLdBdFaOlqsCRUJG X-Proofpoint-GUID: Lx5n9SD0tIKfDsAytLdBdFaOlqsCRUJG X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXw+K5CPhz/+ea hAjjWmmtjkRDDTwzVX/y3aOWYQecOB8faOC+f205a+pZjgQSCP0H1kZH8/qcnxH9nXr3a1UrkVS rgRE0dXAVguHknwHCxY47SmnmXZTgx5PJVJ6memqZVIMjG6tSJdSuLNscP1sEM04cSEGSZ0cQTX jyLLhf6hl5lyDDUFSJTGXGcbMpqojUltndRh9NwpXBBYPKdM77HiIB4Of9vz0Mjtz+du7QLhkbY oXjay3RjGxertLI0QsOumNS6kXmfopiDc7ZvplM7UNxMySikXB7Hy6uzO3SUB/HI4XYeUNRESvH Xs4Yx4s1VPpJi9R+6n1AfFIsotwwmSIC58mbu8qw+SP3nH03sphc9FwvKND1vXs0qRwVV7+r8l1 E3+bLE0la/AafFoMDu2vCRU0VDTRAqQU3ZgX/yqv4uDDtYKBo7wJki4QbrZ35VsyRujsmNcCGdT aZOYw8SCKVFI2T9lcZQ== Content-Type: text/plain; charset="utf-8" From: John Garry Add scsi_mpath_dev_clear_path() to clear a device path when it becomes blocked. Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 6 +++++- drivers/scsi/scsi_multipath.c | 10 ++++++++++ include/scsi/scsi_multipath.h | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 22e2e3223440d..dafa781288046 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -35,6 +35,7 @@ #include #include /* scsi_init_limits() */ #include +#include =20 #include =20 @@ -3007,13 +3008,16 @@ static void scsi_device_block(struct scsi_device *s= dev, void *data) mutex_lock(&sdev->state_mutex); err =3D __scsi_internal_device_block_nowait(sdev); state =3D sdev->sdev_state; - if (err =3D=3D 0) + if (err =3D=3D 0) { /* * scsi_stop_queue() must be called with the state_mutex * held. Otherwise a simultaneous scsi_start_queue() call * might unquiesce the queue before we quiesce it. */ scsi_stop_queue(sdev); + if (sdev->scsi_mpath_dev) + scsi_mpath_dev_clear_path(sdev->scsi_mpath_dev); + } =20 mutex_unlock(&sdev->state_mutex); =20 diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 9a4b35c597778..6a2b06c148c1a 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -230,6 +230,16 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mp= ath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + if (mpath_clear_current_path(mpath_device)) + mpath_synchronize(mpath_head); +} + static void scsi_mpath_clone_end_io(struct bio *clone) { struct bio *master_bio =3D clone->bi_private; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 5cc37acaa664f..8f58c44d96a77 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -54,6 +54,7 @@ void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -88,6 +89,10 @@ static inline void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) { } +static inline +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) +{ +} static inline void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) { } --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 A319C42B746; Thu, 23 Jul 2026 09:38:56 +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=1784799537; cv=fail; b=DiKZ+I1O/yvnqIgPrfCPvDoxO2kVsEZP2gkfBfr9Vbts1lCnL1axKkbz7a2ZPdPk7Rd7EE9J8TS7KoR8ls/cvGT7FYdJoIVi0AyiP7Ku/EGacI4M5bauITv83i7L6G/DYkms/hISBTraM5Zlfa4GHZYpgneH1CN1YY0Yhedbkys= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799537; c=relaxed/simple; bh=VnsgGjpp1J3Kk1betwDfZ9LLCf1Cuzy01Y/bJIMp37o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BTpEQa7YnIR3PDtRVQv11KP+nU+DTZGu1eBZ+D0ZrGiWsm1++Rtr/m0CM0XFx+2gC9BbhISYuSGtPeG2OAvdRLS5W5IsL1IqOgdayUZU2dl0fhJbB0QaucV7aD5wEQKXDqlwXfP+7qsvyNQofAmqJk9O+jR0Vxjz+PmvcnGbAjU= 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=Z26MmIXy; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=VHpLDdso; 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="Z26MmIXy"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="VHpLDdso" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MNtJck3766698; Thu, 23 Jul 2026 09:37:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=1xtuB0wlvQLQNrnAq3jHfUb/L/hP3ZhiUqLkGQxjcMY=; b= Z26MmIXyTkLqrkx8gqRgdfNZYl2RCfI5HMRJQMVxuWB7i6NQ82oRyVhjvcjH65wP /2G32CkWFa7OnWCJ0MdAfgi0M09f5IOe1p3j/k2yRguMqvbL+L0i6qJGjCQqqw73 m0K4TQHZoHrA2qgCvERV2dwmBJtoSWwzdnCYFZcLTzsbiEn86KUEZO6gizuVG61A Rir6FRAgldIO2DajiqCEfd7QuRTDlAeom9k4OQTVCCpE9LE1aAWS0Ry0tMuo00ip XD4gT5XJTup7YV2l1RQijRymwZUQ+19Bi5L3ID4IVepMr47ZafFTf3UQhNpgYbWT s1nVmfwzok6zFK13+KQubQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg21q6mvt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:21 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X8Pn003486; Thu, 23 Jul 2026 09:37:20 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010019.outbound.protection.outlook.com [52.101.193.19]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxen58q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:20 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XMcADAtNGBL9WiAjMSM+B5IoZGvvWnWxRUd8ewyMfQuZ7D4Lg747xHbMrRoXslEa/JOvEXajempfzksPGn3pPxWdx6k26JYLN6+DPR5UyO89bsJzb0cih19+ARP+pKLat0CQ9hZ58QSXFelpmkLGcWrtUY0jtnwZcf25MMiyXPxOgaziDGt3VsTAep8mJ1El1KTQlRqcrz8LxWBvX/LHGuPtqHzHXnNLxBiE76+KA6CmDbQ2UghFKDenp5w5MCNQ29E5ZQe70U5RNVg87mbsd0rHgIWgrwZ2rWJhbSazlAeeDi/uj+O7Pe6Byi+CQGx/9MHrpjVMdT8eajLM+umolg== 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=1xtuB0wlvQLQNrnAq3jHfUb/L/hP3ZhiUqLkGQxjcMY=; b=YpaUIahY4UkYq8V4cLKM3+imAJGMR6boLxmKaxeRHpVXpCQa2XMG9Kb2HmwKWtt1YiUthR7jM58ylSVUbGVqQYIQVNXafAaqc/cvSEgrOpLN2Lpy99xps5DYP1nablwcMRlY45tMZ+PVUEbhA/xM0yiLficwytZECDK582Wsd8Bms95G/6286nsFmeCerbfB9sYkM+lFnBl5+2YDILy8TG0J1IbJeWSJEuZot1hIaJPdz4Jt9fAfEXN81WLKuMpjV6MB9A6+w6mE54mczf/tA3R2156BTmmi4eZauu+vxJoDLCOSIg20GRcVGflGfTO21nPgRJDLa/hqGPy54Sk73Q== 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=1xtuB0wlvQLQNrnAq3jHfUb/L/hP3ZhiUqLkGQxjcMY=; b=VHpLDdso8Yc2x8aJFBfSynDkCXI70t/FdpbqZJdwH3p3w14d4aCU+/3ryWHV1x/p34N/slk76iLj5hiQLoneFvh8e3/0QqfZzMyDpDW51tGZM15UBj8xzy6O56yVDK6y2/EoLRRCgFL3xjkKhpdaWIsdDzVVpD4+hNW3iB163uA= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:16 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:16 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 18/28] scsi-multipath: revalidate paths upon device unblock Date: Thu, 23 Jul 2026 09:36:16 +0000 Message-ID: <20260723093627.2327456-19-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR11CA0019.namprd11.prod.outlook.com (2603:10b6:610:54::29) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: c37f7c4a-730f-4d38-1ec6-08dee89dfb69 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: ixpUSeAWZseR7jIIl8sXqLjmj/ca1pD+3fK1LvEYJmH8bH0UfNtGfRn/L0AsiTmwxVeoFEV8CFZYWbYyeLX5epOxenggyzosPNTMw93WIYu2yTbsWD/69kKx2e+pdNJjanHs47l3eGFa4N7doN24BThTsfL8chDI6lvlI8RyJT58b4LHCvX3avUwdGL25xOUWVJrba5Tc7lDIANxyrHEKQ0n+sFDwyn79mT3n3IjNoFOywJq2ttUJ2iW8DjbVYZo8i1pQ0Ja19akQ27q2KguAsP/WKydp3qg3ROR/CvInEAvpvT/zFF+qrzDrTf0UzgiYVEONcU64rL8/AzDL8/5RpckYJcu865g+tOOhjo2olaxXXu1pAkeqhwV9KfEuwtUdz8Z/ecQ2QDgkirRwNv+xQxTAgsefZzFjuBD10yd2VKeYRJ7sJS/0e79GMAh8pYbVZzdxhCSVOTNQiavuykNGeZLlrOUjk9gITnoGlQvFlLKLTQy6KUXods0XX7M5M+hd3oXkMo2y0oFs5rVYCKwKNGz89fCrKuix7JDoamhT4bE748MxHby0s7bDawkOEv3F0U4EXae6BU5wPP364cavcirwj3PQU1CdqQrL89+51YDWshJokELh8qyxVoxJCOkd4TDp4KFXFw5qfBkV9tmmWAj4P2WTSornGHYbE8MFBs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?e6m2+E24shrxd4GyYZjcI5lANqgUKH/gg30Fjrn+Ygywln2fkIJacBNpH+yZ?= =?us-ascii?Q?7iW1diIxyfrr5QPqhZM5jVilo1fc70mNAgizRFv0GnWwH1mWWElGjCTFrR85?= =?us-ascii?Q?7AbPuMAK/q8rG+BTRkArFaNvyqsjGl1qVleUrPsHorcL8Q6J87QZb7LTXEjT?= =?us-ascii?Q?N8Zcfv5SmsyPqSQFFth1RAqnILeOdYkHHvUlFZLMQiIlpwfMCsVpp695VH3o?= =?us-ascii?Q?0HgQkuUD3ZHn+2YetNuFYlvRlitDaAd8Lt68MW4lVD+qP8TEoAhgaBddw+hh?= =?us-ascii?Q?MjHUujp3ZMGzEulI5eLBKwRepoMyKjMCvUqau0KKlCFv4uuYIqeL8K0wqoX9?= =?us-ascii?Q?4638qcp77RdjQRbnUJ67AMV3AEeRz4Cwc49Dj4v6MC5mPLn8bwYrfruFIRG2?= =?us-ascii?Q?RojBdXoS9UGC/iqbsDjf272ild1kpnA7h4LfAx8nQ9MIX5FxxYqfKHtU/nPX?= =?us-ascii?Q?u8IOgks8APCob0uN0jaQ+Pi24CKUxsjIs4/MLEBtuejSADIAQ5V2UA/YxS5I?= =?us-ascii?Q?RJVCQHq0gIKv4FJlDI+l4udt5A1YYfsXNyadSq6KgrpTUoyokQ+2JabUKLeU?= =?us-ascii?Q?sO7k3X/2hNHJLfpXvYoRLvMBCJlYIkKNYFUyCc3sa96VG7fHeNBr8Pa2hX6a?= =?us-ascii?Q?9Vv3UyQrJhekUuLxvPhTs18JXIClnFikABZmVA4wJBA0Y+nC3eygHuXDfmMu?= =?us-ascii?Q?9zuOMBtr8iU/Cn2ggg6nkeuIoLbeVyxh4qyoI628bh0dEVhHr9+AGGcN6hTb?= =?us-ascii?Q?bCzcSXIuuzciB7IEYvwE0LmMjUXIERffZTgvquaejqGcnPf+aOGf9XiuaIKu?= =?us-ascii?Q?De7FBXMpr5D4Ea5FirPQwW4uIPCnpkFgVKvo3YzZ/qLbqCRiy9C3pAu5Pa8/?= =?us-ascii?Q?cQmN+UTUMMPlXJ8p/T6dr13xsemyIYZWmNTYb63fkd5CMyXmBF4DRpwphIuH?= =?us-ascii?Q?Maa7TLvuJjMi1gOFh5eEzDocuMY9RqMy1tteo/rWDTfNq4bnoFe9WSjaK4DE?= =?us-ascii?Q?TsK581UDCplrCnx61dQyE5Imgm0ET/TexASrcC8XRrD9gegyBlq8NOvElzP3?= =?us-ascii?Q?BK20qCl2r/hRKM/4dSS1661VRj0UMcC35QeJup1puGAotOVLjs5BBHZB2nQJ?= =?us-ascii?Q?mnSwqhZxIvLGYeLF1/z4QatzldMGHe08CbVOcbSlADLl6Xcr0FTlZ2E2I6fx?= =?us-ascii?Q?UFyTzT4BzdFTzih7sVQpj7Z9CWmtms9uSpRHM9BtPFPYd+At3kTmAgu9m0Eq?= =?us-ascii?Q?u6j9eKuSDD9t3wD8Oasfur6lU14kRjT9ulwYTqT1FW8HXl/Wfi5XUjUfSlln?= =?us-ascii?Q?MjCHtJfmOuOt8hSy0B6EkHXxA5AxBUiczz68LDv/d11tP7c9HLyOcW4wg9PB?= =?us-ascii?Q?xVLLZjWq+7L1UNdfToDDH+pNjY2NWN9Qwy+9yDfMlbLcf2r1lAoxM/x4IwSA?= =?us-ascii?Q?8Ru4f4xN3nfukMKuZwrwNaAMSyhmSdNr7Swl5lnB4p4Z9cGSi4jaMeZjmt9w?= =?us-ascii?Q?MQWUutjX7uh6ipeUewAe+2BCCX+B1fk8JC3Dwwss9BSxgMl0ziqwFP3axGM2?= =?us-ascii?Q?XsqCUW/1LgAuqPKFiUjGn42Hx0SquUH0PRlzwh8oHN9qSdjUx/YpOmxg1v3A?= =?us-ascii?Q?CZ2cxgCtch5ZZ4cI0d3/42p7512ltt0fEdTvgRU+WkTvTFd5B5K0GGOxQiQT?= =?us-ascii?Q?ShYaaEBtvSpHhYRTyNSsNrBSjf82dUys97Vl0uFxnU30Sgy7SdurriJUEJcg?= =?us-ascii?Q?gtLdxbkBdYXDY2kbeL0ENNMmO7xdn3o=3D?= X-Exchange-RoutingPolicyChecked: k3PARCootWOaHn2L13R04m1XgBDt3Vvgt7bD+PoslyiVupriPn/3fo+3gRxj4FwO3G8pw29u9FE91U1MDn+5rstXHbvGfqDuo3QTBf7RJpShZKH9rDjFBvGuqeoy7btczYHusdIXyi3RqNlw4yx/sB5riaBOzkKfjZ1+B9w/3lg0h6fB/cLRuPFqMpCR5JaHnhoN5UsRvBU1zdp+2QJR0b47Xr6XFQERlDBRy5HdJRsA1QhcZyUrNoWyTBjuspNxEYofzFAZ1ddqrQLo/+7GPQM6s1tJtPqk+0imBpadHGlrvLA1bz3gEB/Zoi4+fi5NCMf5pYJaXksHe1z3VNCiig== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: NrqFLniKJIAO0mwNDd+fszXDL2WyAvvzffavQvbBJtkbyFVcH3/E+UTd20omygvMJYTPtEOjC2PwPoEBf1dk6GDrRv9achpNUZN+wjVLrOJ2eSYF33NsGZvwb2wWc15kLswddJA8jXTP+RL6W5yxnl2sCAwHzdkoxe8rqOFUyx7C8Bvi4qqjo5qR7BuZnyzaYN+AotN5tDaSBwtCfgkx/FqvMtiLRlkCdod/fvGOLRg7EXPL4Jr13etwfQS5HI/e6E2kug1bIXCzXYRKZwvlvnLRSWQxJ4DjWWOmFmAYBh8v+P+thq1eqeeXZQYn02XWRSyIsVrgzOnJY4oFda6YHmVp3lIUewGVQgz46K6sF6psRojeM9qN6RbAGJlYBpT13ZMrLX6NsGp91XICxRFZRZZN/XLl0v7KQ2sJZ/2w0L21klhtQ5DuwncxIbCjZ8z4UMXxVnK5BuBLQ/G5YY69Q+9bQ9dfiaSliLFcbxO/n1N5gpmzQGWfCHbiXY/ZR5SFtOQ3W/+1ExZK/qL/tAGsjnoaE/9fSyOx90nuJTULLVIXserS9j3usb6gUbH+rvEUs47am5YUajO3hHIjatpQUFJBIL+RyQ0n9gvTY0kWH80= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c37f7c4a-730f-4d38-1ec6-08dee89dfb69 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:16.0631 (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: Ig66CONP/wGL+CQL7C9PZEw95/giv9Zc6K41hQrmDwOKvVSNqAmTaOzJChsxxVQ0J2Apx+RnFGLQWTnAdcACfQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXwJnc7ecRZyne NtOEt1uz1742GgDqtHTP75R7hhJZ2ON4AySNbQeR3nGo59xGM3MBX42KTn3n8UwE5NamDZImT6V ot8tx48/g37KCwoHfIMyHk5pBJcBjzT8R4/ezrrze6l3dKneAGiSg7oAs1YgZeI6eyxZOufiISZ ZTrHwh/HmG6OlY8hVIwTC8QApYyWUW8QuNR8C5Gl+uHRgdvhHD+K/JEhj8IGRcetAxLVgiATGqQ 6xU4pE73JWyTPwoTDDU1rxRi8Ybb9erZ3e5g4lqVT+jT5BJ45lpKVEhTUYEnc7zMgy9HGG+rwXG n/PnKlRCRE11nAw8S6GbARSxH1Fw7a9FT15sv9XAw6vsBBbgx6EiaIj7R5/BySWm6snChPuB16Q ntgB4u50g8KQMxwDimgOOVwE9d5hu/2V/k0c8STBriaROezFR/jrnMVZgW2NiUMs1RmPs9a1gDt MDAtc0MdsEsilFTNmGA== X-Proofpoint-GUID: l8VhxvYsy2dPVxy2UchyTm8CJnM8WwxP X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX37TbFVKY9ni7 rxK1KmS3Jc82u5Dyt0qYKjhFmpD+2uwJq/fDDCThZlRSV6ouu6o8hiePJBbgrZJZD1FEaD2Lbh0 J7Df9k8gtN6FLX1sm9oG3zWHY1xxlYJdRL9htupEZNaxWSWCV2gJ X-Authority-Analysis: v=2.4 cv=ALkdLnG8 c=1 sm=1 tr=0 ts=6a61e0d1 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=PGUL5CXhDM9-3yhmlAsA:9 X-Proofpoint-ORIG-GUID: l8VhxvYsy2dPVxy2UchyTm8CJnM8WwxP Content-Type: text/plain; charset="utf-8" From: John Garry When a scsi_device is unblocked, we need revalidate paths which means that we clear paths and requeue any queued bios. Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 2 ++ drivers/scsi/scsi_multipath.c | 8 ++++++++ include/scsi/scsi_multipath.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index dafa781288046..1e13aefdb6d64 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -3100,6 +3100,8 @@ static int scsi_internal_device_unblock(struct scsi_d= evice *sdev, =20 mutex_lock(&sdev->state_mutex); ret =3D scsi_internal_device_unblock_nowait(sdev, new_state); + if ((ret =3D=3D 0) && sdev->scsi_mpath_dev) + scsi_mpath_revalidate_paths(sdev->scsi_mpath_dev); mutex_unlock(&sdev->state_mutex); =20 return ret; diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 6a2b06c148c1a..b896d28a7dd9a 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -230,6 +230,14 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mp= ath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + mpath_revalidate_paths(mpath_head); +} + void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) { struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 8f58c44d96a77..cc77e63c43da3 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -55,6 +55,7 @@ void scsi_mpath_remove_sysfs_link(struct scsi_device *sde= v); int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -93,6 +94,10 @@ static inline void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) { } +static inline +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) +{ +} static inline void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) { } --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 070F44399CE; Thu, 23 Jul 2026 09:38:27 +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=1784799510; cv=fail; b=az9bbiMahfAvS9+Qo6tGSc1tQV/YPMEgFiSzBL83HQEP+8rLQ09KkaA/atAkoljSCxQvYsXLGZ4ZaDXEp78RaHQLGQlRXX6hbsb1wOpNdC6N930+77yacFF40UlNTpipH3LodwzxCthb4GSaCZPvnfZic0aqLlkV/9ftW56LUgY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799510; c=relaxed/simple; bh=FD33QGS6X/eXoFEsr97Dqo03fjeQIoNrhRRDGrLr6wo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bSnCNxRIqYGrPJYNesXNwn3S9Vme0teuZovL7Jg/3xZebEQJp3iG3VWbJZcXFlfLMgBzrcJtauRCD66Wlw+mGaTTAnrqH/tMsr78HJv0C4sOAexjUlgUBTMhLlhpJ0p4OC3whkZgBTRoU1yRR+nckm7tdusaWslI+VIRPj9Zupc= 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=T8WDqav3; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=AV0g3heO; 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="T8WDqav3"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="AV0g3heO" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtfvc3573953; Thu, 23 Jul 2026 09:37:22 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=uxY6nTKHu2WgsD/fbJ6SymsyPhk5WbDEGESc6o56UDs=; b= T8WDqav3yC0IJR+memirOynliz3iECIG77n+5fSJMIHcRzvphai8AUrL+gO7uF2g HVNoNAZoygBInYhd815rvfM5Mwdja5Uu7v85ozZWfQalfx2DsNP76ZI/1E5Wpzc6 AionbvS2W0JNNciQtqiS8eN/WYvUx/lFNUHLeGcB7So4z4rEItyML/9uptnmTDVS ZU3z1fadvqnD6wuzOl8MjIZ8vQmRxTCWP4ijiRNFO97G/frsIGYZc0rZd/yec5A6 0/FUPrFVDv23HdVR37SmguvhDFa2eIkqVRjDuuwdKkNcGyKJHUAP747PjiwB+PIn Nc+wJKhqma1rthkqR7yHOw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1sqpqc1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:21 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X8Po003486; Thu, 23 Jul 2026 09:37:21 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010019.outbound.protection.outlook.com [52.101.193.19]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxen58q-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:21 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ExBAlU7WFh430wFJ8kgHo4sh/bO9xp2HTDbTk9Orfi9WwkrXOX3jQRSx+dhIo3Y8tZ8tPfKkgv/+gGjDpP0p6RUqSw4KCnEGAm+y1Rr/sBYFRam0Jv1N8cJhp2uaHDRxxAY22uuvEc9faJ9avU52oFlYEt16hDRYw+aqjeG7LDYQUBYmM7Db7VN02ftTtJrNlDpHZ//khpmk+Wr8O6UbzLD2lNMn21iy4MxsNtF+rxJ4P7JnB3CP0k15QAkXHIEky2axH75rKXx2X3rbhIzyJ6HuMQQMejx9Os/qVvK3IYNJ4iIhVIkDMr/wTxhAv0aPoptWBNSSX4v35rhnG/hPww== 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=uxY6nTKHu2WgsD/fbJ6SymsyPhk5WbDEGESc6o56UDs=; b=idG7E5qOyUAU/J2aGH+yh+6SrCKtZ7+kglrUHVg+BOBScVx+szgkbrsQq8JVo/skdo1g32SFKeZdSOrHodYUHscfNvd3b6lsEcVC6ZQdlVfIH42/kOlvlrneF3Ts6SKcCFWtoYVV35QWvgz0DGE8oS6RpmyrRo5WvlPp0b/maTU+AhL4zufM536QUwfGsP0Uw59w03SEDe4h+clwE9JjTqZShlMVzjhIu4c1YejT+7M+ePos16BkUZUAbk6sN78JMJfbVmk1223teDzzR+n4bY4wxFa8DxbLCLFQNbAfGLKkwSC/2BXvwQNmlC+kRzYgDboTHumHcOyHvTcZ72oyMw== 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=uxY6nTKHu2WgsD/fbJ6SymsyPhk5WbDEGESc6o56UDs=; b=AV0g3heOV9krSk3/xc06P0k0s3sDpL3AQk1s927RGW4MW4NPXrdyQuubcRrQrVrGmUaRon7WOGXtkM6J6yPJEPl/aDTPqy8XHeAfr6Dw3Ir5gWZ9SzQPhinF8xODNnRrOTb2rp74h4HoUELgZPEzUUGKqbipVzapXg6FhRTjkF4= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:18 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:17 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 19/28] scsi-multipath: failover handling Date: Thu, 23 Jul 2026 09:36:17 +0000 Message-ID: <20260723093627.2327456-20-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR12CA0016.namprd12.prod.outlook.com (2603:10b6:610:57::26) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: d01b19b7-da5c-4ad5-6242-08dee89dfc61 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: FiKz1N2FBCkQVBU4fniAT2GyyUwpwikhy681rnBLCZfgpxkf62q8pRGFcHpkmDuD9Bnwv1BoILpz7uzT0S/xpWNsrweSdpXfJ2m9GXtVrfABGhLhC3dPSOVSsF/tLp3FLHlRy7TntCERnvp3ypTWNRGwCjBj4+2rlYikODaggHFNNej0mKObkEYIG2IxaUuMZ8Oq+TzOGy6vTvi26+optLgzX02yiJlh8RNrOlK4MX3529SeCee7iznQcbu2QVSmaLpQtb/c6JZPzeaoUKijPvZiWisAKdnAwlGzjBFYdt/ZeD6BncDodguXk+MDQTBvo+B0PNmhDJvAZJIElIEmdqmYrXWxlcS9J4Uox2HQaWutlmZJ/OQn6CsLrSNo3h8ascdQ3DIUpK3DqS5gFTSmoy4/XTcb9XoW9ABBCi/u4zCPb56kNCgnKLbm5hxGJG5vvkMzRN0T4VODafH7jLnAyoZylnaYdBwX6t/GN75b+grdSnI8x+StAKeZulovUfZQtVhfjE3YTKWnAf0ZOTk0J7XPp8l7J4Xndl3+aPPjQZdtAlhGRpyIDjyYaZgh8+zVDzrNJ81XdYF6kWUkHGLn3BtCokk0r+HqvsCENQgdVNyn670LdMWlvUuj6HUnx1TIy1/rKnUrqVcRoASWTP/TaA5m+UMOjh5uZz+60owghoI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kS0I9vOy7Iz8VmmKFw3vN5deImnH833Uzt7AjMTsZQKeATD/5h7+XjwMg0+N?= =?us-ascii?Q?SLNTfJ50mSBW8AsxFpgBampNfov6sJu6IArF0Ye0FxF7RaV6QMlIb4r1uoRr?= =?us-ascii?Q?I8POHDQ8LuOwABJPHgVG+7h8lgX2zwV1PgqKJEGgfnP2k6uEsmSlqONrqebc?= =?us-ascii?Q?TpjHWxOqxJZjMbPhROAcyzY9yiC10adHpojH3XKD7Bdtb+gFRMeH1jjw6Z3Q?= =?us-ascii?Q?/XdV5IS7+GQK9nTLesobr2NbggqzeotElx0yKVsgI/KcCqhaC+qm5GVYIn+y?= =?us-ascii?Q?cUolzNSsa84y4rQCnPI/B/RAUALo+4/IVbpx95zJ8+7RFxO6gQ6ckL8WrgBk?= =?us-ascii?Q?52+rB8bvrtKIPJWUrIKtW10S1HzX6U52dTUahzpM+g4itGs0to4kPc/6tgRJ?= =?us-ascii?Q?vrAvV8bRVrxyzGy3YGqzIXGRgtPFw00fQS5INaHByCX502l+AhLAbF3yhrMs?= =?us-ascii?Q?CvAUEt7a3tL0dKijp7IgBh/hhqHhR2/XMs0oJU4q6P6ONTUo+Xruxj9IIXkp?= =?us-ascii?Q?ZtdvXBgTv5gQtBZBd10rDbFmJK7l4kB/vufVUC4XbcmqoBxuQQnot3ZiGzsw?= =?us-ascii?Q?qb7n1oo0z2q8BW7VDS+o0h2ssZ17jsDUcJkw9/+gJyc6ZnxlVAjIL3yOaz/8?= =?us-ascii?Q?TmZabjfsZ262j7j3upwkQPBhESZuh+4h6C/pRUREtjlI8OtUGqd7e+yHzznW?= =?us-ascii?Q?t/tZximkOOUw/lPpUcC1nDkmFVLBOjpO21R0tgcBcTT3nFS4aPuvUNydVzzp?= =?us-ascii?Q?oOX9DZGGq16jF7N8blh7sO282nZfzyeRiF14W3qJFS/41R9/1moR8M8Pfl+v?= =?us-ascii?Q?T6tcOJTXpD/m03CGhx4oafk4jMDY+ckjbsCwsAYwvsoqGpa+6ypYqrv4UcGI?= =?us-ascii?Q?JS4mTYt7jCnUvqiVbqBM3tBIYJKtCYDnXAwiXv3T79NOMrDNGXV1IUGY80gQ?= =?us-ascii?Q?v1754bExsfoWkoZ0XjTPSH27UY2RFtMk4jFTM7zM3y7jiNG1IMpQdgIWdH0L?= =?us-ascii?Q?YXNLOWwrLXyYJo/9ozSNMKoXEggieiMY/btjAMRUHRKr6YvgZfGBbvo2JayO?= =?us-ascii?Q?H8Lza37Rs8webteFccxWBsGcA9KffB+XSsvSbUEDSMasYlG2vBKbCvDzSnVl?= =?us-ascii?Q?HQCm/TVYxzm/sJLSyeJafxmHq9sLBn5UN1feQnNlTS71dyIT1HIqiL8ZvZLL?= =?us-ascii?Q?H4mYffbXN6EXtjVUFyfYx3CFZvORsDLzivMAugETav6kOnJMkjVV3jZj66T8?= =?us-ascii?Q?WLllXKlcumQW9uJn2g6vz86ooe3p6VJxBjIuF+hhST4xqzUWeQeaNY3tTzxf?= =?us-ascii?Q?j6XEAOTwsAEsDoeNlojaTjBkWWGMe+xTJ5t1Vl7O5obcVaz0yWQT+b/mMQD4?= =?us-ascii?Q?43rHiRnah2zurA/Dxa1s6UajEAaQqjSrFegR0v4zTPt82GhuZUtHsput9eQ1?= =?us-ascii?Q?5fCvmO7YEFFjzC0l6U1vAQO9bjUXr+74pxo8O8yjKT+OKlxFIixhxp+p9NNX?= =?us-ascii?Q?L14h3g02uVb75rZUGRe+0QuBgIpdDXrChrU+0eSwa8x/EkGGTWIVlWnjGKbd?= =?us-ascii?Q?E9YnI9KFIyz1sz03SmCer+9NxqKeaz53+RxeSCmLxzHXqIOGF2k2tICPQwMU?= =?us-ascii?Q?OHXq0zZrygHnW4I0q+fNpL/XN+m2UWVpc/S/5CJpeLVu+5+jo9YOA1nxBaiU?= =?us-ascii?Q?ybSUTv8vgiuyCgdCrAanK9z2QDc1GwnkDepj+6g0Ystuy7nC0ZdvaPkhDYjE?= =?us-ascii?Q?3kwyk2Iv/2iZk2B2ca2Scwb1nX6HCHk=3D?= X-Exchange-RoutingPolicyChecked: RwvQuOpaeAMyH96MylVnouSig/fWagsDEZUZE/NGAHhP+WUWCdza5Sh1GTPP4CgYXOGKryQ9FqyAg8Qjw+AqF8B+RJ0C0SbNPyUc+mtceXuGwyMHYujjQEWNa15U3N7YXV1nZarMv7RINomPWulJGWxsSkXhXInAtnr+/yb/1dACWLhDqx/RlzNZwgrXQysNDYShOKtnA0LlUs1PHxo+zE1KnAzLXC4Tgv3wK8PGUrP07mdJFkTX8VaVFWUi47Tzntr+DGTeRrLoootJSE6akzzrkMsyhwWNQM8+TY2d0TN6TY9dYA4FyeEPK2BYPuzYPaE4J6YS+Ry1a2Kvv0YZMA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0pTEqDu1rlhIXARwW3jTiFWpfFWbgcaxQSr4WnzW52ERwvmCskAqa8b5ZDbVfVbJNEq4553GSyhjcpJy5+g5BfALPbGq5eJrg5ubW1Px5BqHoM4pqA7wotnDwUYJDpX0fz1mXDRyXaYzBRS3rTfArgNB5eOlt9nu/gu4kqPMVLNN36XfgXxGTgJgejb+VZROxqjAww44qASeIo4PMXbN67gH5EyJMBIHo+Dy0TgYcvMxQRtglnhgr/nH52bSc23MHLlx+f5YvrmSTsZ/3+mvjtmVXxPbofNSnUhKsbzkgQmm16rHMRtAbtL7t4iyxDZLFN7IE+dhHOVBJ7xLWjAQGX+SKTvy6bLp2GIUOAxA05iXQEl06jcZYE6N244qgjNYsbPJtYsaJMwecj1kptoB4iw8RxbxQixoBOwb7B1KpDrOfY0dseX5GYhkyh0PrxWXRsxteeeh1ybBhzJQs9DWxa4ylRn2z5nVAZ4nTalH+GQDQx5gv+suRrbWYRDK1FFbr2u73FGT32TjQqlWHx0haaAOBqvERr5OFhInd5ZSCg3oWvcTk+eTyqJqFcXJNwtCAuQ0gjtk9fJMNz0Izp6BN/A7ule7e6CQgwzikng/z4s= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d01b19b7-da5c-4ad5-6242-08dee89dfc61 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:17.7768 (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: EdqJrKMct9M1wkPO9JjyDkAaSPc/Tps0EKcR/eoMeOaoxGy9JU6oTT18b1eGf6NUYMHXhw8kQtmDSbZ2EWpIXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-ORIG-GUID: 1D8Kmmg4FiVj7qukiptvL-3tlbewHGWq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX9PQT15ry54Ha hhgjS7ejNvZ9j3icRGJUzzSZ3W9EmdXB973VRT3Z4UxzwlT39mcx3PutFuwjPAyg0uDW793m2kk KPUZoMbXHqpC3+ForeMeBd8DpPKgPdJhR69oB3re4kiQbFqt1SqFAqDr/EaK3g3TWnu6DHZfirH avZSFcuw5nSD/U+zSlcZAmKIu6wha6y6kQwTXVmSWUXklH8QK6NBhKubqpAEXtCgtSq4Xl7RWgr L2IJeaq9kkbiWYQCR0oof22r0McJlTo/5ysV0S+io8NCAan/ypGksOeaNwYU2JFEA1T1VWkLIJ/ R4efmPiv4CX9RFWay8UXRcS1L3/4hNfVkQ8j/4Y2WrqRXwKs+vkJyQ8fSMDHLzjSnyRUq2nlfoQ 60PHoiQgoNNueS+vYd5mN7Pv62x/gP1bSbMBpzPfVTkTTn3uY+AClogvmrVW7m3wtBp0M5VD3GI VS90XFsl0tnpfm+pqBw== X-Authority-Analysis: v=2.4 cv=auyCzyZV c=1 sm=1 tr=0 ts=6a61e0d1 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=KFrTxiSEMK9J-XJLMaMA:9 X-Proofpoint-GUID: 1D8Kmmg4FiVj7qukiptvL-3tlbewHGWq X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXxqQJW9QM8w7W w05tViB4xBEJ9G03IHshsnhcLV+MNa1nsLjEznhoyjmM/B6ZylIDycLVIof6QlYuLa89WgindCe 0L8hyctbftSAcysIKTie/zILgbmqZZpSKJIWst2OoU2+QTQs/4IN Content-Type: text/plain; charset="utf-8" From: John Garry Failover occurs when the scsi_cmnd has failed and it is discovered that the target scsi_device has transport down. For a scsi command which suffers failover, requeue the master bio of each bio attached to its request. A bio which for which failover occurs is handled in scsi_mpath_clone_end_io(). Failover is detected for blk_path_error() occuring, same as how dm-mpath detects this. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index b896d28a7dd9a..a482b6ede21aa 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -248,11 +248,53 @@ void scsi_mpath_dev_clear_path(struct scsi_mpath_devi= ce *scsi_mpath_dev) mpath_synchronize(mpath_head); } =20 +static inline void bio_list_add_clone(struct bio_list *bl, + struct bio *clone) +{ + struct bio *master_bio =3D clone->bi_private; + + if (bl->tail) + bl->tail->bi_next =3D master_bio; + else + bl->head =3D master_bio; + bl->tail =3D master_bio; + bio_put(clone); +} + static void scsi_mpath_clone_end_io(struct bio *clone) { struct bio *master_bio =3D clone->bi_private; =20 master_bio->bi_status =3D clone->bi_status; + + if (clone->bi_status && blk_path_error(clone->bi_status)) { + struct block_device *bi_bdev =3D clone->bi_bdev; + struct request_queue *q =3D bi_bdev->bd_queue; + struct scsi_device *sdev =3D scsi_device_from_queue(q); + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + struct mpath_head *mpath_head; + unsigned long flags; + + if (!sdev) { + master_bio->bi_status =3D clone->bi_status; + goto end_bio; + } + + scsi_mpath_dev =3D sdev->scsi_mpath_dev; + mpath_device =3D &scsi_mpath_dev->mpath_device; + mpath_head =3D mpath_device->mpath_head; + + spin_lock_irqsave(&mpath_head->requeue_lock, flags); + bio_list_add_clone(&mpath_head->requeue_list, clone); + spin_unlock_irqrestore(&mpath_head->requeue_lock, flags); + + mpath_schedule_requeue_work(mpath_head); + scsi_device_put(sdev); + return; + } + +end_bio: bio_put(clone); bio_endio(master_bio); } --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 C03EC3F0AAD; Thu, 23 Jul 2026 09:38:20 +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=1784799503; cv=fail; b=RkmUF311e1/QW2jJfvGgwkYWg1OonDPl5IUjkEDA1HaVzTgu9wuch/nBWJwvsuwU0iM7mhLjJCbjvgOqNVIKbQ1KyX/O/lmeWhlZxp4ENPxT3OPlHZhqip6fxJ860G8wLAI+ZESfZ7Ghzs20zzvccI2b9Cv7imGsE46EvU6jR30= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799503; c=relaxed/simple; bh=3qM8fOiTBgIb82uchiECGOzIzu33CHhGTbycdaZtrqw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YH/dkdrLEvS89QP5VNQT6rGb869Q4Kk94ADpmNzaEEgJnRzPaiAbBrRYVa8fJFpve6odog4ghZpxlsxX5kRypBWuRChEmW6iZKk45Rmda/0sptaqTCatcoEqI1rPxPA3ejVZiCqmywx3pwt8NzGhQMV508W2uZfHtWuuZctOgsE= 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=DOgYwf9s; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=n+Gxwdd1; 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="DOgYwf9s"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="n+Gxwdd1" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtdNq3495335; Thu, 23 Jul 2026 09:37:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=YTgQpiCs8fuc2kcWwrSWMngGWlWH1elOLKMNWk0QJB4=; b= DOgYwf9sT9+IIzVwrtfS3BaylCWCUMfdQ2x/xxHyllp463t85gLmaDYue8gvkt+S QL97PRC8Cfxp/F0eA+vJD846+Z4btZMMvVk/lqnsG96ouypbSAmhANxd7TWkoYr2 JkwYY+u4IPh3NzZx99aHIuNbpGRpv3UskB/bCDtbzVGZxbKddrZAwsye/kxQs7sy P0XRK3akm3L10N7j5qRsEudav0OBT/f1mZ0WyTJDys+QTH/weBy1+DH15CQZ3eF1 sKGU119xbvob8gCcpYDEAubnRqGuCpOkrWpAUMxSpDXPCL0BJi8x4SFS8ZSDLIIs Mfftr6sFdOe1THdeZnSYSg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1kpxn2s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:28 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9QG021137; Thu, 23 Jul 2026 09:37:26 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010049.outbound.protection.outlook.com [52.101.193.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4cn-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:26 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gt19xVETsvlU2l9CPb0rmh+iTiuDUzO6HWVHMgsL24janYU9Hu2zruJzq3tfhcEOXmLB/R/N85PADilLEVjCsCZeHzrkwGX8yDS6d+8jrtJepzXSEATK+VkHFq5nzBkErVao/2Rwx3Z9wrl2kaM8LdCb8ey/zvLmaCsp9gcQzPOUCRyKntJHAZOs1rD9M54tQR0XizorfILeWGqM4GPSfa7HYqj2/+gUhLpeKyBZoPIBkEXM/j0gNfW+dcKI+PAPXoI+NY2YnGVImcl51MaiSqTmuydBUEx68knRKgzKxOSAY9/Os8x6wF3PthlMDGAdOHRMRTBb85sQOK7POTY7oQ== 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=YTgQpiCs8fuc2kcWwrSWMngGWlWH1elOLKMNWk0QJB4=; b=gttfEvUOAGzMQVlsE34H1Rapl0XlwxMukuIUe5gl4/7QsAgWsBGCWkFwfbOJ3BfmzYo/dhxxf4vs7h3w2dFQJBevpAzFQGf4kuMyU12sstn1y2bFvAiyqFLzXeF6pgF7tqytTk00wceZEkS9GABcL/SXGEWfvEikA517CQiPAOCq0MCt9rE05flXE0+CdQFej1LqbTNHSy6J6VzI8vaS4CNt1zS9AAX47sXuf+dOgdda1GtNNjMF+18laypIQ2kELFKyaNFqm0H5McKHMZrOYDGKYoP/Ov5Mf0vNO/JZcGM7ODpb2PY78EFQy+a7WvCVwFdrO7qEoWpUIGpNJA3e9Q== 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=YTgQpiCs8fuc2kcWwrSWMngGWlWH1elOLKMNWk0QJB4=; b=n+Gxwdd1JulrThGzOs/vloNkIGK9Dhfcr0ELc/MMXu1rCqheJ+y+PCUHkpsrQhUQlKsR7l+btj2Uchj4CkZrwbDUzbYzA/Bg11HJPz0EUAW2vopH+wRgMvBc/y+Nl41pe+uF/Pe7zTBaOEQOe8Zi8j8/hK9teLSUEWeyjWFRIsQ= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:19 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:19 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 20/28] scsi-multipath: provide callbacks for path state Date: Thu, 23 Jul 2026 09:36:18 +0000 Message-ID: <20260723093627.2327456-21-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR14CA0010.namprd14.prod.outlook.com (2603:10b6:610:60::20) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 8c67e90c-bf31-41db-7d31-08dee89dfd57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: SqibVUemVjFkq4p8X2Ya/3N2ZjLVB/JV168ygzFll7aYup0EnRw/7WCmOQOeFWdRPMG+T0ByQTU4FvDd2XO0f63szxNnZsiuDqCg+OS77xBBlJ4rYYodYAcXkQyLPszEU2u2H/R/A3xZHBr1djVakPRil4pwNjAl+m6MqKHv8cSCdFE68wYDPMx0Btxt8eIa2QBxcxPWbip82erLSRfUPaXERg6I8SLD6uNWjTsFBKOfuxuiDaBm4/bih7hCSgcslDEUC9LtoECcB+SWb1Kd89DBI8/9P4GZ9utHH+Mi7DWmcsLcOKTF7CdpRXzyZSgZDDNhrVneoPvQt7KOzyLlprJuUF3yz0jtNndHnvTLCb3TT6/m4ubEAadYD4PMK0lNRSWDb3ii4qQPhTNyLHR59ydfs4DWDqiBUoOxY3Q0O2+2Nyolg0fG9irjXScX59w8+mxAC1REWO6Ht2pDcSPyNYLJdMYRGcDhgE18tRV2t6/hcdXiIt15AzFnrd8tvfCwD+SJqi/oBL1w3xxqc5cmsh6xr+pn5CG5EjY0mg0W6l4svHnUB290nHfYht3Yv8xjMes4DYDb04WNt+HAWjCTM7ZEhLeB/bEid8dWT+3D3rARNWsCrIQ9CRgTY6U64qa1gOCBiF834SUQsO6VGObp9ujacildEsox26iGpS0xLGY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XvvpC+IvKJNfOg5kEj16CnUJ1PaCSAIINbUXpCpRODXat8CC6FayyLOdnSjo?= =?us-ascii?Q?4uOcluB4XgC0BnHZeubz9thBwRJmLrNBurXHrRT8va+Ml+LF4RuQy7/+KbDq?= =?us-ascii?Q?05Ty9FpXNwG9Eb0P3PH6/bcJrGV7vukg7doWwAfA+5nS1E6zd3P0Agds8ygc?= =?us-ascii?Q?5fvcUlyiY6BQ6R8oYZqVVdTNsZjTUwqFYQ/AcAHKPwBLcTUEH+/E0jDWZaTU?= =?us-ascii?Q?H1tRg9sVZE8dasDSnGjcp5IAh65J6ctr45fbXvV0uCAwzWompbFnKbW44EXo?= =?us-ascii?Q?aejnM/lmW550yDG14RVPWhEiybqq+CErZVCdrJNF4ryoMH62jcj+g5kLrsLf?= =?us-ascii?Q?mVU4EVKoeojuQJ/U/5qksc9et+OjTCnoNijfkztsC0PUYCoCbViVut6dBk3a?= =?us-ascii?Q?x/PK2bfWRQOwxWSFiGSavhBrziMyCOuPLvuxFjMJ11zOOpl48h1EiFtNjCW8?= =?us-ascii?Q?fp1Y/EwSaGxsEO44WGHcLRY/vjiKnnpOtXeTVAN4tIsq4AUkydICOz2KQMwW?= =?us-ascii?Q?PjXMPm+fYKgZp4SmnMjIcZWk7geo6bQ2m7/CslNmPLJMjBUCmzJ/i9gBWc/4?= =?us-ascii?Q?1wQm7lNtztfa7vXX9vb8m6+JLWutQ/MAk4L7ALADD9EIMyYbzFv72MjMVLht?= =?us-ascii?Q?v4kY9kq4aqTh/1VU+z7cfWzFDM4iKkY7Q5BqxQieBApk2BhD/dqUsLfMQNN6?= =?us-ascii?Q?Igy87bAR7p2QdACuSqJhD9GsJZnKzTr4m7qIB41jLAFmCNfqY2/wjtMsldCe?= =?us-ascii?Q?YOiyiLarXMG+k/nd/rAOv+GHeTRhxeYkky3zeK5RLMfxFuSyWmWF2e9roW22?= =?us-ascii?Q?sATJ/we61f6yD6Xe7YnXgObWMQtXg/1dDlFSBZpGaNSa/cJygZ2wu3S1XAVv?= =?us-ascii?Q?snc75kbfxXreALiDkuqZEmBtMAQ24sNCre/KlJTng5NAUC7jMBLDMY7UDfRr?= =?us-ascii?Q?ic5aYo2gR/ZX7jdXw3AROSkiuOeUGXFBrFS/Ys7YYPwMMk687rwbwDD5TB0O?= =?us-ascii?Q?eL9B89/4n/xBGGXhPnXLM8kFEqNbY/nBn9BGxvqUX3lGrXXqfrJ6k59dVQOI?= =?us-ascii?Q?NTcpDEbU7RegiG5OhkttvdXRLYoLnKwYOOxhMpwObym44Amo5KIM0RXZZ3Q3?= =?us-ascii?Q?AWF5/CuyLZMpCAplKDbzck/YZaJgjq+DCT5Bckx+NFf8Wl3JkhFMJ0hPZx/s?= =?us-ascii?Q?9q7B46MQpvsgLLJzgD/HvM2U1/hpf0FeR3UvpPPzDW5OgUmzNzouJ2LxINpD?= =?us-ascii?Q?QP/al1B/fvAS01EJ+9kdBc3kYvp4BZMNpJmXADgm+lF4Z2O9ZbkwCCx1NbEQ?= =?us-ascii?Q?7cgFrH42eGrGwASduMU7TIdxaUCV82nzg3aWFamW8xLQwWKrfVXyz5iBUaNP?= =?us-ascii?Q?o317iVIlfY+5lJ4csZUcaARoZLGynmN951WLSIMiEUFsXhLdOx3quNXk79UD?= =?us-ascii?Q?4l35t3Ff1QR7uKl3QA3lOAOi8iuSuBNne6UbSy9KoDSoPDYCnBqSlOVx3dBh?= =?us-ascii?Q?TPi9dOq2qbiUcREn5O/E5b+hWObuZdF1Nnyilo44hcNl07wo2zkd8XsGFi/y?= =?us-ascii?Q?voiHs8XNY7IuPwQThraJAlDUyVfvwFUTyJfy8JnzgtUyEJj6WAKCcGCuLp2F?= =?us-ascii?Q?aBtIjthUjQ6Xzir+pGMibBcbBnv8MQsEW7h2iVovwpFTr7x8T0SAuCWkK8V8?= =?us-ascii?Q?JlCBpsX9be9hRwhF1xmK69QPsKbrhd+btC0lDEeOTlXHGc13d62/7t8szh5/?= =?us-ascii?Q?qY6ZJuINKvAVVIvsi1pJTCxhevOwZw0=3D?= X-Exchange-RoutingPolicyChecked: YvIUQlyr674nrjNzeR0LXpgiyR4ziWxuZzQwvz/Ci4EA+Hz9Twba7KvJTB4FiPG8h92tD8PHxr4Aq+tLT9Q2AJWyzWFwEQYnvtDPLvsNLwFUaEQ2QmiqutIn2kYl8jWh5q4ti9p60AcOh+O9uG4drPiC7JSiy63a2p5FO8r2AoqNvDhMACFNbWod8tGbUNm7bNQAXJ79qOu3MMrxQVebtF4sOBUXwtqBRvKIo8uUbTCHWzWBCtZTxsYG4vu5A37fFcsY2yMAYX4Bz0ilDZJBBsI+aeNMJMe+beheRGDIUyMgLvQmrLGKhOFOEhLNl6bC3T6rtaNswwYaPSK9v2/Asg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: W4H/Qb8QwSdzFLUdk051eb8dD1taU3F20ucCyWiOCJZWtIkg1zb7igBhxVv0Dd1IduKYhPJPuW04+LozhfsKug6hZfc6HcnyL/ydXWowQDdD4Cuws7RNeWrfRdBpkZxWOMeBEKw+0Zaz1ozuqZffNLJYHAFGoXleWhg1b3KlZPNmN0RIHnPDs56zunXd1c95u3X4P1o3Utipk8tvNXUYQxrvjqU+nTLe0sGx1cn4cIoOiu9XZca2npayXbwtB77GbBDa0kBGBvRkZRmINmFnWv4JfljiyXKe0LMYWK9B+3MNRJ6odtpb00iGS1JkZnqewa0tlDmSZaZbGn0kaG+bGIomUvs+44yfRC2O/LnuYDUc5WqiPkg6NVVcKpnng4H8WgYXwHYu06GgJC/+9VUsX57ysz/QdUwgFgmuuY5XOOa12WY4S5FixZUAsVOELN2Y7UL2ToSa5BVYQQptWkp+whjsjZTkmTi7GA1+9NJAkwpodc/Ww0kpDE2M2pq0GT3ltrFfNVJDYpREYLHOC/skg134a7F70sUzXqOS3kgoW/CG5NWjJPeWpsSERUTjivb2aJffbCPDnJ7OAdPt5r1IlN6qfU7wDbJDuJqZyc81NoI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8c67e90c-bf31-41db-7d31-08dee89dfd57 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:19.3281 (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: SHsJLPQhTA1uuqnCguBINkFyeI9NNAtf1pDXZzXOzG1OP+Ta2X2QUC0d0JqrfzTPo65hILTgFkbGIx2uOKomGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX2ZklHHbkh0SH sqNoseKT7ZJLUVyZK9Gp+KVNkxboPVt3dGYkcj+CrgcvN2E79H0JUpGoAwxD0rFlSRm1ORELqkE UJPY6QwSLig9S3opkah9cIDeDODlyg1a1FvpPyyNJY/ejLpvuo1o X-Authority-Analysis: v=2.4 cv=IKYyzAvG c=1 sm=1 tr=0 ts=6a61e0d9 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=DHJJM_rHgSnfI6yttmIA:9 X-Proofpoint-ORIG-GUID: PsFrA5JAIda9NSPZQsLxWhLKb7jUoofj X-Proofpoint-GUID: PsFrA5JAIda9NSPZQsLxWhLKb7jUoofj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX9rdkyQiu9S86 0dC10KUS3rZAfkP2i4EZ14qJ/IyjAcST7SubshcCibeSzzs40IErE2lIzcoXKgHjoOwbYvu6eL2 OKK+uDeMr537uUXenTkymIMAAgcJEKQcNxah2QMr2nIVepHyAY5enffyb0D0lD5CXyx3WLPHPSf E+9f3LQIgRdhyuAbSKs/MECMzLtj55gso4O+I3tt+vsGjf3tWEjSFSSKMEA2s/o8ihclXwqockP J+bAzxL7HMKHAgMJJJX5j2b6EvhEByvxSYVQi6CcLIDymyMrlbnaQGZ7n1QUbNF/lCB8ewqsM7Q vc6DLu9DcHKpFavdec3uOiuHwMBM+LNt9NqzTKpX9a+ILqvyXAERmvlgYsEQAwvi9O7orePrIS7 3B4+YnxV5McHIIqjKWcYl59gbRh+GE62Qj+H7X5umin626tsXuvRcvXzHanegqxa9ZvYshSioxC 7vviVGyvU5hFHLS7OpA== Content-Type: text/plain; charset="utf-8" Provide callbacks for .is_disabled, .is_optimized, and .available_path. These all use scsi_device.sdev_state and scsi_device.access_state. Member scsi_device.access_state will be driven by ALUA. Currently only device handlers support this, and in future we will have core SCSI support for implicit ALUA (not relying on device handlers). Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index a482b6ede21aa..e566d47199fcc 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -316,7 +316,56 @@ static struct bio *scsi_mpath_clone_bio(struct bio *bi= o) return clone; } =20 +static bool scsi_mpath_is_disabled(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + unsigned char access_state =3D READ_ONCE(sdev->access_state) & + SCSI_ACCESS_STATE_MASK; + + if (sdev->sdev_state !=3D SDEV_RUNNING) + return true; + + if (access_state =3D=3D SCSI_ACCESS_STATE_OPTIMAL || + access_state =3D=3D SCSI_ACCESS_STATE_ACTIVE) + return false; + + return true; +} + +static bool scsi_mpath_is_optimized(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + unsigned char access_state =3D READ_ONCE(sdev->access_state) & + SCSI_ACCESS_STATE_MASK; + + if (sdev->sdev_state !=3D SDEV_RUNNING) + return false; + + return access_state =3D=3D SCSI_ACCESS_STATE_OPTIMAL; +} + +static bool scsi_mpath_available_path(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + enum scsi_device_state sdev_state =3D sdev->sdev_state; + + if (sdev_state =3D=3D SDEV_RUNNING || sdev_state =3D=3D SDEV_QUIESCE || + sdev_state =3D=3D SDEV_BLOCK || sdev_state =3D=3D SDEV_CREATED_BLOCK) + return true; + + return false; +} + static struct mpath_head_template smpdt =3D { + .is_disabled =3D scsi_mpath_is_disabled, + .is_optimized =3D scsi_mpath_is_optimized, + .available_path =3D scsi_mpath_available_path, .clone_bio =3D scsi_mpath_clone_bio, }; =20 --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 8059342FCCC; Thu, 23 Jul 2026 09:38:31 +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=1784799514; cv=fail; b=RUQtp99Vw3YJEKYbPSQ2WaVi9qM+ukCE6YOkZsu3P7oij4q9WFxVr9oHgPcV+oIA8NJdkxUgrORogKTNA4KNdiL9N3s3VolM9GuqTsA+9fHwgDE5Y/Ir6JacgKWvBbQEi1Dw1oQl/JiGQ+YmI3qgnfYPV3wjCUk9j4sj+A+PUmQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799514; c=relaxed/simple; bh=YreAfZWBIhXNtYVgMfzYt4DlIbRLzToK5ILZ/svU/kk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=P2ae+pz7yBWe2E68EWQD5SAoEbCjo/CGMAP3DrAdgSFN3Tarp9cD47VWqjdeaKluaKX0Ts2ICcd9z7x1Qy722wUOoCvJS3xxp61BXtK4topDFkdwuIrxEfuAwfvhGUqEOSkzVzAhrQK30QB1kzAwu1/qwHd6uf94UQMoC8MjfP8= 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=ahI4Q4IV; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=qSZA9YW+; 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="ahI4Q4IV"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="qSZA9YW+" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N3rdkO106353; Thu, 23 Jul 2026 09:37:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=KmCdhpM2klN2F/bt2AxoxrfCmccQc1YM+09GDxueI3A=; b= ahI4Q4IV6eNtlN8YqEKgiNjv60AXR7s2wkjkf5XxqgFgJEt9/eelsBxj/wiM1Vnx Atp1+EMqqgJj4mcrQnkGFd4afCVh6ThrY1UtexXf5m9gsdIR3BdSGHmCGJsDe2oI H4N50ngaJP8mPVe5X/xSP/wxFoDFAOHtsbEpg0RAkEbI6OY+a9KE/GM6ao2JHA3t bAFclEEOKr1ZcdFOjHrBLNSR+cqVEAyT9D0/wpz7AEQx/adARlndrN4aNCRY4OhE Y9CrvPtIlctC2aizk3+e9siGSgakta9VzjBPuROKXGh6w2bvyKNNPTkJXnn78Fjt yUOJTJANDke0CMlC758cfg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1kpxn2r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:27 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9QE021137; Thu, 23 Jul 2026 09:37:26 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010049.outbound.protection.outlook.com [52.101.193.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4cn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:26 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PYO8dyObi8UDDX1HE7lkbe3eyaK02Tj1lZMeB/mTgkfamCzW7hyJ2RKwj7FLIb7vFRVRz8XD8NWtohe40qQ9J8eisqNC+9/M3uDjEr2gsMrcQmrpsS7y1CCyqI+ZtRXIIP92CO9I2BXbhtrIrm8q5TV7FMBM/qXxDVSzV+mpQq6EyE5MmXac04wvlZKhFR4HNIQg8M7ofgdwT2ib2WwMs6h4TjsVpkRaEjp2bzCqHMp7t+TYV/q1xeF+kSdgGncTtg72YgTJkb2NM423Q8RFFirbU3oC7LgWJtwPpNOYhDNZ27JQKoc2Bq4pZt63edWm87iZONC3BEXKekaBkuWAdQ== 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=KmCdhpM2klN2F/bt2AxoxrfCmccQc1YM+09GDxueI3A=; b=ZwLsnEhFVCJErljLWvHL1rlQJKCYYfRAd4OFkU/TyBBLpieUO/Xf4kC+4LMeC3PQEsK4C3bBwVIKLC1+ij/gRKtv4xKPc7y6q0p8s4qqmsuykzezf9qvU4zrbgSbsg+dA/JWO2qAHJQjjfDzBkmzCuxvcgylJz6kxbmcMO8qvl0yOlhdd5bLpqI4x0lCtl7+EBekZComzopvNFqoiQIaAueUZsf3gzyTzm4jggcMC7fgyD2Wes9OVam1xTuWJzYPLhsUYmxyJHItT8L6wboDs+36jpw+ib/oMLZCJaJMNhr7b3OyUVzt8mBIRrhlzfdOyMMhJHZxxlzKF3o1NkLM2Q== 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=KmCdhpM2klN2F/bt2AxoxrfCmccQc1YM+09GDxueI3A=; b=qSZA9YW+T1UwIpEpGi5ArnTZsH3ul4VBWjq2/GXpFfoXtMQghnRg6QnpjExeJqF9IweZz4EWjEtKAHo10lfmTyJTdLzM251fJDAQa8BK6CIcnJL6Fl8ebYWG2ZDgeyitEbTiyKk6B9Q1UsdHbO5AOrgSyNZtH2GYaQlwBq9FCMA= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:21 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:21 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 21/28] scsi-multipath: add scsi_mpath_{start,end}_request() Date: Thu, 23 Jul 2026 09:36:19 +0000 Message-ID: <20260723093627.2327456-22-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0003.namprd03.prod.outlook.com (2603:10b6:610:b0::8) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: a361a9da-c274-44af-325d-08dee89dfe52 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10063799003|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: /OwixzpzjW1xILf3EJm1cfhg/yPgvG0NA/5RYrP/bufiOmUn49seXeqaLK14tglsUiH8C3JGCraW35MpoNTTrqhzhhYLDzcsPFFtSbTXhicq+bJb897CZoJlEnn0XV5Duv6h7LG3LkRqhplaCi3jP54pIrH9wr5ADXO5q5uRblGBAtOrewSrgrExt2A8WzHyaTqMYoDi37aNMVLBhL6ohDvcuOo0bLzI3A+4tJLPqQ3J5M5CSSMexq7PfeKEE0yX+4u4fZxA3Lb/M3uUHOobqVzZwTX7uFN868cL3CyDtXLcy30gHbhnKnO04Ny4mBRgYgkX0SbaDhK9XKJeXHfaY6XWYPgrS9lffTwlcxJAFxrlcL9BkFKlb7XOMINio4Fvc4L4e/5zJLpwYYxBtElq8/nKwqZaCvlimtOeUYFnnEK6K6u0AjjE14oKs6oXOz/IuejxVU4UbIukIFWfDldZAUWaHUKrhPR7L4grnKX4CIDUnyhrT1SN3nh/YuqusBC1oFb78AGBc1cugpLp8eVdqjQsecHCEVmo/5sD7dIyzr5Tsxo1Mvm+8ONhtgy7BVlp0WDNn72mQS//yUFNKU0UdZe0ClF8KZVuIfD0WGwNqDgUOxGBUjNAccmTBYPYY+cjINY95+reTN4HQj4JjsgIfg+jlRCKX9GUaGtw6P8kAGY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10063799003)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TD79O9suYCX1UN1I0bMfAoulK+FOrz3P8374cKxO7jcRla60fc5xIlM4SoS5?= =?us-ascii?Q?4kpxtUO+VuSI5xrJRp+Wl97bzPipB++XdFxAg16fCkjOE499obKln9Ij2MxG?= =?us-ascii?Q?+zW84GSZLE16cX6odyyVNb7jXwzu9IxDK43MwtyQheQh92hHDo22Ysr9xvCp?= =?us-ascii?Q?m8966XGyJzB4Jyrkg5Svpwy0EEzMIFNyemfv8YkiLg5XAUmAv7/vBxCb0mzQ?= =?us-ascii?Q?bbIlSUI/yUmU94twVKKVBObbjamflzBo6Qa2SjJXe2GYC2/YDa3Gfls53Al+?= =?us-ascii?Q?eJtz8g9pi1cPfc+IlVBg2U6++HYNZUdm4kGOuHwuAhGMI9y9IROZV80AuEmW?= =?us-ascii?Q?nuB6LIWsNoH7PxiG/NDt/kNpwAdBDUIiJO3unJdX889+STP5vUZ0f5r7krkT?= =?us-ascii?Q?/DCgE7KLdV833MwnB0W5Efg97/kjhB4Ae+ONRqudyPoLb96IjqDmTdWttCez?= =?us-ascii?Q?dCtR73wrir0M+pFnWQHwezmyPDWlmH/ulBp6HEDpCHJDlnra33sVkX/zGH0c?= =?us-ascii?Q?UmaZ2RfhqM9X2ltoYUl50fw2NI3h0iS/mlLY47LKXeePpgIFCPGLJOeYxzVD?= =?us-ascii?Q?W+vdmGFiQfiBHoz2ZOaoMP3KPKQ0nhCeEpLYjMo8NvQY+FymuYk46PQct4b7?= =?us-ascii?Q?6p3PK4u5SbSBJlRxF9AWXTmWLARp01O9p3soJNWpqeFgNO1rBRanx1SSBl0L?= =?us-ascii?Q?d9SWi88CUwDg5pbhOrvbEGFBuQ+zRecO6A6ZXlgtM+cocuN5k4D75JK8wJwm?= =?us-ascii?Q?0VC61ra7ZqaRXPplvG3BxZ/I6qgjGsAZPrRCTTQgNz+z9bIAmdO0CT0RPUXd?= =?us-ascii?Q?ggln8McThMcTiY2wFK/zDZpOpApoEg52ryt9A72ynek0NIjVYhALs1VSD4an?= =?us-ascii?Q?qz9RR4g8r64ceX1QUMQt9v8yehv/j7kdUt+ZNbTfjZ+ISag1D1VKq6f4Y+T3?= =?us-ascii?Q?o52WPo+rGMZgwBsgt64bzUb8W5GIP1bEOWdUFQz9g2ue9sV2BsNxPrxWWe3J?= =?us-ascii?Q?qUyKz/ktG4SEV6kOLc5BxKg+u8BWDk4u1bwhkvU6gSorYIYr5U90avAWOcv6?= =?us-ascii?Q?81BnjrxcX627YQ3LcWFNk2DEsD/IEsHcQv3g9p5ZWJ60RIcY4yeg1awFHp2K?= =?us-ascii?Q?ymKaW8BQNHFnCcRbaOu8cxs+owT5cx4o0YbXec1o3cKLOhnMC06RGo3oHE3W?= =?us-ascii?Q?9gVBxxfQqso2tXlnz1+5eCXqkWkh05vZ1A5rUnwVUdmjyGbMeJv3NFZHqmUg?= =?us-ascii?Q?HhBN4TPS0nrhHcXpzCtUSOgD1ERIeGBFRhjf5y8cDV515jjWTw2ys7EINgY7?= =?us-ascii?Q?SHqj9hwfHvd78leH20tD+LlQbMOXH1W2BmUb8cU/k+AXmMctiY2FOm4/Djht?= =?us-ascii?Q?P0Hxz1vMtZCJzn1C41AWtDY7j/31YiA4rX/6XvoViG/0+QFvoEjm6kI9Tyql?= =?us-ascii?Q?W7wjMUZAY5Cf6t7p46Hwujdko2tciRCfxRQryoivudWyplfSp/oupHyx9hmh?= =?us-ascii?Q?dH4r4ISk8yo3KIWwB0AYVZZ2ePdt80LuT9sLej+BG8ezQX3fW02nAg7i4xzR?= =?us-ascii?Q?X9G9TElpXyAU36IJtR461iAtMFH3jL7+a9A2GyhTbS1nP08wGhrefwvorRaU?= =?us-ascii?Q?GiXyAOEwwyjeT8nWGROoq1J4DLHzJRZLVe/MRU/GPR+ryClGCYKmsEPL2+bp?= =?us-ascii?Q?JOkKuDhji8f5uHgqGpw6fV8yzgPObr12lTxWH0K85pOydZPBDgPPJX2gQWle?= =?us-ascii?Q?cR5lhEhYuAN2uOQFetJDnkL+ZIUJ79k=3D?= X-Exchange-RoutingPolicyChecked: bZYCsIEkv06LulmB4gbIgTTWQP8y+EsDhRGhfMljKc/wpAcAaMAakCUKxen/3hHPImRCUZ5nV6xDRt80qgPV3nYHvlpu2P5DjaXIgiNcWD9C3GwAUzGaJNTH81YlvwBeweYJ/pQ35zMi1NrRl8uIswpPHFT1xRXNKbGYeai5slpnas8jDz/jcLpjzR6SAr4olv58eKNGVlzjiKqLspxertjgI7Xk4ZQWRnDb8jKlowu/Ua+vHIUSGzWSvM5o0LOLuwL9voXua5RULkL5uRUSeayORmE//PznU19TDSoL+i9q4cGKH5K9b3PjiWwbCSbRTqet5HcmBLA3VxITp3xsPw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SmN5loLveHofMaB70tSPTzBw/X0pa6i1bh9fT37zbrTv08FPr94qySER8jxVlAu9juQWEOxHW/V2yJpA6BDD/DSYbs0oYbqHgsCBy4suQdNrk0tMr046WI/jMCgx1lQthoXvXRE4M4m6Sk2rC8Nd1wSis9Rsa1AyNrBcMMdcpos3Zeo5gIqFQG0QJ7bC0eK273JYwua8z3cmvWu/VYaI+CQbxv4apOYufCBVg9DI5ZaFpwVMtbWzRDCmoLPs6ehhemmalYEq3nI4rrCAWP4KJYv7e9DCcj/G3j1WyACDBKfBfzVRxSx+Ltliuq0ps5+Yxc+imrcSYanG5Mgon/SARee8mV3PWXM7lPsJsqXyahfsKHpoNx4BPSCLgSv6waojzs4lNQ54k37hp9jK/Skn7CBhWRZLK1ktXy/ex2idsvK+SMvmq8PgrYG7tofq7GAoZa4tnmtQvfooUd8CAKPlZB4bsrDRu4S1QC2K7/oQUC+wfjEU4kMiaIVvO62zTGNVJD4UrIi+Y4ZQOVZhMSXdFi7hLtIv6bwu7kWml0GInRTACAvX+OXjzJ3hMpHylCarAXng+SvKrwAvQnEW1iFY5CYjVw+oievkyk9WsS49NXg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a361a9da-c274-44af-325d-08dee89dfe52 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:20.8935 (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: I5gcQ1YX+4diG8nCBTmsV9wY+cgQAW+MJ67kzE00Kmfm4vfAgidqkU5B8sjdAzej9/CiyTIFJB4zw12yhQUuGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX66Lr22sItkpp 6idfmPvTgMOgj/F5HnAOHw5hTsorKw9XQZlTozaKXRAEoCHRCi7IzZo+pNTNcMHN6BHAxjhgc4D u5pJX+OWezQ3IoombrqHbS+38sdzG1ZLLJ11NkQNyuysVZpdT3RA X-Authority-Analysis: v=2.4 cv=IKYyzAvG c=1 sm=1 tr=0 ts=6a61e0d7 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=-3jN5J4PbOmX-KBf5wsA:9 X-Proofpoint-ORIG-GUID: F06COIuoBWr-ZDDL16zkvGOVtR1JAX3P X-Proofpoint-GUID: F06COIuoBWr-ZDDL16zkvGOVtR1JAX3P X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXwH9/9DxAtUDy RCFrljhFyEOqbuRYc7ksoFErwRphv5rUhexS4dpbVzUVcodUnYfXNmpYtM1+/xtbs1QFrH86NXA ZBZ1ygssbiShBX1KNJjVPG4mpvl+DvRtJc4whjIH4BWfPoZPE8EHQO/K8Duwq+4Ia4Q/Wd3ndgj ETup2djjkXSqCUH7A9cK7Q3zQvAy8amLBfLTiXtVuGVw8MIxEAnjoVIbIRXc6J8IF67XXUjLdMV M8XKxDc9fP/uTjoIXWwAALm1nvVWDtu3iAmQy+L8i+F8uyv8XTT2pnEYtkaXvKjGCg00DsAbWKh uTvCfKjn9nFRctZWrfU+pJNCL+Q1cV9Fbe6M8v7fN0MRtDQjs+5FJS+ESLU1w20JfY5Gh4y+P2F U+fTdDgUy21LeNQha0uvuiDHv32hbfhuqLCxS2peh507BKiU7HIqvwXilsxJ/kPl0Bwp40UhOc3 yydteh+zrL4+vFYy/uw== Content-Type: text/plain; charset="utf-8" From: John Garry Add scsi_mpath_{start,end}_request() to handle updating private multipath request data, like nvme_mpath_{start,end}_request(). New member Scsi_Host.mpath_nr_active is added. This is required for queue depth multipath iopolicy. For NVMe, this count is per controller. The reason is that many NSes may be connected to a controller, so congestion should be judged at controller level. SCSI has no definition of a controller, but SCSI host is a comparable concept. Indeed, many SCSI disks may be connected to the same SCSI host, so it makes sense to count number of active requests at this point. However, for a transport like iSCSI Initiator over TCP/IP, we have a separate SCSI host per SCSI device (so there the count would be same at SCSI device level). Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 8 +++++- drivers/scsi/scsi_multipath.c | 53 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_cmnd.h | 6 ++++ include/scsi/scsi_host.h | 4 +++ include/scsi/scsi_multipath.h | 11 ++++++++ 5 files changed, 81 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 1e13aefdb6d64..3dda25a05f78c 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -669,7 +669,10 @@ static bool scsi_end_request(struct request *req, blk_= status_t error, struct scsi_device *sdev =3D cmd->device; struct request_queue *q =3D sdev->request_queue; =20 - if (blk_update_request(req, error, bytes)) + if (is_mpath_request(req)) { + if (scsi_mpath_end_request(req, error, bytes)) + return true; + } else if (blk_update_request(req, error, bytes)) return true; =20 if (q->limits.features & BLK_FEAT_ADD_RANDOM) @@ -1917,6 +1920,9 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ct= x *hctx, memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); cmd->submitter =3D SUBMITTED_BY_BLOCK_LAYER; =20 + if (is_mpath_request(req)) + scsi_mpath_start_request(req); + blk_mq_start_request(req); if (blk_mq_is_reserved_rq(req)) { reason =3D shost->hostt->queue_reserved_command(shost, cmd); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index e566d47199fcc..6c50fdde70d65 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -555,6 +555,59 @@ void scsi_mpath_put_head(struct scsi_mpath_head *scsi_= mpath_head) } EXPORT_SYMBOL_GPL(scsi_mpath_put_head); =20 +void scsi_mpath_start_request(struct request *req) +{ + struct scsi_cmnd *scmd =3D blk_mq_rq_to_pdu(req); + struct scsi_device *sdev =3D scmd->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct bio *clone =3D req->bio; + struct bio *master =3D clone->bi_private; + + if (mpath_qd_iopolicy(&scsi_mpath_head->iopolicy) && + !(scmd->flags & SCMD_MPATH_CNT_ACTIVE)) { + struct Scsi_Host *shost =3D sdev->host; + + atomic_inc(&shost->mpath_nr_active); + scmd->flags |=3D SCMD_MPATH_CNT_ACTIVE; + } + + if (!blk_queue_io_stat(master->bi_bdev->bd_queue) || blk_rq_is_passthroug= h(req) || + (scmd->flags & SCMD_MPATH_IO_STATS)) + return; + + scmd->flags |=3D SCMD_MPATH_IO_STATS; + scmd->start_time =3D bdev_start_io_acct(master->bi_bdev, req_op(req), + jiffies); + scmd->start_bytes =3D blk_rq_bytes(req); +} + +bool scsi_mpath_end_request(struct request *req, blk_status_t error, + unsigned int nr_bytes) +{ + struct scsi_cmnd *scmd =3D blk_mq_rq_to_pdu(req); + struct scsi_device *sdev =3D scmd->device; + struct bio *clone =3D req->bio, *master =3D clone->bi_private; + + if (blk_update_request(req, error, nr_bytes)) + return true; + + if (scmd->flags & SCMD_MPATH_CNT_ACTIVE) { + struct Scsi_Host *shost =3D sdev->host; + + atomic_dec_if_positive(&shost->mpath_nr_active); + } + + if (!(scmd->flags & SCMD_MPATH_IO_STATS)) + return false; + bdev_end_io_acct(master->bi_bdev, req_op(req), + scmd->start_bytes >> SECTOR_SHIFT, + scmd->start_time); + + return false; +} + int __init scsi_multipath_init(void) { return class_register(&scsi_mpath_device_class); diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 8ecfb94049db5..3ff425c5f1e56 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h @@ -60,6 +60,8 @@ struct scsi_pointer { #define SCMD_FAIL_IF_RECOVERING (1 << 4) /* flags preserved across unprep / reprep */ #define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING) +#define SCMD_MPATH_IO_STATS (1 << 5) +#define SCMD_MPATH_CNT_ACTIVE (1 << 6) =20 /* for scmd->state */ #define SCMD_STATE_COMPLETE 0 @@ -139,6 +141,10 @@ struct scsi_cmnd { * to release this memory. (The memory * obtained by scsi_malloc is guaranteed * to be at an address < 16Mb). */ + #ifdef CONFIG_SCSI_MULTIPATH + unsigned long start_time; + unsigned int start_bytes; + #endif =20 int result; /* Status code from lower level driver */ }; diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 7e2011830ba4b..cf4fff3ea1a8e 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -753,6 +753,10 @@ struct Scsi_Host { /* Delay for runtime autosuspend */ int rpm_autosuspend_delay; =20 + #ifdef CONFIG_SCSI_MULTIPATH + atomic_t mpath_nr_active; + #endif + /* * We should ensure that this is aligned, both for better performance * and also because some compilers (m68k) don't automatically force diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index cc77e63c43da3..c3398e9f03f16 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -56,6 +56,9 @@ int scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpat= h_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_start_request(struct request *req); +bool scsi_mpath_end_request(struct request *req, blk_status_t error, + unsigned int nr_bytes); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -98,6 +101,14 @@ static inline void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) { } +static inline void scsi_mpath_start_request(struct request *req) +{ +} +static inline bool scsi_mpath_end_request(struct request *req, blk_status_= t error, + unsigned int nr_bytes) +{ + return false; +} static inline void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) { } --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 6C7B2431E5F; Thu, 23 Jul 2026 09:38:06 +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=1784799488; cv=fail; b=oZsDhLB52wVFfFyIhOlN60mJZE51eIzVXl4aA3+jc985A9qhDfZLKssvR5NUxLQDuWVjs8gvJw5UAY/nN0J1azhahtmSw/IeNli4C3LAuNcpqFKGu9wwzG9xv2VSwHCQ5xwqX4owSf7+YSr9gg6rhjBmFaSoj7icRNdJygrOLhw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799488; c=relaxed/simple; bh=p8i9+n6Dg4vw6qRWknSxJ3wy/2ufuXSqmajsVKveH28=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tiIz0sgR0aJ+x3Jc4EXSpSZUp3J1tbJY2jHMs9HUsXes8AKmG+6FkoBk47v553pDketjhZNqnxV+uQ5Z4MB8prvEE4lsHXiXiy4Zg7b2vOMAvrSNoHmw0s7MwAFMMBu0H2aFE3VjHQSU13TVINjrOugp5nQqGVWnnWMhcjnFXcE= 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=gte0SoLg; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Gjk+mXZW; 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="gte0SoLg"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Gjk+mXZW" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N3rdkP106353; Thu, 23 Jul 2026 09:37:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=JxzGoeMZry833A8V10PPpJZfNmslGlF8iFGutw61ros=; b= gte0SoLgyPO7/cVHjhTYC5/bR9hahuQaHAlcH9qqE+3F8NQmQX73oBMwAfswFulv fEemhijcQ12KJ36m7VhPlrnE9WR8B33kKxV4sSBjvF9MQnY4Zkd6uC6yrUbLoxSu IzbtFjpV/TGSpkztC21773fcUUH0p9ZxsWJ5MyKPkqEee9S7tS+GNXzWjN8qh4NJ jylh4SCvGhWcYjU/QBzormuQyD6A+Eam+Gr/N2P6ANgu1qb5q0tlCjFRBh7mQAQH avG7sx+zepYIJqwlFUXCMiNqe5AsbRrNTdvw/uqeGYDFWXdh9P7+/Qz91fuZ+del rTQNrV7ZTpN/c8BGhLZ8mg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1kpxn2v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:28 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9QH021137; Thu, 23 Jul 2026 09:37:27 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010049.outbound.protection.outlook.com [52.101.193.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4cn-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:27 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SRulMaDaUQOTE3Sp6teilFD7RrxDjCmmkDHtIqsrF/eVqfIlXsA15lN8BUjxvx6MgqNDajhPgTwQX6wbKHfF2mWEM/CUqVc35o3Wc1IpZ6W+wkp0UVtvL+gRoFfTTiSM6wEm3hTLekI5xG7lSedsq8kl4vJeGnYUFBuHaZ7HSt67dOEG7xbW9VsVw40AJR7U4bvyIbMWGQl99hCupICdPhtZQDKUX0KYX7PJyVpz5js6+3PJEr0BufT/M4GDAI+wNrjZ7U9HYAvkKNuF4j0Qwz2nvuRmfnsLKPxLwmLagU5aF14Op5u9n+kzJ3tIX55xC+M2klXDGtYiuLELXTt9Hw== 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=JxzGoeMZry833A8V10PPpJZfNmslGlF8iFGutw61ros=; b=kMA3vtk2Jvdi/S+SXdyRE8VOr5jQU0Js3d18iKMDdYUqoYHNfvP5ULtXB2ZsH/8dIVqZxjuDtC06AxoBvp1sXBCAiSBe+IzFcVRBwZDWzw+Y36d/jj70KPzTj14bZJFq8CcxmQoSnkCKeO0qRAe1kqJwV+S5SoYWOxCiNKuFl4y0INa+Btq+Q0lxOpPjokzboqs4uA7+WawzwNEC9ekpjbdcAciX4lDboebbl5XlFXuphvhSUv9R/Fc763kNbTlEnC40VDTJEJ5TZOtTuubzx/9daGEg5NiCYEEw8rCpFVZ+Ei4OKIOBvIApz+wQC1VrN04aAob5XmLbYEdxILNv5w== 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=JxzGoeMZry833A8V10PPpJZfNmslGlF8iFGutw61ros=; b=Gjk+mXZWKa8sNZybEc/AoJAiNwcWN/qPj2yY7UdozUWrqZbp17iubjoBGUcpCN2ixIZTCeGddvqFOghIQ9kF/Qirc7CbJQTTTkwSsL8GhuC9EfszKkzp+XLVv27TsQhj8U/S8XYSTr7tX5WSLHGFVXp0XYsgvWbhiyaXTM38mkQ= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:22 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:22 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 22/28] scsi-multipath: add delayed disk removal support Date: Thu, 23 Jul 2026 09:36:20 +0000 Message-ID: <20260723093627.2327456-23-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR04CA0052.namprd04.prod.outlook.com (2603:10b6:610:77::27) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d976371-7027-468a-17e1-08dee89dff0f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: f3SeQFulgfKlEJBpCyRM9HhXVXrzm4MiDlaXVsbYaVS+hNdU9Q5kXwhPUQ6Q7fbRoTYCCIzBYzAvFSLqIlG2XdyxW6ykU/+uxaybFex1R1itzXFF5caoYQt70LCBhvXDR/wZusfwNv/mwHp691TPJYFQjiz6+myprtvgjLUQfk48p0THP7PyWpWe8TMLzyGF49G5C0x+iHqnpVr/oMAX7eblEKoEHQ9PNe8HhVq16RfynlACLfrwsvRmtouYak1j39PFzAfJq0Qu1yn2FkdnE3nPAere/xbaaPGOYw3ZeyIHKHOxk+Gm8+VJ4dk6yxQU1+4kiNor2ow1l2/NfXA+SWJC2dbZ3FojfNNuZzQnnPuJA/kImeUE9Jfm564ZV7TVXO+lnMgXC86a+SRhrfBgfjx59rC0bor+d0bu4BhIQLtG1RH/36vnDQVePzxSI0lTztdEf0Shq+AqbGKohJ6R8vOldpWN7gnSl4PiLjLtSJm/MIterIF85tB8IU6tgV0AiKo5Qi44Ju4O4ft2ciWSZNhrhR0N2tWse/Vb6Sn2Oi0k+UYUXz1WAg2+meYe2WXGXdq02vyyPFNjVeJ2NNcCWU0MvaEiLnAmnh1JZDx2ZqBH7D8Xc/5niX5xSgyiQl0hp83JPhyNfG6lVVsJO6WHH88P7AMDldNNiHl/1Vz03ro= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0chz+SLJJesrXLP808RsGm72JCHl1YgUPZ8lQ4HKn93Ptro/peb3q4CdIUs4?= =?us-ascii?Q?yXQbQiFTUw3DN03Vd1kzuTA59zXUXMBo9LnDzYHnYhC6uk9VFp4DRDsiuY1I?= =?us-ascii?Q?YqpvY0R/DKR4S3NQLVlrXfCPf8HOVZwbRlhWSa7DdywNPwXV5foVNiTH6cx/?= =?us-ascii?Q?UPaByuY1leezDQXNyxsFvr2J+CLVLfV6Ce81JR2fS04rYw2psP+UKuB9kSMu?= =?us-ascii?Q?SO9HfH+qnRJhqAIiFcwDHpZ2pjB3kzGfbrN80Bcnw9yIiMQvnvA2uIjEMU4z?= =?us-ascii?Q?m3tcEwE/LzLteRJZ+ZOOCDb88Oekamq2zyN05zk5p9hm3LG1x7WQtTRR87mU?= =?us-ascii?Q?dk5F2I6c4mkTfblVpzqQ4jTtEv2gk94+aaJhovxK/gTXfNNa+dS8hbbxqtgh?= =?us-ascii?Q?eTSM37atwApmnYQrOe4DXlOx5pjtQuutBwV9MOkllXzY9blK5UYs0JKAlseu?= =?us-ascii?Q?qGAMLXuUNqWF4O6ZPSLmYeeXdJX5B1d1TncS3ZrHuU8Dj/25Be9of7LrCnow?= =?us-ascii?Q?0nduJA8H2eZXMqzcVu/S6ohoslDbRpgziH9f27VVkGZrLwbmS8zG1k05Cgw0?= =?us-ascii?Q?8PtcVR9ugLTN+jUOCyFrmbfcCjtzBbQ8rsrOB48jhu6mbW5xNqeWiuEwY62F?= =?us-ascii?Q?G+O023mlDcSaYy25CgVpcT7m2Mm6d2gzdkMUnw0FKrF3LLFd8q0hLFyOgpim?= =?us-ascii?Q?OZ5JPM2kF12bW3OqzJEix3E/TMqXl8Uv3KNWj4MA55Y2KsvZNE0kmbIQW2Nk?= =?us-ascii?Q?2HFIRR+W7FZ6lA2So75WHaM6slzA2sZ6igxu8QPkdvDZ258neb/GdS4GgMYS?= =?us-ascii?Q?5bBmIBIFAO8ItAW8QLXvARgApo9BQyk4ldoq9A7bgU9jVcZ6q+LcJ2t69hai?= =?us-ascii?Q?GJT9AcN8UvZl0eKlDpTs1gkAECGqQU9CAW7QYSQjVzZu8IBQTXbKHIcgunzp?= =?us-ascii?Q?IgXzsEdTGqE4Xcaaxd/NBn3Y0cZhh1eVNOcpW3gd4R3IgfzilTdaQSAr3DYg?= =?us-ascii?Q?JvVQWC0cTonReF09DAbBivbqR1skopGz8hQdPvpOJy7ie1cs4YyI1YT2R/HX?= =?us-ascii?Q?Q8+/kxHZ7dFnBdTYkc9xnIJhBg6Qp4NDl0jXrHZzCe6ar4CWQfyK8imkz0zC?= =?us-ascii?Q?TwghHhXA+SvCKsNMjDWunOYYo8F7nT7hH/9mIdfXy0z1STEi5smULT4IBhKt?= =?us-ascii?Q?GpVDsWxAXG4V1LmD854VkoMAsqzpz9J1bBQvRwoD30y9ZC3RfeNpMJmkwfyt?= =?us-ascii?Q?zEfYhK429SHSQxXvoPfp8p0lY3IyDSMKwusu89L/84Zt6PYetwOXjy/+DQuP?= =?us-ascii?Q?zYvsMMu393h6epjyc3jF/8KpOuKR6Vsnk4lAXJ9s3n6x4sk0nCWBY4kj6lXb?= =?us-ascii?Q?pHEifvoRp8iHOhXJjkWxLgyMYF5m/HyUNPgJmt2FBmuuGpE89sg+vKpzUq7K?= =?us-ascii?Q?+iBfk5Uv9UeeeAz5IAxwvvP7DLbEhfgBMWmjsQDFHEGyzv5JY9wr9DGakPXF?= =?us-ascii?Q?dPcKzvaH4eeQiUOhS7BB7/61mqOLvS+aggYjol4n822Ae7IIMSZaRRFYbHTe?= =?us-ascii?Q?jubkhRR0IBCJ9OhJ8/DJ1kWYJnarjhv2AowyVFE0hRMACKojPQYE9hIUgReM?= =?us-ascii?Q?7eSNtczRfFhH0SDmK3qQXF9VdB66lHhklseoP4y5VTQu8L9gy2r60K099sYC?= =?us-ascii?Q?VkEje3vp1VprXPfU48nsgJrVL72J3JwvPPCji4ArxHasakiVNsQKQWXWwhHv?= =?us-ascii?Q?oTn2YWRQU0bHLRY1hqRxZRmsH5RSvWI=3D?= X-Exchange-RoutingPolicyChecked: ppidQQ2eq44XoyZVO+VMcoYO3gnIC7LKuMoh3K7j+H04fttS47boiG55GIhm4YSN+CW7nMorve4fdCk7W5XTMq1UJhmQym0RI1LMP4g8lo61nN8JxFwEyAZmN5bdahBkHUShKQDv1chWOp5QgD1+5ucVWoDml4kjHlj+Uajh235Qh9M+mpWSwVXskjd+dqMErMiVmE/B5/VndCufwXUJSQM94F7MiAtiguEBjC9rHYrszmExEvzG/ufk3VWfmKukWnq6N1qzzSLnyQe54ZbSpYRUgJXvWLWSFp4J24VkwQikvxTrEobJBeekjwMnnnGQT5lXnDpkKjcHN6dOkRKG+A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: JtqCLCs61iBksJeccRl6EUkOtyLwuCkUA0qi6Xm6r7d/gfVPTrIpy7fwq4z6NzkTxVWQ1MuzBoccrDJHO7FRWxqV9V6JEaC48UyqZJc8niryynuxNoOcGRSZXnCf3w9rN4tRG9B2xzT8zqbCefhzxwRP0MnQGgFtjDpp2HC+hOadRlc3shghp8lMeg2e/bYLVbsWdCKliF5y2BKKX9dlbdptO0SBacFawyJM1M2mqbUSy6Etl3Iab+aC7jj42Jxw0Lhb8FLXvg7ij5o5cNHMTbZFfRLXyMptNaK6odEw8wnpLnS1Ks+MPONKHHKnW2ka3DqrtA7jJepJYMhXWo7JIJQIOZ3JgMYkKlaADHctg/IegZSS+l3+Tn1nZuDeZZF0Nt/UsGD9Op4H1aEmEI/OZDD9Fzke3gv4G5pcVhqi7ZwJbup7yNV5RQWUeVZVgWDpi6VQLaH9gErP2VfVnnPhuRhz8uAHoODVUuUYY9wrGZQHpJ0OzH0F9RSrU+EOgfPGMrH+W+nPdLM4GySC6S8uof8ytYlsMOxXHxKqSVNAx3PH1hk4QxSJE4gM/GoC2sgaxU/EvvSCrbxSjCXG+07xgYUvbdd4XC+EQW1mE+HH5y0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7d976371-7027-468a-17e1-08dee89dff0f X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:22.2106 (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: I+kX0QAm2ZjLK5V/B7XVyp6Z87DqIhvdz22VG5uS6OD7Ls/YBhFDBFSW4tm+KCIXQ8dTXlNU3N69htiy2W8/+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX3YXdd8GcnWS4 yia7q4ZQItYOpH19V9VbK8bJwj86Ep3uDjw5zehe1XiOOEkFbnRQmMPMf7PzxVpe3+uaEKv+hlM jJzA+I5hdLn+e1WblGuWG4q1BlWsXtU144QmMlsV6M8zrfXl4AbQ X-Authority-Analysis: v=2.4 cv=IKYyzAvG c=1 sm=1 tr=0 ts=6a61e0d8 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=S0-NFRiyq58gb8qD-mcA:9 X-Proofpoint-ORIG-GUID: vGrjhrWw095H2DTG4j2ql8WO7KDdilXz X-Proofpoint-GUID: vGrjhrWw095H2DTG4j2ql8WO7KDdilXz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/ME65A3vNBH9 VyhHNaNrGPK4L6sX486ijth3CAuRVa6mHZBwXiudBk4/UvFP9Lb7QEKr6ViGZucCmrgSX6f5M9v xswNuBZ3KOO5VAROeqxbYxgdzksYqmuMkQ3AIojbN1O2Q3l2kiKzW0/HhZDULbCdDZqw/zaaQ91 tD1zMmmNcJxumTH7+ptja0PLjOFsHZAvluAEniYdzNXBFMK2+9bDthF4CsrVM1jsSMOuYq1BaQS oe1K7HdoPxChqYPD05WBVWhWl3MymqvFw974xiz99s7BL8oEfFYDz7nYMRVRlWKWMjsAZmnt6kD 1e7P5KGsD0UR2PK83nyVVFow4Rp/0DcbauQ7GTK9yx/00OG3X03poo5yVXCVrLzcRO2urlBhnV8 0dPFBhjwbvMYslM37R5DxKBZ1IJf9/e52aiDsScd4gw7b0SpDFFTnv8l+uFpsJsSI+DCNcl8A5f taL1a/Hf8Ntcb+YfQug== Content-Type: text/plain; charset="utf-8" Add support in core code for delayed disk removal support. In this, the callback calls into the scsi_driver to do the necessary removal work. The scsi_disk driver (sd) must ensure that the scsi_mpath_device does not go away while the delayed removal work is active, i.e. it must keep a reference. No reference to the scsi_disk multipath structures are kept outside that driver, so that driver needs to provide a scsi_driver.mpath_remove_head callback to do the necessary work. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 18 ++++++++++++++++++ include/scsi/scsi_driver.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 6c50fdde70d65..056b9c35d1144 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -362,7 +362,25 @@ static bool scsi_mpath_available_path(struct mpath_dev= ice *mpath_device) return false; } =20 +static int scsi_mpath_remove_head_drv(struct device_driver *drv, void *dat= a) +{ + struct scsi_mpath_head *scsi_mpath_head =3D data; + struct scsi_driver *scsi_driver =3D to_scsi_driver(drv); + + if (scsi_driver->mpath_remove_head) + scsi_driver->mpath_remove_head(scsi_mpath_head); + + return 0; +} + +static void scsi_mpath_remove_head_work(struct mpath_head *mpath_head) +{ + bus_for_each_drv(&scsi_bus_type, NULL, to_scsi_mpath_head(mpath_head), + scsi_mpath_remove_head_drv); +} + static struct mpath_head_template smpdt =3D { + .remove_head =3D scsi_mpath_remove_head_work, .is_disabled =3D scsi_mpath_is_disabled, .is_optimized =3D scsi_mpath_is_optimized, .available_path =3D scsi_mpath_available_path, diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h index 249cea724abd1..d92b63d357f2a 100644 --- a/include/scsi/scsi_driver.h +++ b/include/scsi/scsi_driver.h @@ -8,6 +8,7 @@ =20 struct module; struct request; +struct scsi_mpath_head; =20 struct scsi_driver { struct device_driver gendrv; @@ -22,6 +23,9 @@ struct scsi_driver { int (*done)(struct scsi_cmnd *); int (*eh_action)(struct scsi_cmnd *, int); void (*eh_reset)(struct scsi_cmnd *); + #ifdef CONFIG_SCSI_MULTIPATH + void (*mpath_remove_head)(struct scsi_mpath_head *); + #endif }; #define to_scsi_driver(drv) \ container_of((drv), struct scsi_driver, gendrv) --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 B1CE74322F5; Thu, 23 Jul 2026 09:38:11 +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=1784799493; cv=fail; b=VGmF7lQeT4k+6A28aSAjpXtXhMCXywhJ4EAK4uLA4rQBXopfrsGrIFd3Bw0HlpVCAESSgcqeVy4/duTDCup5ln2dxv7NZQGSsBx3V5peQVfUCVEUSrO49CSkYJ11oj6DDOus8+cHYcMBcGIuvvB5IwKH1SzH3tOjndtVeEMnhT0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799493; c=relaxed/simple; bh=VhKboXGuMwIOVGOfv42aqalImvUo8hmH6ZtDVhsRm5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Xem8CubGDBtNYPA1J6ZnVQNIsQ8IM61qH3POc1QY/sY1BCLwFJeoUC55j9s4mWVThJaExNHFaciSwzjPOafZ30AVxAOUaN0t4bOvyNsvM/y3I2Nr6ssXdxBZqFDfGlK+Ybz0bBjidmxSMlsKH2OFSkGAPxa+gnk43ZcENqW2O6A= 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=ngc3jqco; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=EYAMKi9S; 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="ngc3jqco"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="EYAMKi9S" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N2n7R0080922; Thu, 23 Jul 2026 09:37:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=NGHwTZz18H6I/MB7c36ghyxfhyp1tjhdoXl6BmjK1uQ=; b= ngc3jqcoUkp8OSiuySP9kXaRxvqlikobbZPanE4//DSGidKexEmy3HnubuyXrvBi hoOo/Es3v+8qFctmP3FdTtyJuv7+l+sVicpRWl9oATStvWUGYsODtgO9kNdRiGe0 j7H2kNlxA1q8DOEt9DMBPW7vX8vqEdknFcsXs4XrrSynPO9PHBg12i5aKD1rCAyH Ons9wSCIxafGuUSCJbS2e+pNiqN25+PvaYvZMjTBPamI8J4e5uJlbhZoenr0Iic8 KQJ+VUCQByQFcBEjdf45MIFNgXB1b+2r/OAjzqAX6syGvzWYUfGOBzg4W8HgbryO pY1GrI+rPqf/HiCpoq2SrQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1sqpqct-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:28 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9QI021137; Thu, 23 Jul 2026 09:37:28 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010049.outbound.protection.outlook.com [52.101.193.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4cn-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:27 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kJDvcwYdlkBHp9VqnT1T2ttUVZBrQQGghDJ1/9C1PnaAgczWcio/ljaGcu4Ol6sGh2QSeMkNn/oavJ4uonfpS70BUAarCBK1taManhlFjy3xWPOFzbhKpxubmnEuXvTq4gaE0K2G8qAsD4Jms/MUG46aIpouNNxw6MqfqCnq4vbKGXD8dEHgIbM0NX7IdL0+BZ0/JGkceLLrjKAKpC8ZQRq/667ssX2oQ3SQPEPGQj6bm+wfDbk8g3wE1X8TgTPm5MoL1dTxxUuGm540WDMZGo854X8l4iBQIU2PJDcOaw+A2wJMz93fU/ux8PNHnIk15MSxK0a2vjo/zfafzrlCQQ== 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=NGHwTZz18H6I/MB7c36ghyxfhyp1tjhdoXl6BmjK1uQ=; b=J+Wj9ajNQYidDrYPgRdQaBx3Yi1c/FPhMTPiyfWHXwMyqqXAJ1pLqJgKim48erDH0mxS2zqmK1UsW7f/EjQiQZNECpkwoob9APqPBUXkaG1MutnkQNiGENnHnGWdLD02M2VE/Zha8yjvG7c4B3JuNi8EfhEQIrIYHUoVhhVcIufcROyxmWrOm6Cmp3kGAKXGZkw9tERIwedLEJ+XL2/qhbX/qVFDOj86urcnZm7/dmk/hVviiTWWj/ht2412GjcGkJVFpX6I1CySiRcptcKr9YIzv1S9blZ7kGwE2UQ3Wmy36pUCW8VcZgV1oROPouwkOpg6FZOkihXZSOvmK1T7TQ== 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=NGHwTZz18H6I/MB7c36ghyxfhyp1tjhdoXl6BmjK1uQ=; b=EYAMKi9SvnK+YyHKXi6VTqi5EWJmsuQHxDPXdpBEGM04UoptUxreQctLsiqhvwGFkGAnW3GJQc65uaoPgaH22vICOLAd/XVdOip6+TUlWA535w/dS0wjm6KE1DGvn3mQ3ZWEyBCs7SI5nhaySB2M8+9FhHLn1cwm842xvm19xOY= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:23 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:23 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 23/28] scsi: sd: add multipath disk class Date: Thu, 23 Jul 2026 09:36:21 +0000 Message-ID: <20260723093627.2327456-24-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR04CA0037.namprd04.prod.outlook.com (2603:10b6:610:77::12) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: ea3a0b78-109c-4ead-7d0e-08dee89e0006 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 20dcDpc+kU1+dH3sgoVuAkvamqW66L8ZkuAgbrkUOWIXWfq+DYpJ0p1p+2pqG9dWvs/HmaP4uEXPdrFrjbrO0ZqvsHwMND46vJ8GLZ+isk8RQwOLGvPoQHrzryM2DKRH7W1yQ5FkiOKxs2kJYC7+DjbS1CD5Gv9b6FlkJnM9ivT/n43z+qNkV25m11jIgGQ33Xk8LwP/VEFkSZOKYAn6KYKKJnig8MtQUNJT7mVl55jmEfRuLPP/JBE3o/SMjkrk6siCjnx9QsMKfwTMRKZJQZfwyXpBzIdfDVrfNzqPxppooMtCks8d0SubeRD7X0WNP0Zr7Mg2j9EnsPwVcKMJ5wWUAOK3AnD2xWDimqudLhmf9dfoGkiodghWYNocHJTAx4054DeAdmywKB/zboCo+bPscxMB5kEXdqDa8Wq7H9bwz5iDcRnb4xUqCM1PLppCh22Aaq/9UKm5/SUhjhD5CnAMcf4nhN4atIg1l12LPhpzqyUblrergfju85h8jUQkgoD/vgGaiyVtB4MwutMQODdYa3B17a/vt73ISR0mlFNclTFT69JduaZnriQizKYAOGTDRneZsiHVLJvX2y5IaSZ1ZO/WmCMTCPMBIeJ5YL/+Ak7QxuyA0tzixsbUfr10Bf8knvpOi0nckUf7FhGr+VIJD4zFA4x9Gs/rYx6bCZ4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6EQHi2Tezin5BQMmy+hPVxYRMrWsrsLFxICUsxEBQTWB2egfm/YPyteJ5neF?= =?us-ascii?Q?WuI8KmayiL60ihO7j9hfJcvyoynoXY/w1DKvk9sC+LKj6eiVU0UM8rGb7Yf9?= =?us-ascii?Q?sX9t0VOvZe+d6ZvguAxjlo6m6/cY/LhHNzeG4AhV1SsVDh7P6rkoaP6lWPZV?= =?us-ascii?Q?65lAgjEogkhmEdvjqSPY+GQ163gbgSN5egUmVtvAH5lEyY+6JIJRfzJfpvZ0?= =?us-ascii?Q?r2Hv+s/stK5RP3OtcQn1tlUnk/5gT4G1ZTVaibMT2knqe5GRDGFVssz7FiVv?= =?us-ascii?Q?e9rPPAkzH4Ctpwy3sZHOQ4WK+Gim+5vz319ATpFEZwTyidlVSqbNNdj1JcXI?= =?us-ascii?Q?PWAl1ICZMw2X4kK50na+rysLA5LARUeZF4xUVjypxONb0cK7bLM7vrYe+DDP?= =?us-ascii?Q?H6YS1O4rA0h0nAfIm9vrmkp984j2nZh5msG9c8QFH4RpuNsK3NN22/cL78uM?= =?us-ascii?Q?53NwyPDh+1ZqooOeFXLBSAOPQfnr4Bz9IpJkVHwpTKe1xjlenxqLRpF6eoY/?= =?us-ascii?Q?emGBJ5ulxWVPlqEU6Vl6xYYttW4m/9IEIzxYnHihkPSiHzkXjEUxQxXVYGqv?= =?us-ascii?Q?CdWmNIgHMKheP/2kcmI3uCSO+IjLOJ4kffC1Vxga+tRnVo7/0qNHNr59i+2W?= =?us-ascii?Q?Cl4DxcZJuZLAnh2DC5HyHJfefpv7CIP5ewffnw1xYUi2bUai00eI8/WhgaMF?= =?us-ascii?Q?rkmzm4h6mp8pZtfDNOEvImMHA9AaoA0qjjmLB3dmX+eH2Wk61Rh1HFykkZEk?= =?us-ascii?Q?aeLAhqIOZx9aXMZjW5TzyZc02W9HkMONrhiiv3udKfZyjwH9wxw5jp5C1Zno?= =?us-ascii?Q?XwJYNkqmdn90gZGWEbvRu2i5SXq9Lba44MKNZkdIOolgtqPG1dWqLQdAJrj1?= =?us-ascii?Q?/EsxvObogQJ4gXLGmDE+atHq1Zo37Zp2SqOiVoURWrloLbtYkP5FpiKrS6wo?= =?us-ascii?Q?MBBHeQR1tZWm9s+p+4T192kYj52OAXUVJR9U4jNBrA5cSDTsea7U3hR0BN5n?= =?us-ascii?Q?H/ctgWCrXya260r5joDIBaOs8ul2S/mVfZDiYsg1x/Yn1l+x16n6LvmZv31K?= =?us-ascii?Q?8s1Kld8n6fMO9m+veIpv2dZgo+e+JzcYsIcNtAoJmWt6QzWX1RqbNALIMiDQ?= =?us-ascii?Q?lVGgcgLqhNexYHhVIncNfGPVfTtSAzEdDYEqhYXwEww/JTCTMOB44yZIBtVc?= =?us-ascii?Q?oR/fmaF4ep4JOMlJLI5Lgu8ilvPYp+E6NFYXmNT48+1NsGssPso9Ve9jgHZ0?= =?us-ascii?Q?iJtsBYzb9IoFI4fyPHhTIO0oQFMQpip5xPYxl4CWDtBNCD8v/sJcgMeG/xzx?= =?us-ascii?Q?zBQiI3hTYem8eSsYtulgjJjsEfrlGtk7QQ6xjoZrTI8bOv66kcIFB+nPB9Cb?= =?us-ascii?Q?s6yrQ+qXGVNXljWmApTiXLSUidhFHo9HmXjdSSdH0EOTRppIMSV7GcPnJ8Q6?= =?us-ascii?Q?MxlnSNZuRj5fow0G67bc9QeRdDU8vdgL1MB7mZqjaddrGqQukvDRclcmnuEE?= =?us-ascii?Q?ztnVIPdXYVv4bMrU1HtIgiFh0xEFhgFztK8vw8ENB3XLk00NTmKRcDNd/ogq?= =?us-ascii?Q?RQIAmJmFWRtbpED5ixRHh+2kijbxCDaODN+UaMKZR/CtokgtYEcBWCyf1e7U?= =?us-ascii?Q?tHFdc+YTVBumacJbMCOcdDZrjEO9iOUHOiqPTW+eOJf3+Tm/OkgmmcCKC0rb?= =?us-ascii?Q?VVLJAZD+01aUfLNz7B+FF8DfSRqCO+jnNumU644UufYswi92Y4FwfrbDUMA7?= =?us-ascii?Q?m9R4uWVwmovVhNCfmmyAjxr9qllLnCQ=3D?= X-Exchange-RoutingPolicyChecked: a4fLYH/OiPygfNMylXN5Xxy7NvkV0efR4x1iWS/HzW8qOAm+31fc8KlgFZLl+EjuqPBHGCfjQ9JiLLrWpZ7C4IzTpbT92eAay/KwmzauRSu/spPXi3KTiZzkQ0F+b+WEG7Z2YsA/5y+y1VpLZHg+NhyekCpPFTj7LlSJePkk7Mg3Pod4Gsu+KmvPw632BPRZeNuHdI4kcFykcgigRF2WkuC5+pLcDbr0CHpUxaFapy59fHaFF/E6KEjKGwXTQcJHE/naSnDLcbAQI1aXWpMQ1u3lHxiy7T6HdEZnDG5GvwWuS/F8xHv3yTdUUOuuyABgY0NjCrROaSqtGpH23zAQRw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: sFc8rZBuYdn7A1K+9M80Pk/rQRPwKa5PTvmZXDWu9Dmd3EX/C3GH+CJkcBYwKP1FI4trNlAw8onvxIPUGvA6Yu/Yq2JNUkUAsflPPvNEpWgtODudt4ENenTeZA5+IqotKWUhi1SqIQKRgNj2FJZNO70CIV0XI2jQeKmlNFFofiOs8tz/awr/pY6CA77k+45CRXMKmr5r99gFupyCgRSgGlyEY9kiyvqIXcojyDBKE/jXbtypS+8B4JQLdKCBtkIcvmGZ5PoSSNyiD85AFWregn1QyTscByKProEdkyEYz2QBub8jcUI8vNbHwomepbZ6M3kUftnhieedTm0VCM0+UrS+UCkvUq88NVoBHdSiX0TOw1zqiZnEYLZtLXnhVNWe63iUJQFWyLy4YZqQDilubAyUX0GRDZEsWtrCs63WUIBadrXOj3CBzoUGGWhiJXHs1sasQ6QP4xciVFeHIZIkbAannN3UPXrBcBVEyV60OrZ2ykfOxuaGYStmkiVnrJdzK0lDJblwNJePw/hIfHI/jGQV2YnAHcrPHglR1D66+XpMB8tPZvdbs6wxJU7Sims9bJSPBFVEPWRoP5nV36DaCkHtxL5p88PKcIT8FjvVWAI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea3a0b78-109c-4ead-7d0e-08dee89e0006 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:23.7618 (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: jjpL5b5bCK68Btx5VKJWwnxy0zfan6FLV0K7gTmH0xI+OJoldYdhJUXqshcsP1LQDPs2WV2YMlv2jZbp4Sedew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-ORIG-GUID: sjjKGlHHhD5taZYwt8weFNpkxrQaN4U6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX+Il267G0/vml m0ocYLma5ET//Shyj+Z0ud1m9lC4fchvcZzPp4RhrYEWpx3u1ke949bGsqbOVH1wpmzMIn64P3I UFz6hiIfCYCeMCAjFUVzYIp/JI//5LqvieuBHK2NdDD0o0Kh/UHrnD+rgisZjORqQRmopMmUqaP h/1jh563R5da3WpHGm8L0rPCw6ebPk3OxdpO9V7r5g6lfoWHw1zyM5ySXPxmVurm49P8W6qfZUR QuyO2xiw45g4hTprfCaimVrEM3KsbCPqWJE/AatlH8UG/xWLd+3UmWB5T6tQGov4gTUGKbZXc2q W4Q/1drlvNTCyRntU9AmN30DPF4MxA5eWYXGY4Am5JyxjtAL6FImPcFLCUcILFK0xMJPHjzGRhn t9e72wzSV4sRurch7nLThS3QQ+5+StiqZgXnB9JA5fuka8gmxL/+xQpvMXBVClzI64jON3wpeXq xWIdHxz7mjaySP9nnhw== X-Authority-Analysis: v=2.4 cv=auyCzyZV c=1 sm=1 tr=0 ts=6a61e0d8 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=ecQ7zCoEdOpy3JLqRw8A:9 X-Proofpoint-GUID: sjjKGlHHhD5taZYwt8weFNpkxrQaN4U6 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX2SxN9HfR7p83 u9cYPzmB7Wjs/fmu8KB9EPK/8HZRGptB7jDJirm2QNlKz7EPhn7AKlkKiXRcWIawr9SHBGurH/6 QYMx99oxe6hskNULDEWoA6Mbw0jcyiwVc+m1ODzspdiWrVcT57qt Content-Type: text/plain; charset="utf-8" Add a new class, sd_mpath_disk_class, which is the multipath version of the scsi_disk class. Structure sd_mpath_disk is introduced to manage the multipath gendisk. Signed-off-by: John Garry --- drivers/scsi/sd.c | 43 ++++++++++++++++++++++++++++++++++++++++++- drivers/scsi/sd.h | 3 +++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 599e75f333343..242a15bc2c5bb 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -70,6 +70,7 @@ #include #include #include +#include =20 #include "sd.h" #include "scsi_priv.h" @@ -113,6 +114,39 @@ static mempool_t *sd_page_pool; static mempool_t *sd_large_page_pool; static atomic_t sd_large_page_pool_users =3D ATOMIC_INIT(0); static struct lock_class_key sd_bio_compl_lkclass; +#ifdef CONFIG_SCSI_MULTIPATH +struct sd_mpath_disk { + struct scsi_mpath_head *scsi_mpath_head; +}; + +static void sd_mpath_disk_release(struct device *dev) +{ +} + +static const struct class sd_mpath_disk_class =3D { + .name =3D "scsi_mpath_disk", + .dev_release =3D sd_mpath_disk_release, +}; + +static int sd_mpath_class_register(void) +{ + return class_register(&sd_mpath_disk_class); +} + +static void sd_mpath_class_unregister(void) +{ + class_unregister(&sd_mpath_disk_class); +} +#else /* CONFIG_SCSI_MULTIPATH */ +static int sd_mpath_class_register(void) +{ + return 0; +} + +static void sd_mpath_class_unregister(void) +{ +} +#endif =20 static const char *sd_cache_types[] =3D { "write through", "none", "write back", @@ -4453,11 +4487,15 @@ static int __init init_sd(void) if (err) goto err_out; =20 + err =3D sd_mpath_class_register(); + if (err) + goto err_out_class; + sd_page_pool =3D mempool_create_page_pool(SD_MEMPOOL_SIZE, 0); if (!sd_page_pool) { printk(KERN_ERR "sd: can't init discard page pool\n"); err =3D -ENOMEM; - goto err_out_class; + goto err_out_mpath_class; } =20 err =3D scsi_register_driver(&sd_template); @@ -4468,6 +4506,8 @@ static int __init init_sd(void) =20 err_out_driver: mempool_destroy(sd_page_pool); +err_out_mpath_class: + sd_mpath_class_unregister(); err_out_class: class_unregister(&sd_disk_class); err_out: @@ -4493,6 +4533,7 @@ static void __exit exit_sd(void) mempool_destroy(sd_large_page_pool); =20 class_unregister(&sd_disk_class); + sd_mpath_class_unregister(); =20 for (i =3D 0; i < SD_MAJORS; i++) unregister_blkdev(sd_major(i), "sd"); diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h index 574af82430169..304b24644d942 100644 --- a/drivers/scsi/sd.h +++ b/drivers/scsi/sd.h @@ -83,6 +83,9 @@ struct zoned_disk_info { =20 struct scsi_disk { struct scsi_device *device; + #ifdef CONFIG_SCSI_MULTIPATH + struct sd_mpath_disk *sd_mpath_disk; + #endif =20 /* * disk_dev is used to show attributes in /sys/class/scsi_disk/, --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 EDDB93BB69D; Thu, 23 Jul 2026 09:39:58 +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=1784799600; cv=fail; b=j9yWBARHXZpjRnds4ipscuJzgNWzppawOrM6ANwaooiIeW4A9DAthfJRsnvsReEs5IFIm5BwqLuwH1ROvkhAWjvfx7/xwZoFx5Hf9LXqiiMfT5dhd0bDtQJcbcOjS9lQU0kYDhMc53KmNA9VbDSr7rLpQwd3sDMkflNT3KLJxlg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799600; c=relaxed/simple; bh=4XMYoenVRcfywgZiUXxmJDFt29QOdkYWaCo7hrGcoOs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nXTNNmChf4f8tdlGsgNteJhhofBpJPriNIH+q7AQwgqd6fEMeTXyPOdQYhkFSiUiDNPno8QzMVBuKHaet+GZAU4suLSh9IgDj6s6XiR6oZ7fj5Bleu/BVb8kYj7OSq1sDMio77u/fKDbR/XvNWzPmybbcVdUCQ8mp0YIQ+LOxi8= 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=h5tcqrng; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=cv6YZ85v; 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="h5tcqrng"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="cv6YZ85v" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtWp83391720; Thu, 23 Jul 2026 09:37:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=ElGmHuIthoiXbN6Q2TtStK4Zvyvr9ugP8CjmseLjHQA=; b= h5tcqrngcQRTmJ1xwP1AYwCWOeYJW1jO7h1DCuHe1nbF4IccvYlYvjuFBSPPamph MoDa+lB2Hz0oPhA6bSSNkiGz+M/qawygxbe+MBYgMUMkIMYVmfL86bnQRSAkX9KZ 0kuQIgP5feGgWoDpzEWmk7rBKhGdGEGDkmaeLEjpCMlIp4RTNz1KPhM4Y1x2PDYd hdIM9oInan7AaVfbTjh1iJ+hS+4lfYC/KSV9FLu6p7RX8CbUO6kjiLq82ZkGWFmN aIOgmrmDGEmyc9TckzI0ziEXlH4ehKW2lH+DpNudSVH7hVMMqyCmfNNZ6iKzWqOC PS5uK3skBS22yTCrHIgWPg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1tjxn6s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:29 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9X9QK021137; Thu, 23 Jul 2026 09:37:28 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010049.outbound.protection.outlook.com [52.101.193.49]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4fgts0y4cn-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:28 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qhALQPeqW1MX+jZaeIcVGD6fOrMR25rUAfgt6leDbamNq8BIi78BosOTZIeIWkrgFJ7GIER7ZzUe8ZSSkF+M+HCOdwzgUWdzV1VWJ52rwLctxRNWJ/T2ohFABVr2y9BEQ2lVDHiqU+RfSdPHPncOC9GioBOlZi3fmgK0+SlmvpDYuIMwoNlw3ivA+z/HvW+ZihLgZ0db4pMgfOPGCIox+J9XiCrvWnCWIc+aM5nqOMZG3HM6FKOEHSqnSvUau5vVgCNnAMgG3yYmgbS8vnC41BLblq6vTTQI5AF7HsQI7OHGiG4EFRSj50WCO693Ebai/y8V73hLRwf8ZKE2oGKaZg== 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=ElGmHuIthoiXbN6Q2TtStK4Zvyvr9ugP8CjmseLjHQA=; b=Fw/p2YrRTFWchDsVAdehxTp1egaozsz1HS10pEzG1vhW3gGg+Ba4YmThna6nJhuJwRk1uGC7XT2PabyLkq2fnWUfgoCay0zkFkzr4ThKgB/vEaJEHL9Fma+TUoGB1AxR1ygewR1YQGCha0PaHtizHWkQ/iNnpvh9q/esyWhDr9soplm/f5lU95rG3+oQT886M7FX3Io8wQ3AbOCKCqzjibkQmfT8lPd2JZWA/7f8j7sosFokMQXUx7SRjI4PPfTCMZadMwCCKVx+TDmG2PKA4VCxhhjJxefjQDU4zTq+WCwN+913ywEM0KQ+QtarqVQPzaXdAmXUsj7UtIa8pXp8Sw== 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=ElGmHuIthoiXbN6Q2TtStK4Zvyvr9ugP8CjmseLjHQA=; b=cv6YZ85vulyAQ4KKVzV8Nc2jVSvi/iC8V1+pjF4i6HDVxQzbohZYRXQj+k3FKD6Y87D32InFCquEzNybGPc9QgiyP6XKtrD4Za2kNvT5iX1JZx4iOtrTXlVHnYaF9/P4XUmskU7ehhUbmdCNZWsZh0w63LNHbpqVafxNhCpLW9Q= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by DM3PPF2FC05F2F4.namprd10.prod.outlook.com (2603:10b6:f:fc00::c16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Thu, 23 Jul 2026 09:37:25 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:25 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 24/28] scsi: sd: add multipath disk attr groups Date: Thu, 23 Jul 2026 09:36:22 +0000 Message-ID: <20260723093627.2327456-25-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR20CA0029.namprd20.prod.outlook.com (2603:10b6:610:58::39) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|DM3PPF2FC05F2F4:EE_ X-MS-Office365-Filtering-Correlation-Id: 1de55e18-ae54-4776-eaec-08dee89e00cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|20046099003|18096099006|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 8qAzErHai3zEnNQjC6je+u28IDapXQTYPnvHyrfRG9VBA1FGA491fXNw2NGGTYAWvjIO3dF9361WsJbTXLvAYRSEfDs8DffLdMFxTleLnQqeypOskJoqLFGf66sTjNYOvbPmXmeBYf7qL2j+JwRs+nqXbLvMvrB176zukpKuTQy4CX4RUO6eJlF44tUNPX8utotgfqFLvRUTSrQUBEoJKdRJEAokf6MfaW8LCrvtqQI3isWiwASQAn7YStD9lk1DbnShZ4qEUqzMU7fqgjN08OOj2bbVNezbhJpfqYka5drW7Bh2wMQ3IYf/CpPGQNTp56hPWuXH1Zsr0QknMzp5W2SFJjCfftiXBtDc2FZ9s21LhJGvxMhv4iCQg+1FCSEWeAaX/E3VpLb5LD9j3TRjurUUQJB8uMc9xtXHI+EbeYMD9VQ/PX17InCJM7xUh9x0gjJTjO97YiTflSnc1ZrWNRDnVzwtpFQbx/MpX/rbsD6Jbg7SxkCOFWT1h9YE1Czyp0ljJNY1uIWCXbEpnu45Of+q3o8bH7bMLPCjxaf+dTG6Dr2kIzPNHrQgOaEEx/UXTG8spkgWrDWgOYhTMYEHF5eFKat8Jrj+79vh4qTbVDGa4O66uSixCDIhxLo9/RJqyTEHYIVNZP/wnZKdhFx1H5ZwAJjBeF35ZknF+Br0yf0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(20046099003)(18096099006)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8UuNMTgGj3gPKt1v6Tia0/sAoq6Z6TheURJ22cqAoy1vbotr7S3nHHy2ZL1e?= =?us-ascii?Q?RSetevXhZnupDIu3OjnGZ+S9OEVcx2+Vqc1OHC9Y2vHjhHBfP4rbVt3uknSz?= =?us-ascii?Q?VHCqY4vnTQcPxeC9ST21Nj35QLCrNvgPj+NYHHeFjD1p49BHVe7kJMmZ7+6y?= =?us-ascii?Q?623L0w5JWmVg2amoLbQ7CNQtVslJi7wXi1wJms+4NQhxcKvjpj8K6w2KzxJJ?= =?us-ascii?Q?AjEyGGQNEswfI6HVi9lh4qQYOdnAX5frh2zh/oomLHcDjxsE5U6c7Zb3kWoS?= =?us-ascii?Q?zuLboflDgsgsKRzLDsXcJ6GXv26DskGTIx3vDceNN8OWszwxUs4Z4TNLpNSl?= =?us-ascii?Q?xoZk1wK0Ajc4Obdf+tPPSLPRPvO0C9cj7d7ApzoBRlmzn+2F8rKWvQyWykWb?= =?us-ascii?Q?T4MNWsLavcsO82j+XlBkmdb7DWTCvuS++BAoDXsZRsOUlWMeUas2SFh+mRFL?= =?us-ascii?Q?QN0JWQPbt8E2f/VWCKN8k5Hwu0kEoxeg3/BftCRh1DaNPN/rABNAkvYsqr6m?= =?us-ascii?Q?2DtOq/mW/SrOaFIPG2QyJrmYdTgBL0+gu+3Z2rwXyXHyTZsHEqCazOVgZpxE?= =?us-ascii?Q?f5OqY4A8QMLiJdpK3LI/h9o3nlp9vrL2W8cve6rahIftQh2whJypgDMNPrQg?= =?us-ascii?Q?gegulUwZ5s0kmS//daVU1KGhXiA9VnEixRee6QlqQQcbfpRQXv9BI+3jpo/4?= =?us-ascii?Q?DMc39tJxVZjujqES7K5Shq0cXfQ9Gyr/Pa6G1i0xIW1D305NJuZSKVrrIn02?= =?us-ascii?Q?KAHl79IV9XATpriBuymMUXdjBqWaDNYoKzS0ZZBBCn0r2vo7Hp/5JLpvXKJG?= =?us-ascii?Q?Qg4oblYUQLyr4G2uWA9YQowUddIfjVbM2BTjQ/DvpisODL0vlSZsvOOJA55M?= =?us-ascii?Q?H/18tCn3tdS61GalSYbqnE/IjgpyRurPIp0i2AzHaXvOMkUU4qqIlHunzI6J?= =?us-ascii?Q?luwNETg+uDxkdvI7BW7fM1m0DdD5KdwuwMZIdxLOOnCyk6JK+XYkO7ZhAk9c?= =?us-ascii?Q?6GWWu1/7Vz2xXWTv7/foQZDuKXkdh1qpF7lXxwd9O27M2ypis3v6KNpUvqst?= =?us-ascii?Q?h2dAcWL1rs3Nlec+rSaIi15ZeouIKvdaMlwlY0rqQd8nMB6T1ZVN5gEOuOBi?= =?us-ascii?Q?/rZwdoKjkjwMs4hA8T5+fQK4oJKLnuymSO+wReFSzc5yZjvduDE200yTPAUT?= =?us-ascii?Q?J3EYWeAiiNGJ6EryU4sAhZ2V+pu7bCbcUyBwKi67syWYVQMVf0uhdp6D212k?= =?us-ascii?Q?usIqUBnPOvhNoV2QQFnSLC/RT4Ioa/KBoWqq6w/BQv5OtPVGAfOMplObbStI?= =?us-ascii?Q?I37/SYtr0DNkZglxbi/CODeJCgFi1R1CiCYOga8Q8bK6rj2YI76YF2VZJoeA?= =?us-ascii?Q?CDViQcuLpkFLjCvhW6++Dg46Hxm1GIz72G7Kb0kczqAHgtoJmkR/WWiHIC4p?= =?us-ascii?Q?NLBg+91LxC8OVNbPPEVQM6M4Nn6gCklLwZTKq3jtlMLAq+x5JOwTmSMEicDe?= =?us-ascii?Q?Q9dye6QXBzbjFU10BSxau8fgAI5joqpK9MQ3UALx/a1eaxNTa4ko8r/ajnvi?= =?us-ascii?Q?PqyX1Z6+Q5lKK202vPCBg7g4KmLYlxdm6GBF0Tlgl9ikOcr5YxB7dHuouCvr?= =?us-ascii?Q?/wcnGAwnr4bmZ8k62kMIEIh46TdK/xlskz15DcFO6DkMNrvUsItRwp5XXq96?= =?us-ascii?Q?SvHiYwYMYqRKUNX9JfqoQw7x7Ou3YDwS16Sgf0c9C6X0bOc7PVO4T5ksdlt1?= =?us-ascii?Q?pmg0ggJvEh5EHFUjDeqKQBUhsSQICjU=3D?= X-Exchange-RoutingPolicyChecked: LQC8252mmQea1KbijEVibJOHiGx6Njfs8B5gv6udeFI5Kryj0/VC4Er5xFX2sqtGbMZCqZBgPMk74MX4C24TUDVYF71ReOOm+ecdYtYqSZTlvuc9qwZd2MKJ50DpxpwU46VtdD4aIEcBZfJNOmK3PHOKatabA74TlzkubVhhvzu22gNByZ9bdbts1e9aqdriWpGOydEeoXhy8TqCNUxzbGQH+8MQlWCOxVrSob0zlnKh/ZCOIEmeL8RzScAQI2baiLp/DL9M2dCGTiHfAPmiHWyjdNF1CWKsaAPXRd0L5QaNf4/8vysQd/lAWOUT7p9cnfKQ45OmQUvppLZ6/l6oyg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 3QST1sA9P22LXD7yViWz8gqTb96aX3h/8GRTuWkqb5IK4FRTyYUxkOpXi7u9Z4/v1mRmvunDoz15p+7XfrBgnHxaz7rbeAONTmIAjZRYr3hZ24nRnR8v/nAJF+uz+QctIYeTzv3ar9xARs5oLxVbRhcxNG3tbUERspYIdPhgYBEnN9SvB+iqC+nZsIq4L0XqS3rXsP+EvmUhyTZXDHjCkwZSd4aCBw9keudsGManpEFsWtEghXQCw9MXaEQS4OVz4LiTiuDwJZfB/KX6fqvKIcbVGWTTZ3gKuo2UZkZ1HXdfbdThhvVZ9MrALoUG/r47B+ktjQ+cT/G2caiULr5Fx2DZConfXOpWskdkkLuqmJ1NiD7w5E+CVM5wLUSoSvNt2LHkkXFYRRbYD6vN6+LVNoeHfC8tIN0F/yF+qyWUieHBof7TgcCLUMfGjBlkKgXnCLOC/R87lkKxZFjR3gDTPkSrvOO7GI3/mbkNECGPs73ih2R024NpTsn++iQHvrDtSei6cI5YOlhn0ajk03lIDQWnKJyz9U79NUZEIg5E1GKgD+rlrEbbMmYlsewimTLWwp0H03z6gKgGwyBohyR3Qsbis0BZBqBXHkJW6y0tMdQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1de55e18-ae54-4776-eaec-08dee89e00cf X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:25.0571 (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: MQUCVMzPNz50wJOnrahm9QPSRR8czimqwBdjqXUTKkQ599ZRWY0YMCMEn5hRRsCRSW/kx/BAoNK+YKW4tA198Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF2FC05F2F4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Authority-Analysis: v=2.4 cv=TN51jVla c=1 sm=1 tr=0 ts=6a61e0d9 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=yPCof4ZbAAAA:8 a=4WwWyauO2_0H2zdGQVkA:9 X-Proofpoint-GUID: ZAP3vzPiyrKAO2uTLoQI8KZMWN7FHOOY X-Proofpoint-ORIG-GUID: ZAP3vzPiyrKAO2uTLoQI8KZMWN7FHOOY X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX7GmF4Gv28ThY jvSt0yQh/FyzAe4uRttdYa4cf2nbZROsDRh0TKlvmuXVQl06yfiaKRb2QGmZuXazXIttG2FMf2p WXsyTc3vqlouicpL/RTwohQflLUKYcHKWazn9CO2UXE3T7bkekK5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX5vTFqpV4XQUl uc5DMx4s2RyDpvpzFP97B8/NL9c1i5slyXiDjdGQa3diFnH2AH7sJznm2evtL2AGOSH2NEqjjoz eUVNszTgLrbgXJfmF/EVYD4F+EtmL43TBcDoBlv6KVz3+bdKFoEyVrdqZs6fd/h+M+r/Ob9PA0P FatrJr8mdNSmjs+onDockL/a453/RIwp62mJBDqrBncBFr4HIcdtJuqhX1CRb0XcENbCFsUw1q/ /nJmP8HEb/48O6JgqVPSeUMpkSgMhJMx+i5cDjBShvWeUr4DDv1o6WXSfVgmTVtvJuqp186M7va b35p7DwLUFMCij/tcXTP5Qp9bmv2WXsmR90u3c4qxEzrc+27feoXkhL9YVxJUOXpnUi7kmRaR6y wKZNudVJj0liOGpuXrvfp2wFEpFoCliFJz6lYerbfvJnqRHXM3V6exvW5aHiGtVX3TAE7R/gtKU BXK2iT8I0aLRRdH79BQ== Content-Type: text/plain; charset="utf-8" From: John Garry Set multipath disk attr groups, which includes delayed disk removal and everything from mpath_attr_group. Signed-off-by: John Garry --- drivers/scsi/sd.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 242a15bc2c5bb..36c745cbb2619 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4006,6 +4006,42 @@ static int sd_format_disk_name(char *prefix, int ind= ex, char *buf, int buflen) return 0; } =20 +static ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct mpath_head *mpath_head =3D mpath_bd_device_to_head(dev); + + return mpath_delayed_removal_secs_store(mpath_head, buf, count); +} + +static ssize_t sd_mpath_device_delayed_removal_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct mpath_head *mpath_head =3D mpath_bd_device_to_head(dev); + + return mpath_delayed_removal_secs_show(mpath_head, buf); +} + +static DEVICE_ATTR(delayed_removal_secs, S_IRUGO | S_IWUSR, + sd_mpath_device_delayed_removal_show, + sd_mpath_device_delayed_removal_store); + +static struct attribute *sd_mpath_disk_attrs[] =3D { + &dev_attr_delayed_removal_secs.attr, + NULL +}; + +static const struct attribute_group sd_mpath_disk_attr_group =3D { + .attrs =3D sd_mpath_disk_attrs, +}; + +__maybe_unused +static const struct attribute_group *sd_mpath_disk_attr_groups[] =3D { + &sd_mpath_disk_attr_group, + &mpath_attr_group, + NULL +}; + /** * sd_probe - called during driver initialization and whenever a * new scsi device is attached to the system. It is called once --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 BDEE1439F82; Thu, 23 Jul 2026 09:38:28 +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=1784799512; cv=fail; b=bcIXlCqJ4zOTTThHdea28959risbM8dU6DUbYrbXVEAjUMh3EfncfyVZ5g9h7MJjV1tLIAG6qNTozcdqGw8YewyzxUcZ2GlHBOq72j7E2wZn6OX71VdvI6ex2G1QXnHfbS5LSU5nuR3MX0UVB8/dBzxi8s2+q0Rtctf/aqPMHF8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799512; c=relaxed/simple; bh=4ms7gusfmKjaRwstgZmMbmMhH5/gdUUz+ieMNPAS2CI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ni1cftXJzPQtBSDmZ5Tr69LLpGjHkXr5sthGv6eZINCbXQp+gPZq5EFnaj9vtE6UPlx3/PgpN+OLxKeX5AqrIZEEissUuENOffOrPECeddZngXfAYdU+r8vxfwwsd6zZkylNuviQ3sGfSFs1HzLi5IS54o27qZeTc1nDyMKL9ss= 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=Ft1sjOy4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=GtDhBCTk; 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="Ft1sjOy4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="GtDhBCTk" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N2n7R3080922; Thu, 23 Jul 2026 09:37:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=TeJxKQoaid6p6FJTPHWcgjY0S0LvIMV1MF0S61Is/HU=; b= Ft1sjOy4uXEzrn/zt5vD78FvFS9M2DnYEYZhVmM66Idh0+XnCmr/XJUIRqeNFVc1 80Eq0Wim16OaMbYRn4XLmNFC+a7j1lNpn2xq/5e2vjbWSvpAOGwlysDPVw6yAw6R tm5FW6zx9JWnmhWNj9o0A4kSelQDeIbQvncMCXibfwTU6UfxmLLJFOe9hHiLM59g MzyCRHx43gC2LTZo4w30YjxbK5ZJGFg4kQ82hEOIcbpLUlFz3hjsv1emr/N68Cla eoe4RyS0nWvEjXTLTe3hazQdxkvYYUBh6nUKOyGSsvUi4NkzA03da/dQOOrk/Uu9 uZcm+M8lsMbGRq/2H5LkOA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1sqpqd5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:31 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVCG010595; Thu, 23 Jul 2026 09:37:30 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010070.outbound.protection.outlook.com [52.101.56.70]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxsdeua-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:30 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AvwUxfprmtaKx4yjY5vglfc3fQRhmZ6VU0S3bkVEzVv3SUSYPbmo3oa9aRwdmBPe3iSOStt/ui8VVf6oScCjEXYm9z9FLuCT8QT1ohpelR0vIwd9d2zaZWl/I8kbhYqrpIdhmMdxe3iHyvUbEeNZhGvSWYeLRrf5exOLZ6ajLIFDSATBl99pcn5b2bv829ZS7kKC/B28VEXLR7st2Q/lGKYdX/i6BTOIkeBWr82Kzz0zfWnawhkXGvQO0BVQ2fB4r9cFDXeQ5xDNHg4J0R6Uh9mFPwK26D5eCjq0JZi2W98OJ8XRXHjvSpYjZiHU2alDBkagyF3dbFwRcG4zJHmcoA== 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=TeJxKQoaid6p6FJTPHWcgjY0S0LvIMV1MF0S61Is/HU=; b=YbMHfl0msJfmhqzPLYD1+T4x/p+bDQ/gMJPF228n7ryoSpV0ych96MrSXT5jbPh0WzYeBkXSPGI51lsOIfsncEPK6Flf5sn7jgKDTrq6M8cJEIk3NAGjaalJwO19c8jyMTEfYIz7gwke2DrSlaJsxQJR9tBENVAl/L6B2WDQGXgxdvPMj9LBCykM6P7KaEQij6Jdgnbo8o/5edDcSzFHjTGdAUfrS4cxyYB/B80P0++b/qMuIUjl41tbPu9qIG+G4H7QQmgkwxnb4AfbOp8hgLPLNcteTCmlP8+C4lr5Xlo0E7PCKHMBl3kCQt9rLHHGRO4+kqeAhuEIm4FJ310vuw== 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=TeJxKQoaid6p6FJTPHWcgjY0S0LvIMV1MF0S61Is/HU=; b=GtDhBCTk4qo0RNFq/7kkV1nYAg6AWNEpfY1ZdMB4T7hETp11ZfvdfkrtLm995FhpYIvneGdDJJGoEhCrvbxpubxBr2q8xRz4v+22GizAacuj6Q/1Dq0Fit+fW2Ro34Zvjn0kZaPe0sNajEFpGqIDCd3EFpM7M3paAZ+7jimMEyw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ0PR10MB5672.namprd10.prod.outlook.com (2603:10b6:a03:3ef::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:26 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:26 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 25/28] scsi: sd: support multipath disk Date: Thu, 23 Jul 2026 09:36:23 +0000 Message-ID: <20260723093627.2327456-26-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR11CA0018.namprd11.prod.outlook.com (2603:10b6:610:54::28) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SJ0PR10MB5672:EE_ X-MS-Office365-Filtering-Correlation-Id: 164363fc-e30d-467c-b9e6-08dee89e018c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|20046099003|10063799003|18002099003|22082099003|6133799003|5023799004|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: iNWsOF8XlfFkwBgX8GC+h0rLSb0Kv4CHmEZDScJYIqTbir7u8rzSnlXLXKcBmjDXigIvgjDFX0Xf3ArNRWlZ65ilHERWkTfWp08/59cRln3lFblIAxSWHFyHUNsBkw6yLU2G9VLIsvE+Skel9YKsQR2xIXe4it/mvJY3tDXnLw9vItQS3x1AGW2BV6hCflCC5o6rzaXSM8zOuE7S5otsxAbPy5wJDRjJ1jqUA6ijl3FR6fGrTIMPIFYIz4dc3ChJq3sUgiJVURzMY24QXauClFizvKZhh+CuWNr0noO8rEbIPAXwbMqnBqriAfcN1cwMzdIDhN1Bzbs7Kd1VG01UbSYQwCTwqNica5pc/vbqEO6GPGR1cJt/jKHwfPmLie/ccHkDHtu/FpLVNazGzKLJ6ZDUeoWJzxjJtgcm5FBMpAnN558fLwH7O8bHzGDESUncBnwl2YNKg7jVn1KwCsvLZ84jIh3eKkZvEpD1s8jvDWj2JPZT1bV1mmkQmky7HePVeEdXNRvWYxYe54WhOi8imNU3GRMzMWZ2txZ64SiFdBuUaXt2+Rb76vVD5qmwYO1ojTo8lDYfQyeob9JyStXurOgFKV+FHGgZyzpyAsyVpuN4VE5OrWx2Rei1YmOJUbvI2hHOOAQEHqP29CJV501yS8Y+1AtsLUuEp1E9UYpi0kk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(20046099003)(10063799003)(18002099003)(22082099003)(6133799003)(5023799004)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eASmiBBGNG64gKRwfaElXWoYDNiTYLYzkGDq3uOsl1p5gsYd8wTS1fG0d5ST?= =?us-ascii?Q?X01rxwc1/SA930fDYcD4AeE6RsnAhv/8BdkqJI1uR9NwKgPKZj3Sr/b8mFIm?= =?us-ascii?Q?JjBdVv+YtUnASRcv475JxNkMB9HkD8VvuzdXlrZJ0oPUo77rKq9Z/d26+/IH?= =?us-ascii?Q?Av0u+zYqMjYeqGjhRZpaGY3AENzZciea0okaZFJafz8Lh0z69nj29pCA8faF?= =?us-ascii?Q?Rn9p/vt4q9KHA8btwUBhni744Gikhq5c7wIsS5WRMfp7Eu3GzQE9EKx8zlav?= =?us-ascii?Q?mi3XVo03+gB/WakcXE1CzV5IcpYAv2Y4LJwAMZOWismmbaHqEJzREFmrd2Jo?= =?us-ascii?Q?Rehvq5sKDkr/pgmMKWtNr77/cpMIKzWTawmVz6Y+oRyBo+8XS5zNi5zAQfvU?= =?us-ascii?Q?Qwgp7hwJ7y/IoixHpGjOe3UGHb+I9ZmsIiLNBxeO6iGyhtDhaRpfvbj14EhQ?= =?us-ascii?Q?hEkDEouNLzXwMEhE8jCJ2yDUp+yeZiMklGFebe9o0elDG5xynVp9ba46cber?= =?us-ascii?Q?X5SiucFJ01OstLT4pGcmj77adWrECFQEsWZ9CbSKfRSxbCGoyejdHBYUF8F0?= =?us-ascii?Q?DOC0HHkDNdeNqj1BVht4gO6X2uLiw7Ww8rTqYhV3bpy7EcpS4SPdLd+Qoz6U?= =?us-ascii?Q?6SUcGv2k4IXZtHd1zbygv3kIz70WsqlIe1RvAWFSWF+XL1h0j2pzdJ5puQ1y?= =?us-ascii?Q?pANo0S2RXJZKH5ZsMar1NbqBtDjeu68Bx3LYJb4Mu1UYdXF4+DoiHVcqM8Lk?= =?us-ascii?Q?/VTsnQ57RTW6F1aDGmqDbm7Ae/QObObU30yWQ78R0uXG/RXFEpD+Ak5rQQvF?= =?us-ascii?Q?GqVpnSghGMH7uy6+idIcf8QNQO8C2Hi/YhJTZnZ0fqrxA8s+OXZWo+TiA8UX?= =?us-ascii?Q?SZSv3HhIajqARqOrDIIexVoaqZ4a/tbhVkSaTtc1Cnb7AuIgF01q7/5BdkOX?= =?us-ascii?Q?C9ZlLyOkJEAQIVW7Fxt3UxTrRHQnsQsprLx9fc2dJgRy9QmwegMYp04Je29d?= =?us-ascii?Q?bHYlqzYFV/DBD5BA86dtNN+tQI6t4ntB/Fzkzd6sejL8M8IoCNeT90Uq0WUi?= =?us-ascii?Q?EqAq8GzTsZ7r7STaRdgnxuivAdOCSq555IK1IP5JVgVeatbnKMwMfB5fIbbM?= =?us-ascii?Q?A7EY9fWe7IGopJFq0e4lp+iB2emipqv/pc/iHIetijEJM+hufHo7DDP+h+y0?= =?us-ascii?Q?goSeX5G7raY6QcOebJbVis4iuA/AWmHlE7d3XyNYzDKEGOVNeQ6Je7XBxnYj?= =?us-ascii?Q?LsOV0fX+B/m9YuUURRDRLr/HjknlhRYuwChqsoK0hO4EgUDSete4e2XObSIj?= =?us-ascii?Q?FKFmeyCpsS6BqsywrbyslnfV5RrEXjI6SPf0/rSzSBDw48H9KJikiCgZ4JA0?= =?us-ascii?Q?nHWzLw1XnWKe/2lcLLIw7ezwgK3ATxdUXCCL/cOuldgsVKjcSEcTKkhgyF2D?= =?us-ascii?Q?wgSFgKZ0+OI5XMNg/IklblP4dkqOUyS0zYPyLbXVpkx09ZcwNZY8fxFWe03U?= =?us-ascii?Q?yC+1afzefeq3QKWlq3kZYaBMPyXFPGs9XE6+x0lyL9MZr9TLzIDQlSiTsMD5?= =?us-ascii?Q?LhnlRlqI4CMOVL8Sm5gk4kcS4zda7zUPe8Q3+juzOS544wRgtZOy1XuZXYP1?= =?us-ascii?Q?rDM7d0JApJLHMbkDi6eRtAhD9zznKX4RPYGUi3U05sDLIrJcYkLn8YuU2hDE?= =?us-ascii?Q?tt4RtsxS0VyRDfi8Q0P06xIjusl9rlz4aBd86ILf5wPgCBsr55lfZW52rquo?= =?us-ascii?Q?lGTazr3WoQWFi9lI+zEUn4pzeswiW/A=3D?= X-Exchange-RoutingPolicyChecked: QxfwMmAeuTOemvHyWzSSMbQIXbZTgRZfWNvWKPwDg5Zf50OnqNHoVHsiz/6VjQAwghG97bLqRu47unFwJi6GN55dwkClf1FK/ZDYmIKkcRxpNetAlshCxUCyjUENqBC7FZxjGE6H83JKOzqYwideYi6JTjATpVoF95UgGlWgnmQR5hEgN6ZhG0/Ummx87TDWPP7BdVsChH1+CngLn2UNastMoWijek7op/SuiorUffoIqR2c3jdmJ7cBGizMiE1BKcD3Lvhv4cQ26odfktvlg15b+ve2XeJxYK1NIVMgP/YXHYSGU9zvgeUHsmu3f9WHoBvZzS6579761axMUvWTZA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 3pQ2/YAoHNYgJBTWHHEzbZGkMWcBmMa+SMsdYlxLDU8dHixqD2dbfyPq3FzfmDjpk/d7M5TPmWqn7wWKXq7MS7IFFXfTihHLyn7Di8jqEnpgyPjAKax2hzrYM/NpMqO8VJedpJHiIuLAePx1C/JMpG1u4iVnfl59FrMJ4gFujWPCDnl1AnPqu49+xN5W8iFJFin1hp/MB47acgmsyF09/agZpCnLIv7XpnSqttn6pUmvqz6P9ZbF9miM5FP5P0xDgjkde1C8u1QLLPMKiUs5npPgjBkLc+RdSEFxH1b3wamoaX+k8V/Gmt1vk0CU6yu/rmEy3RsCqNHJtc80NGdpG8BJ6VzC3QrrdR0S9TCePA6qB8ou6efJkgUFBIqvr+X1J/aqpmivC6yXffA8+vHNv+D6/ibjg1rjNQhvkNS0BVrggHpQ5mmwkEbghAC0ObPjNbpW3CQ6BytdYVjLRw+/d3y0aVI6GyOkRhT5w+b6AGSjazZtSJ5/ee3URdTYxujl3uXL8ZlyqpV8Y8/NDTD/n3Ixv2bRLWuf6WmagmkGdFrIXPFtAUYGzTXRIqTfemGV1RK/UjKZMbaMMrQKVFccsIxbUKYJUnsLqZg2+v6t4lg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 164363fc-e30d-467c-b9e6-08dee89e018c X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:26.3034 (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: DlBbsTDqq++bp+n4ykQda71Pgs/2iINgDKobqKsnsAIhbg/89sqVn/16A7VyTUe2eBWUz0AbcynP1yfaJ47JMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB5672 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-ORIG-GUID: BArE5DTmzRXxiApczFu_OOifDIaoDD-M X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX3BICzyrYOKnj kMUrIBY+K2WfqaQPRdQY4upYlNqzJAEYzL/GkiPFOzXo9BPzU99FBzRclbnjXSoWw0g0K0fjn3A TVyszV2JtRpdHOHtjWV+wDEAixXPbUOY3xWQJ7gzNVdAcMikEF3BM2a3iuFiLb2nY9umoNoi5E/ gUW8qzmfp1QVMCY6ON3V1y50YTgolYWCcSJmjSUEfmTQiWtemZHQqfMmEwG+2f/GOpncf1y1BBg rcCwX88CsawexDlzSafkziPRF3FnD79sroYVY57+OpV7xrYhq1TNuAU0qYszYaIoUQhpZ2+yozF CDy3Pf2slQ+fuXAoT+KS0pw3kP9M5bYFRbDQj4Skgxryeq0Vg5VQFqOacFRPPHS4fuhCvwW3Qwf bwE1v2Sw8a1iclXRlRef6UIOhsY8ALbE97Kj7f8A/Z7nxVn0U623WmZdZcs+zrqfqcGEk5VeeCJ eZBQ33ddJYaVvUZYWq/8PyZHPV61TuJRmU3tdkjM= X-Authority-Analysis: v=2.4 cv=auyCzyZV c=1 sm=1 tr=0 ts=6a61e0db b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=UnEsLBAWqG5TZJypXWwA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12115 X-Proofpoint-GUID: BArE5DTmzRXxiApczFu_OOifDIaoDD-M X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX5FeUAA7Zqw3a ARQ9qtHIZTFD/QRPQFJSFiUu/sVqNdQ9Pd5+UgSnW5Fb/me4kvSy/Aa3fkV3h262GsZBgzeLFGt tiNIrNRqlNlB+LHCuASCLq2LG5tK4sUci9svgAHvW7pKvSyqowK0 Content-Type: text/plain; charset="utf-8" From: John Garry Add support to attach a multipath disk. We still allocate the gendisk per path, and this is required for the per-path submission. However, those gendisks are marked as hidden. Those disks are named sdX:Y, where X is the multipath disk index and Y is the per-path index. A global list of sd_mpath_disks is kept for matching scsi_device's. The multipath gendisk has the name and disk->major/minor set to minic a scsi_disk. The following is an example of relevant scsi_disk and block sysfs directories: $ ls -l /sys/block/ | grep sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 sdc -> ../devices/= virtual/scsi_mpath_disk/0/sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 sdc:0 -> ../device= s/platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0 lrwxrwxrwx 1 root root 0 Feb 24 16:02 sdc:1 -> ../device= s/platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1 $ ls -l /sys/class/scsi_mpath_disk/scsi_mpath_disk0/ total 0 drwxr-xr-x 2 root root 0 Feb 24 16:03 power drwxr-xr-x 11 root root 0 Feb 24 16:01 sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 subsystem -> ../..= /../../class/scsi_mpath_disk -rw-r--r-- 1 root root 4096 Feb 24 16:01 uevent $ ls -l /sys/class/scsi_mpath_disk/scsi_mpath_disk0/sdc/multipath/ total 0 lrwxrwxrwx 1 root root 0 Feb 24 16:20 sdc:0 -> ../../../= ../../platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0 lrwxrwxrwx 1 root root 0 Feb 24 16:20 sdc:1 -> ../../../= ../../platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1 $ ls -l /dev/sdc* brw-rw---- 1 root disk 8, 32 Feb 24 16:01 /dev/sdc brw-rw---- 1 root disk 8, 33 Feb 24 16:01 /dev/sdc1 brw-rw---- 1 root disk 8, 34 Feb 24 16:01 /dev/sdc2 $ lsblk /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sdc 8:32 0 600M 0 disk |-sdc1 8:33 0 9M 0 part `-sdc2 8:34 0 568M 0 part Signed-off-by: John Garry --- drivers/scsi/sd.c | 425 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 405 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 36c745cbb2619..d5a37b1b312c3 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -115,12 +115,30 @@ static mempool_t *sd_large_page_pool; static atomic_t sd_large_page_pool_users =3D ATOMIC_INIT(0); static struct lock_class_key sd_bio_compl_lkclass; #ifdef CONFIG_SCSI_MULTIPATH +static LIST_HEAD(sd_mpath_disks_list); +static DEFINE_MUTEX(sd_mpath_disks_lock); + struct sd_mpath_disk { + struct device dev; + int disk_index; + int disk_count; + struct list_head entry; struct scsi_mpath_head *scsi_mpath_head; }; =20 static void sd_mpath_disk_release(struct device *dev) { + struct sd_mpath_disk *sd_mpath_disk =3D + container_of(dev, struct sd_mpath_disk, dev); + struct scsi_mpath_head *scsi_mpath_head =3D + sd_mpath_disk->scsi_mpath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + mpath_put_disk(mpath_head); + ida_free(&sd_index_ida, sd_mpath_disk->disk_index); + scsi_mpath_put_head(scsi_mpath_head); + + kfree(sd_mpath_disk); } =20 static const struct class sd_mpath_disk_class =3D { @@ -817,7 +835,8 @@ static void scsi_disk_release(struct device *dev) { struct scsi_disk *sdkp =3D to_scsi_disk(dev); =20 - ida_free(&sd_index_ida, sdkp->index); + if (sdkp->index >=3D 0) + ida_free(&sd_index_ida, sdkp->index); put_device(&sdkp->device->sdev_gendev); free_opal_dev(sdkp->opal_dev); =20 @@ -4006,6 +4025,91 @@ static int sd_format_disk_name(char *prefix, int ind= ex, char *buf, int buflen) return 0; } =20 +#ifdef CONFIG_SCSI_MULTIPATH +static int sd_mpath_revalidate_head(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_mpath_head *scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_hea= d; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct gendisk *disk =3D mpath_head->disk; + struct queue_limits *sdkp_lim =3D &sdkp->disk->queue->limits; + struct queue_limits lim; + unsigned int memflags; + int ret; + + lim =3D queue_limits_start_update(disk->queue); + memflags =3D blk_mq_freeze_queue(disk->queue); + + lim.logical_block_size =3D sdkp_lim->logical_block_size; + lim.physical_block_size =3D sdkp_lim->physical_block_size; + lim.io_min =3D sdkp_lim->io_min; + lim.io_opt =3D sdkp_lim->io_opt; + + queue_limits_stack_bdev(&lim, sdkp->disk->part0, 0, + disk->disk_name); + + /* TODO: setup integrity limits */ + lim.max_write_streams =3D sdkp_lim->max_write_streams; + lim.write_stream_granularity =3D sdkp_lim->write_stream_granularity; + ret =3D queue_limits_commit_update(disk->queue, &lim); + + set_capacity_and_notify(disk, get_capacity(sdkp->disk)); + + blk_mq_unfreeze_queue(disk->queue, memflags); + + return ret; +} +static int sd_mpath_get_disk(struct sd_mpath_disk *sd_mpath_disk) +{ + if (!get_device(&sd_mpath_disk->dev)) + return -ENXIO; + return 0; +} + +static void sd_mpath_put_disk(struct sd_mpath_disk *sd_mpath_disk) +{ + put_device(&sd_mpath_disk->dev); +} + +static struct sd_mpath_disk *sd_mpath_find_disk( + struct scsi_mpath_head *scsi_mpath_head) +{ + struct sd_mpath_disk *sd_mpath_disk; + int ret; + + list_for_each_entry(sd_mpath_disk, &sd_mpath_disks_list, entry) { + ret =3D sd_mpath_get_disk(sd_mpath_disk); + if (ret) + continue; + + if (sd_mpath_disk->scsi_mpath_head =3D=3D scsi_mpath_head) + return sd_mpath_disk; + + sd_mpath_put_disk(sd_mpath_disk); + } + + return NULL; +} + +static int sd_mpath_add_disk(struct scsi_disk *sdkp) +{ + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_mpath_head *scsi_mpath_head =3D + sd_mpath_disk->scsi_mpath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + int ret; + + ret =3D mpath_add_device(mpath_device, mpath_head, sdkp->disk, + dev_to_node(sdp->host->dma_dev), &sdp->host->mpath_nr_active); + if (ret) + return ret; + mpath_device_set_live(mpath_device); + return 0; +} + static ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -4035,13 +4139,258 @@ static const struct attribute_group sd_mpath_disk_= attr_group =3D { .attrs =3D sd_mpath_disk_attrs, }; =20 -__maybe_unused static const struct attribute_group *sd_mpath_disk_attr_groups[] =3D { &sd_mpath_disk_attr_group, &mpath_attr_group, NULL }; =20 +static int sd_mpath_probe(struct scsi_disk *sdkp) +{ + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct device *dma_dev =3D sdp->host->dma_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + char disk_name[DISK_NAME_LEN - 2]; + struct queue_limits lim; + struct gendisk *disk; + int error; + + /* + * sd_mpath_disks_list is kept locked if no disk found. + * Otherwise an extra reference is taken. + */ + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (sd_mpath_disk) { + error =3D sized_strscpy(disk_name, mpath_head->disk->disk_name, + sizeof(disk_name)); + if (error < 0) { + /* + * Should not happen as would fail for the same when + * allocating the sd_mpath_disk + */ + sd_mpath_put_disk(sd_mpath_disk); + mutex_unlock(&sd_mpath_disks_lock); + return error; + } + sd_mpath_disk->disk_count++; + mutex_unlock(&sd_mpath_disks_lock); + + goto found; + } + + sd_mpath_disk =3D kzalloc(sizeof(*sd_mpath_disk), GFP_KERNEL); + if (!sd_mpath_disk) { + error =3D -ENOMEM; + goto out_unlock; + } + + sd_mpath_disk->scsi_mpath_head =3D scsi_mpath_head; + device_initialize(&sd_mpath_disk->dev); + sd_mpath_disk->dev.class =3D &sd_mpath_disk_class; + + blk_set_stacking_limits(&lim); + lim.dma_alignment =3D 3; + lim.features |=3D BLK_FEAT_IO_STAT | BLK_FEAT_NOWAIT | + BLK_FEAT_POLL | BLK_FEAT_ATOMIC_WRITES; + + mpath_head->parent =3D &sd_mpath_disk->dev; + mpath_head->drv_module =3D THIS_MODULE; + mpath_head->disk_groups =3D sd_mpath_disk_attr_groups; + error =3D mpath_alloc_head_disk(mpath_head, &lim, + dev_to_node(dma_dev)); + if (error) + goto out_free_disk; + disk =3D mpath_head->disk; + + error =3D ida_alloc(&sd_index_ida, GFP_KERNEL); + if (error < 0) { + sdev_printk(KERN_WARNING, sdp, "sd_mpath_probe: memory exhausted.\n"); + goto out_put_disk; + } + sd_mpath_disk->disk_index =3D error; + error =3D sd_format_disk_name("sd", sd_mpath_disk->disk_index, + disk->disk_name, DISK_NAME_LEN); + if (error) + goto out_free_index; + + error =3D sized_strscpy(disk_name, mpath_head->disk->disk_name, + sizeof(disk_name)); + if (error < 0) + goto out_free_index; + + /* undone in sd_mpath_disk_release() */ + scsi_mpath_get_head(scsi_mpath_head); + + error =3D dev_set_name(&sd_mpath_disk->dev, "scsi_mpath_disk%d", + scsi_mpath_head->index); + if (error) { + put_device(&sd_mpath_disk->dev); + goto out_unlock; + } + + error =3D device_add(&sd_mpath_disk->dev); + if (error) { + put_device(&sd_mpath_disk->dev); + goto out_unlock; + } + + list_add_tail(&sd_mpath_disk->entry, &sd_mpath_disks_list); + disk->major =3D sd_major((sd_mpath_disk->disk_index & 0xf0) >> 4); + disk->first_minor =3D ((sd_mpath_disk->disk_index & 0xf) << 4) | + (sd_mpath_disk->disk_index & 0xfff00); + disk->minors =3D SD_MINORS; + + sd_mpath_disk->disk_count =3D 1; + mutex_unlock(&sd_mpath_disks_lock); +found: + sdkp->sd_mpath_disk =3D sd_mpath_disk; + sdkp->disk->flags |=3D GENHD_FL_HIDDEN; + snprintf(sdkp->disk->disk_name, DISK_NAME_LEN, "%s:%d", + disk_name, scsi_mpath_dev->index); + + sdkp->index =3D -1; + return 0; + +out_free_index: + ida_free(&sd_index_ida, sd_mpath_disk->disk_index); +out_put_disk: + mpath_put_disk(mpath_head); +out_free_disk: + kfree(sd_mpath_disk); +out_unlock: + mutex_unlock(&sd_mpath_disks_lock); + return error; +} + +static void sd_mpath_remove(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + struct scsi_mpath_head *scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_hea= d; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + bool remove =3D false; + + mpath_synchronize(mpath_head); + + if (mpath_clear_current_path(mpath_device)) + mpath_synchronize(mpath_head); + + mpath_delete_device(mpath_device); + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk->disk_count--; + if (!sd_mpath_disk->disk_count && mpath_can_remove_head(mpath_head)) { + list_del_init(&sd_mpath_disk->entry); + remove =3D true; + } + mutex_unlock(&sd_mpath_disks_lock); + mpath_remove_sysfs_link(mpath_device); + mpath_device->disk =3D NULL; + + if (remove) { + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + } + sd_mpath_put_disk(sd_mpath_disk); +} + +static void sd_mpath_remove_head(struct scsi_mpath_head *scsi_mpath_head) +{ + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct device *dev =3D &scsi_mpath_head->dev; + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (!sd_mpath_disk) { + dev_warn(dev, "could not find mpath disk\n"); + mutex_unlock(&sd_mpath_disks_lock); + return; + } + + if (sd_mpath_disk->disk_count) { + dev_dbg(dev, "non-zero multipath disk count in removal\n"); + sd_mpath_put_disk(sd_mpath_disk); + mutex_unlock(&sd_mpath_disks_lock); + return; + } + + list_del_init(&sd_mpath_disk->entry); + mutex_unlock(&sd_mpath_disks_lock); + + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + sd_mpath_put_disk(sd_mpath_disk); +} + +/* + * Always calls for a failed probe, so we need to handle that some structu= res + * have not been setup. + */ +static void sd_mpath_fail_probe(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_head *scsi_mpath_head; + struct mpath_head *mpath_head; + bool remove =3D false; + + if (!sd_mpath_disk) + return; + + scsi_mpath_dev =3D sdp->scsi_mpath_dev; + mpath_device =3D &scsi_mpath_dev->mpath_device; + scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_head; + mpath_head =3D &scsi_mpath_head->mpath_head; + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk->disk_count--; + if (!sd_mpath_disk->disk_count) { + list_del_init(&sd_mpath_disk->entry); + remove =3D true; + } + mutex_unlock(&sd_mpath_disks_lock); + mpath_device->disk =3D NULL; + + if (remove) { + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + } + sd_mpath_put_disk(sd_mpath_disk); +} + +#else /* CONFIG_SCSI_MULTIPATH */ +static int sd_mpath_probe(struct scsi_disk *sdkp) +{ + return 0; +} +static void sd_mpath_remove(struct scsi_disk *sdkp) +{ + return; +} +static void sd_mpath_fail_probe(struct scsi_disk *sdkp) +{ + +} +static int sd_mpath_revalidate_head(struct scsi_disk *sdkp) +{ + return 0; +} +static int sd_mpath_add_disk(struct scsi_disk *sdkp) +{ + return 0; +} +#endif + /** * sd_probe - called during driver initialization and whenever a * new scsi device is attached to the system. It is called once @@ -4065,7 +4414,7 @@ static int sd_probe(struct scsi_device *sdp) struct device *dev =3D &sdp->sdev_gendev; struct scsi_disk *sdkp; struct gendisk *gd; - int index; + int index =3D -1; int error; =20 scsi_autopm_get_device(sdp); @@ -4094,22 +4443,33 @@ static int sd_probe(struct scsi_device *sdp) &sd_bio_compl_lkclass); if (!gd) goto out_free; + sdkp->disk =3D gd; + sdkp->device =3D sdp; =20 - index =3D ida_alloc(&sd_index_ida, GFP_KERNEL); - if (index < 0) { - sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n"); - goto out_put; - } + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_probe(sdkp); + if (error) + goto out_put; + } else { + index =3D ida_alloc(&sd_index_ida, GFP_KERNEL); + if (index < 0) { + sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n"); + goto out_put; + } =20 - error =3D sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN); - if (error) { - sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n"); - goto out_free_index; + error =3D sd_format_disk_name("sd", index, gd->disk_name, + DISK_NAME_LEN); + if (error) { + sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n"= ); + goto out_free_index; + } + sdkp->index =3D index; + + gd->major =3D sd_major((index & 0xf0) >> 4); + gd->first_minor =3D ((index & 0xf) << 4) | (index & 0xfff00); + gd->minors =3D SD_MINORS; } =20 - sdkp->device =3D sdp; - sdkp->disk =3D gd; - sdkp->index =3D index; sdkp->max_retries =3D SD_MAX_RETRIES; atomic_set(&sdkp->openers, 0); atomic_set(&sdkp->device->ioerr_cnt, 0); @@ -4129,6 +4489,7 @@ static int sd_probe(struct scsi_device *sdp) =20 error =3D device_add(&sdkp->disk_dev); if (error) { + sd_mpath_fail_probe(sdkp); put_device(&sdkp->disk_dev); put_disk(gd); goto out; @@ -4136,10 +4497,6 @@ static int sd_probe(struct scsi_device *sdp) =20 dev_set_drvdata(dev, sdkp); =20 - gd->major =3D sd_major((index & 0xf0) >> 4); - gd->first_minor =3D ((index & 0xf) << 4) | (index & 0xfff00); - gd->minors =3D SD_MINORS; - gd->fops =3D &sd_fops; gd->private_data =3D sdkp; =20 @@ -4158,11 +4515,18 @@ static int sd_probe(struct scsi_device *sdp) sd_revalidate_disk(gd); if (sdp->sector_size > PAGE_SIZE) { if (sd_large_pool_create()) { + sd_mpath_fail_probe(sdkp); error =3D -ENOMEM; goto out_free_index; } } =20 + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_revalidate_head(sdkp); + if (error) + sdev_printk(KERN_WARNING, sdp, "could not revalidate multipath limits\n= "); + } + if (sdp->removable) { gd->flags |=3D GENHD_FL_REMOVABLE; gd->events |=3D DISK_EVENT_MEDIA_CHANGE; @@ -4177,6 +4541,7 @@ static int sd_probe(struct scsi_device *sdp) =20 error =3D device_add_disk(dev, gd, NULL); if (error) { + sd_mpath_fail_probe(sdkp); device_unregister(&sdkp->disk_dev); put_disk(gd); if (sdp->sector_size > PAGE_SIZE) @@ -4184,6 +4549,19 @@ static int sd_probe(struct scsi_device *sdp) goto out; } =20 + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_add_disk(sdkp); + if (error) { + sd_mpath_fail_probe(sdkp); + device_del(&sdkp->disk_dev); + del_gendisk(sdkp->disk); + + put_disk(sdkp->disk); + if (sdp->sector_size > PAGE_SIZE) + sd_large_pool_destroy(); + goto out; + } + } if (sdkp->security) { sdkp->opal_dev =3D init_opal_dev(sdkp, &sd_sec_submit); if (sdkp->opal_dev) @@ -4197,7 +4575,8 @@ static int sd_probe(struct scsi_device *sdp) return 0; =20 out_free_index: - ida_free(&sd_index_ida, index); + if (index >=3D 0) + ida_free(&sd_index_ida, index); out_put: put_disk(gd); out_free: @@ -4325,6 +4704,9 @@ static void sd_remove(struct scsi_device *sdp) struct device *dev =3D &sdp->sdev_gendev; struct scsi_disk *sdkp =3D dev_get_drvdata(dev); =20 + if (sdp->scsi_mpath_dev) + sd_mpath_remove(sdkp); + scsi_autopm_get_device(sdkp->device); =20 device_del(&sdkp->disk_dev); @@ -4493,6 +4875,9 @@ static struct scsi_driver sd_template =3D { .resume =3D sd_resume, .init_command =3D sd_init_command, .uninit_command =3D sd_uninit_command, + #ifdef CONFIG_SCSI_MULTIPATH + .mpath_remove_head =3D sd_mpath_remove_head, + #endif .done =3D sd_done, .eh_action =3D sd_eh_action, .eh_reset =3D sd_eh_reset, --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 43F18439F9F; Thu, 23 Jul 2026 09:38:32 +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=1784799514; cv=fail; b=c3Oa5392BfKsqTUTxZqUpQenQcyL3h0DmQboQBf3n2MDg+JXifPzujdTc3dBTREW0aIi0m4yLJbsrCVedSjh9JMpxcpD9nm0NNV4LOAoASSS0W5ZgDXWTysKt/roqPN/FqJylFlMKCsw0WpfMkII67V+Lm+6npFzqQvYedEWWxQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799514; c=relaxed/simple; bh=pKmLfBGjiCMoYAz87+yhMiIdx4eBraDihe/ABGgHEwE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fsa1V//Jv++aAAnz0tlMsX8xvOCzLGFMvUOdlyJk00gnL+tEMAMCtBzCKOUVApW6K4WPG+wACMgiuyRoJwtGBjyfNDkWpHg9c40bKwFepqKZVJRep2LTEXVAhG/rLPsePb+6Cf/AHHUA5699Ni6OK1R3oqIJca/jGBnW9fp3EhM= 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=V8xAncYJ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=yUDCneqQ; 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="V8xAncYJ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="yUDCneqQ" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJti0Q3573969; Thu, 23 Jul 2026 09:37:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=K6r8D5Vd/iPH9Klu9jEIAaOBPPjMdBy9AyLVyegbo0U=; b= V8xAncYJqdZMN0DYweL4Q+wTe3hRJt4lGXI2twgQG6Ng6K1KlwuuOb2ejOLxlQu+ ZC9Ne6Ov2W8zb0Et5veYON9WvrVJlBB5+/Iyi03biGGZ2xvzNSn2uafp6VSjSXyK IlvCzGlP26dinKfR26bTCfBKHYqCUMOEJaXWVNb4H3ro0tGR3UHZp2zwDDndBqnC MgAcqbxho0bIj0cX2uVLIj4kzbLYw6nAxex7i8tjk8FK5gO1xSyAYAyjpXFJffYT 1mmp9pw0/Jztf/kwLA45j7v+PK4Q5+fxP+EspIg7ARDl3SYOo8hun17Gbtqh4fky KU8A04Deedcvfv+bFbujBw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1sqpqd9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:33 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9XVCH010595; Thu, 23 Jul 2026 09:37:30 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010070.outbound.protection.outlook.com [52.101.56.70]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxsdeua-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:30 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y6sgQODjFiQp2dF7XAwRyd6JYTDad0tnuSfNLeMoBn6dLEgoL0B8chthUqkqsij5UF7FQf0UiqWJJ4T5/DsRTxR7UCctCWz62TRyp+G5Idz9nbKR9Z5k57vQE6WoXNQdkJyhqE17m7qRdIfOMPJB2C3dmW4BmmHCuyvT1I63I+qYmVfXvbVH+I3a0qAT044C8ZeClXpqZeh4M9Q8DrvL0X6BvMz3LiUIG8mt6NICVzgDal7Ry/hwdzQTnvohMd5q53W9AgFxOGPEhY3ZFGXUxuzMHvEdo3F6jUCR6o1CwXAElbWblCzMGkS9jRzXYI9N0fT8rnOv2Jye+dvRkhHp3g== 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=K6r8D5Vd/iPH9Klu9jEIAaOBPPjMdBy9AyLVyegbo0U=; b=xEJlFViT4M6HOysjhCWbJ4EUbhlpKmdo7Iuf3rER+KyZFniKxAGHDkqzIziNuQ0vxr/JpftKx9DJoKZ/q3wnJuOjNeOkDK42kBlQeINoT0YZ17tdMpOfIaDWunWUFYNrpzIh+Jz5uqwp9kOzUh2ZkTJ6DR6xNHz8ajtqGWrIr5FYVCS6wbChzhygwrOD27snhSXYk9Hd8XiOhrBwZQn1yVY/CBRWm14daIOwZ67R0AeGDk+CEqfQfwqEXrjSlGWMNxU53NiUia5cU7wZGVnxIiMHw+DZ6ARlUZUAYN/khaNgG6DlFlaY2aFeYplfXWvHQN1CO91VmCz+gJijvHouSg== 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=K6r8D5Vd/iPH9Klu9jEIAaOBPPjMdBy9AyLVyegbo0U=; b=yUDCneqQejOU+MDMkM8epHznkxuq2Owls2o11gjHrKUmDlS3LE+alxUwXwvYcCwci1sGEkvE2FZAAr2yOw3S8ptcf3DejtpWsPEynYgoxFZhM73xP3BCr2YMSxeFgDJERP9MGE0CPtYuOcuF3Bmw48/oYLsZxupvK4DHikDME5E= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ0PR10MB5672.namprd10.prod.outlook.com (2603:10b6:a03:3ef::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:27 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:27 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 26/28] scsi: sd: add mpath_dev file Date: Thu, 23 Jul 2026 09:36:24 +0000 Message-ID: <20260723093627.2327456-27-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH3P220CA0017.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:1e8::22) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SJ0PR10MB5672:EE_ X-MS-Office365-Filtering-Correlation-Id: 05ffee78-e741-4f55-9683-08dee89e025d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|18002099003|22082099003|5023799004|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: ZjDwu9ECiAIMOKAh8KS3M9XsgLppG6MWWBVB6vCIDS7TYVjGSU/WSXEvYclfe4xp9qYNHnzjGMptiaZrr5X4hZvUmM8MgA7kjPfu/P/+VND/ZDCoBOsLCwnKc65fhjgEnlFbGgJqy1A1kavlUSRfm7o/qVhvg4/CzURrEiDcQVcy09Ya8FsFJnw7UMxhWp1yB5OPFa4PPNG2F0PlUgjyfVjiHHV1a0yVRl5o3jt+deCcNcWMgpI9u9c8Y/ZCLVScvdNzVKOgBMj/LWMGrsA/kEeaEPnI+vjr6Fv0/9klObs5MfeNy+zQESnwAzXcGb304Q+soeUDzTOFYXkcNTi0JX72QCOVyiF4EoIUq3pErBdfY+APRgE9z53MFKvtzTL6miq/MO5Eevxk20zWorFyUso+CtAr9cses7Gkfo2whGIovXhFsFbYf4XEy4eq8MYgsuvj9SqQOrMVCrUt564ANpeJOXubtU0VpvYVPm6lDAdAs1b6K5P/NBeP+qOF3dlZHGhedH2D4kuVI1PsAD9R5PJuWptDoZAS73XNir7blsrEoJ1dlCiecn74UqQH8H4jlkcxvIJRcIgNdLyoql7RJjCSuEeW9Doy3WAkm8jbcZUacTq7gDFerSO7gtVDFPIC0L/Qfjd7EJq9hhLBp/EepeMDFx+lOO4KECXPoRg3NPA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(18002099003)(22082099003)(5023799004)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?om997ooJlx+6vXiLnhK+jzp06gmLOt1ar7YlcKpQYoo4TYP99gSf9bRUMVXJ?= =?us-ascii?Q?3ml9r4s1D/PfI0Ko5mHGrTjMVE2acI2SUS49ZzAPuIkrqu0nvU/AkJ3YVqAG?= =?us-ascii?Q?e7nmY3VQ5eRgLGYuxYTZtrSvaUQLk7HZ6axGaU/t2p90m9/eqccvtzlydmsc?= =?us-ascii?Q?HKxRO/8yewxzYM6d12bxKCYx7GE8P4T5d0iM6yzlH+8Z8fVAcoqqrZhCSiRv?= =?us-ascii?Q?0MxWeeKjLZoRO5s6BKttLAEfiHCciIgi1mwRde5y2WSEVdXc/dC8wUxS5aVj?= =?us-ascii?Q?5BS8SsXk1nyy/u3N3q7nxtWne9sO08WAnyLAOAeVWpI8b36bn9uGqCLFGVEe?= =?us-ascii?Q?xVeFur7eTCarnq6OSA91CENqHTT44y6GMBRtxh49zLnykXSZjX85LRGqrlVJ?= =?us-ascii?Q?dl/Ru7WJk4EAHjsxoNXoMPTL8an9M5TE6po6+ahOcfcwuwSmb0Nff6VPAjSs?= =?us-ascii?Q?vHjltHlnsnsIaNfqPGo90kZpLvIXC9WbyvJ0NM46BsdsUnJf6qxKMTE4tlml?= =?us-ascii?Q?UShwTcnIi4dva1Vviw312zgLyajd64rKtPnrwFRmAyjFPkNzZyVL2RpUz3Oo?= =?us-ascii?Q?0mo2TIWPOdpFLOHVHhU8Ac/k0ahCjGwnbAWt78wDWxDQIYXUTNS5UG03S7Up?= =?us-ascii?Q?quAjiBoWYPA4EGnl+X7kgWucSucQ6lvH9Zcvkvg4jzssmfs204TanNQVA6Vi?= =?us-ascii?Q?XF0Ulgzm7ZsTirg2oFHefn2a4JVA2SGJV9NHjQRhxKxZgiSIkxwxODwHTQ0W?= =?us-ascii?Q?gRekYDllcvm6ZyhgfbQsRX39bDXtEtPK5/YldpEf0wVIPlx45EMSNcDg/bP5?= =?us-ascii?Q?i00zz2baxdnna8CqzTQbESRddssdn0C0MQYwkDbZxQYx+lH/PL5YOxBif7o1?= =?us-ascii?Q?nRXJq2b9Ubm/pZxFLrYB/Ou4VaxG2Ib1w3X/9rq7s5IeF7JzgBkPbCQIJdfh?= =?us-ascii?Q?MAUkgj8qvba7i/8J09ll8+5HZ8EVNaHJLIzGZEUx7E3C+LQAE1oNKDFUcHdd?= =?us-ascii?Q?pnH4/Dr20XJL/ICagHS2WCdR+U6vleRvZBfyTv33Cd5Jpzf32F48rF2iefsi?= =?us-ascii?Q?gnEtaPqdZtuVLxxMkZ2eBCPbwbtt5CbW+fLRgXKEeWg4JmWE+NxJ1ljJsMX1?= =?us-ascii?Q?m68ZA/9b9dKP60U4P450oEm7Xmfzel1XAH7lKzzQ3QZYfL0q/OAUelFTjr14?= =?us-ascii?Q?5BcxnsiUzKuK4shX9Bp5g7iJwZ11yhBKR/ixJcGziD/ZkeV0pDcZ6ksZ3hfs?= =?us-ascii?Q?PnXc78Zy4nfxhZVYYzVUcKIO6NrYGro4Crou4Ur6pkt1MCWB7+2WUICCJOtl?= =?us-ascii?Q?N6x2fYxVrlhGY5s9zfA0PuoP7BnbF59a+KJTnd50U5UXKXXoo/S2bOWMInKk?= =?us-ascii?Q?cFk/4u7ExksdwRrmKRSR/Osr7YQUAW12rYWayITHsyTIGDmT+4izpSpewbfo?= =?us-ascii?Q?YK18MWGDHSgiRZhz0sS+u6hIRMkxXSb7t7bFSe5slIFa47He6BntKxUdsEss?= =?us-ascii?Q?zdFiNF7R6xN0txtx2WXVmCjuefb+p3FHYaDmAHq4AFcvCpEqk+FcloQK2YT0?= =?us-ascii?Q?rj8kwEyTqX+1FDmmegWHerPoUlhnzP4dbtGMRbCk8lmLu0Syqtz+VzhazwB+?= =?us-ascii?Q?vEmDvfeowri6n0UtU1wF0EsE85z2/J/S6YfSExgeU+VGgdx+5LFQTu5uthD3?= =?us-ascii?Q?ZJX2CdipOZVFgLBDk2qCPKAWRi8lU8HvLpwGnEVbUL0sMK75F3wBJnEqaUlV?= =?us-ascii?Q?iY4qAVzuTNIs3ElUfsxINa6NAKnUAtI=3D?= X-Exchange-RoutingPolicyChecked: WLvTw9MIcMWOglV2dVlME7TS9g48jQjXM2LxFaK8XckRkbin59QPZ4953m3WbGI1QpM68NHZrb2/4CHXHChG0yHW6bgHaT+/5m0qKHhmxwVVQ7gmoqNYlwpiuAoG6NVQpZZmC7adVKZb0kmltmiCmUb7V+7OmdGhvttwTp1H7YnDDysm/Lvp7AZ5R48czsAhAoNe9pPBJQsOKWItI5bM+g0HxzEIRHpEHgJhiCt9FzNRs2Po50kEjR/ro7Ua8YFrlDyf8oAK1kJVFJIIil3kj/jlNsUrBIrQ35+2idZ6VDz+8nPLQfqfJXZ6v3CXEI4/qbb/SH/b/5gE0dsRPcheMQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: hAy7uOzZngDssQsSr8jx3B2U4zVFy5ZNr8AiFWdcqsSHno/5qtarDQWGJUkPvbyCwj5rmH1ZJRKorOgtS6PXoIFdRiO8MKej6hliHykY5M+XxjcfVItvQJ2jGnNFkdq6jdPVOtAkPt9/PkD6MDqF9OaS2d4tMzu7/kOl56bumaHA/n9CaVSaXUdwd+rYgqAYjfvwjTriHOGWi4UZxH/u9L0wvDtCyNBo0aximsmEz28A62WR25zG8ZJqHwRajX32iQxTUs3gCF1mjoRsOXQIaGmgyOhs+BHobr0umMU3syvthU9En3RWWO5zuRPmsRCKn8V6QHYkqHZ4+qGtXhYRQjNDBObNrr525k9Ki478bQcqYZ5kEyoVhIcyJDQVUbCrszk1ue0HWd980yY6OGCG9JcI4oZxhaheNLs+gcGQRg5zMkt2afPeCgs3HEC27Gr65krnWQ4LGu4b451qtTd94YkfyaMARfJ1C2WHLD657wG5cSBj8xQHsPqLEKAT3EyBwwDrrXNWz5rfMPvMSOdATKc8OpSYLCJzuWRJX/7fTqwxPXwqggOGQmfCJLMsVJa8xOjEa0H+lacOxKr/YARmUdBhEZJ+YKL3bsPA6ZVzS7s= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05ffee78-e741-4f55-9683-08dee89e025d X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:27.6692 (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: sRNz8YgvCCVhe7cmJgMrdGE7rFgkn8jmXdUqUZmyFj3e5j2UCg59oydGUrVAlrd0SmdV941SKG/Kfk0BlW9+1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB5672 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230094 X-Proofpoint-ORIG-GUID: SCOrUFtoavCMz7cNtbPfI1RGo3zHUTXi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX+vIV2IvF3RuB p53e1FdcRUpvT9pLKR7QooR4s7pgx84rnFsiQbdyq7j8QiFkHzhbSAzDg07L9jqvulBrvJuXa9d SSQqLqmXdMseNCbuTN62rHIF5S9VpQ0BEmgvXG6d47JgUqpXaYuvcwhwPk2c0i3KoCsuLDjeEzm XelLnEvQkxXiRsdoNkl0MLi6BPORnuWK8wTcFQCZwox1g1MYvSkbodA/2k7F7SHht70ANqaIwjd j8XbxfGrRhk4yvtceUdTNymeMChGcdk3pxy+fsNZNyUw+kTvCpRudg9Roki74ypx2MzQRVlGaeX pmGvTOeK73Ya3h4UYDsocwgVqgdEb2lLtgNzl32CMzi5H3apBrnUiOvhKGUGWoUVN4rMghYAVQF mbhKJC7SHA5c9lLolCXDs55jwchgCKHDmU+1xgEKy8zEKBOXYOfIxWfxYwrsXNxRvPME4zFFK63 iL6HX7z+2c6PYEfk3SLq0DMHjlcsDM6dOAab5thw= X-Authority-Analysis: v=2.4 cv=auyCzyZV c=1 sm=1 tr=0 ts=6a61e0dd b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=A6hY3BpGxKl4tX3xGd0A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12115 X-Proofpoint-GUID: SCOrUFtoavCMz7cNtbPfI1RGo3zHUTXi X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX/wHanCCRqhH2 IsVclS1TcLpFtLiCKz6nyaVbEXKX4igrit0OmeoHztvsNXQTss2QQ4jbv9/VuXRU6qpTVc/Ixz5 c/mSSIDLyoPqFfbnFsFj9eXAKoeLpUrRdBrSVIgZUuJa1fo0XGdU Content-Type: text/plain; charset="utf-8" Since per-path gendisk is hidden, we have no Add a mpath_dev file so that the multipath disk can be looked up from per-path gendisk directory. The following is an example of this usage: $ ls -l /dev/sdc brw-rw---- 1 root disk 8, 32 Feb 24 16:08 /dev/sdc $ cat /sys/class/scsi_mpath_disk/scsi_mpath_disk0/sdc/multipath/sdc:0/mpath= _dev 8:32 This can be used by a util like lsscsi, which would find that the gendisk for the per-path scsi_device is missing. Signed-off-by: John Garry --- drivers/scsi/sd.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index d5a37b1b312c3..f8c9096e6c43c 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4059,6 +4059,53 @@ static int sd_mpath_revalidate_head(struct scsi_disk= *sdkp) =20 return ret; } + +static ssize_t sd_mpath_dev_show(struct device *dev, + struct device_attribute *attr, char *page) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mpath_he= ad; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct gendisk *disk =3D mpath_head->disk; + struct device *disk_dev =3D disk_to_dev(disk); + + return print_dev_t(page, disk_dev->devt); +} +static DEVICE_ATTR(mpath_dev, 0444, sd_mpath_dev_show, NULL); + +static struct attribute *sd_mpath_dev_attrs[] =3D { + &dev_attr_mpath_dev.attr, + NULL +}; + +static umode_t sd_mpath_dev_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int i) +{ + struct device *dev =3D kobj_to_dev(kobj); + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_device =3D sdev->scsi_mpath_dev; + + if (!scsi_mpath_device) + return 0; + + return attr->mode; +} + +static const struct attribute_group sd_mpath_dev_attr_group =3D { + .is_visible =3D sd_mpath_dev_attr_is_visible, + .attrs =3D sd_mpath_dev_attrs, +}; + +static const struct attribute_group *sd_mpath_dev_groups[] =3D { + &sd_mpath_dev_attr_group, + NULL +}; + static int sd_mpath_get_disk(struct sd_mpath_disk *sd_mpath_disk) { if (!get_device(&sd_mpath_disk->dev)) @@ -4389,6 +4436,8 @@ static int sd_mpath_add_disk(struct scsi_disk *sdkp) { return 0; } + +#define sd_mpath_dev_groups NULL #endif =20 /** @@ -4539,7 +4588,7 @@ static int sd_probe(struct scsi_device *sdp) sdp->host->rpm_autosuspend_delay); } =20 - error =3D device_add_disk(dev, gd, NULL); + error =3D device_add_disk(dev, gd, sd_mpath_dev_groups); if (error) { sd_mpath_fail_probe(sdkp); device_unregister(&sdkp->disk_dev); --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 CC75E42E013; Thu, 23 Jul 2026 09:39:21 +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=1784799565; cv=fail; b=Nr9kSK61OZsCRIUiUMviDh9OUfoZAnyi9INwEW8U+ntURZpjW1/wQxmq8vBvSrXJtoc+4Xn4hCLtXJyeIx2nMvM6VcRptlDKe7aCVkp1uGCUtVW1TjEmwj/e6549DhCTy035HVSdP0GbOuedqzA9WW38Bq67q3SiHJYxqtpEMrw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799565; c=relaxed/simple; bh=Cf7UdpcpqIYtbWgfwDdAS31e8unZV2kUU9JMkx+eNks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DbJJba7WE8KR5sFRuDGHpB6kJuNLotB6dyGGGTx9QVCw74FJobEA4vc2+3LDjpYrjM9WWTMi8XaRso31QpdQ0ud/uEJRK8cYqR1nx8WQM5m+zOvMbTflAFnRad/OuqT9yECFinklmL6bZuJncYtjLFsHfCLuEEbqIqWNE+DldeQ= 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=ZzozwYka; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=yoSuzxC2; 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="ZzozwYka"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="yoSuzxC2" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJtcT63353523; Thu, 23 Jul 2026 09:37:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=GMFJ9nUKtlf7PxsquqkRrAjf8uZlrSvOEsQXbqspjHw=; b= ZzozwYkateouDMQlGfm4nmG/i3ft2smRhJfzsSaqVWmaOLtvU9T7FtuYXcH6I1AP TT4ZMtMLQHCnwcbJfbKOxrM1urOr3ocJHAZ9XyHbUbbzJLp2UEX+IVSHzn8Y73MQ lln2PqBu9OKTRGh+8sJVu0aN43d8c9jV+HK6LMH+7UVwEuhjjwe2vascEzSikdP6 BHNfaCO/ftO7KKHRbvOG5t8XTtJBAGitaUCyNjdW02/HKkT76VwdvGdsLZzOPE9L QJLGTZLz+2tWxUTq/lvGIuoKLaIRX9QyuGREVgOYgcoFtajUddICX8fTtB7a94gy m3W2fpISLusIxGJy5IpMcg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1mv6kpa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9NXha008288; Thu, 23 Jul 2026 09:37:32 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010059.outbound.protection.outlook.com [52.101.56.59]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxrwn35-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:32 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NBcawuISP89xFbPTKPIJghMB4jqYcIr9Y0vFRBZdXYfCjF/BgCWlD/eJvnTM/3at0I8w+B88+71QpQFsHoY39J7AexLLWJ1P4+zTvNJfUVyH72V9KLexyWtVQYp4yAhJzAXU60qhUQv7H+uljELlyiq0tUwcaIoJQnHqVb5JSTw1FHzLc/pnXaLQQTKtM5bGbmeYPs9x8NwLQWK6CxgDPiJb6uNZiql5myo9uqxUYLbzV0v6PjRnjJ5SbYEHZIYU25Cxhsan+0wR8xBfQ402yfumEGa/+W86O4TFvhSRcLrZKGaI59+z0i+r+WLtaVh64uUcgNRMrKrPbQpLsr0O0w== 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=GMFJ9nUKtlf7PxsquqkRrAjf8uZlrSvOEsQXbqspjHw=; b=XDndhlx7iv2DemqDRB2svqJjIJ9bsQpoLn5GCP8bpN4N0xfhKrrgliknB5PAOLC7Od9cTDfczbYUx+yZbePWgCqz2HIcYBcXD5WUrVo2r5nLrsjujL1Aw6fFlkuDTv7kkPSkTlZEhmo2VpPsJG+8G27Ak3SRrMp2vF3z4qONhlYJKIgq3rDWdUUSBfPpRyV88gxlXWuZ8rjlx0MHO7aK82gj4BbfAlueuPBV4oSPMOI6tfHvy8aJ2TCJ/+ewcJnPlEvG2V/F25fE7yZTY9wYh/MongsAd7d8RgUSzU4Qfr4XaPYfVN3l2NHxtexxV8mTVJXn94Pfwto0JzpyOf9Tjw== 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=GMFJ9nUKtlf7PxsquqkRrAjf8uZlrSvOEsQXbqspjHw=; b=yoSuzxC2riMm7y9cKSIlDm3mjvTUbsvcq0NdszA8f25JWmpLc3TUYYVSp0l4D7jAskVz8jBPhPiusvEgfnXVHqD2aqTEZno6m9SEBFcG7JO/9xP3qJ0ad7BHQA2qm5OIls0yTCbu8UyS/dJmOS+Wo11m5nbqqjwPT2WVbXhsB3Y= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ0PR10MB5672.namprd10.prod.outlook.com (2603:10b6:a03:3ef::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:29 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:29 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 27/28] scsi: sd: add mpath_numa_nodes dev attribute Date: Thu, 23 Jul 2026 09:36:25 +0000 Message-ID: <20260723093627.2327456-28-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR13CA0002.namprd13.prod.outlook.com (2603:10b6:610:b1::7) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SJ0PR10MB5672:EE_ X-MS-Office365-Filtering-Correlation-Id: af1b59d9-7383-46d2-f9bc-08dee89e0331 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|18002099003|22082099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: X7ydbsovrEGQSfXo7jdjFGrGgwVkmSHSztJv8DJgJxpoeq9KDjgxp1AkFsMOn5d3SFACTfzUycKF7eWNtvUMEBGimIyTM906VBscN+KdMZmyLWnmQBJ8rJST4jZ9HV5QTfokvLRXLe5ILCeH/+dfNV1FMd536TjW4+UxiojcD03dcidgA18DiYy0U8/rgp1NhjsLgBL/vdxT26Q3fmHJNDe79Oj8KUk+kEJ/Zl7n2W86aLQbmg4gbtQBq5DLbrQ7STsOHAPLOmQ/SCm5UGFLGN0wS2we5AgtJXRNiMe4kNlC+GAh8dFt+t1eSPyemkacFujsQ/4vJ+PrDJPAjrVKkRr+rVhDQoL/f1ockn1a6Y1gWZxFjcXwOx5KhgAD+qdowguSTDadV6qvkQNXjsZPPy3u23NJu5GFG5JMdc0Mkz6auojJNdwhiAec3uJMdJ5PoFs+LEyCyT5O5Sucu//oVfj16ThjzhnrqCDkyHoOlF8h8HZLn4XncJNGGmXTFeMkqJrwJvHgCHhC566K1Yp+lv0ZiCxbi5Tbv3Z4RMbQrkrqCkPENlscXfUTREHBQZeUqKWPJHKnJKlYGlVG+Qt12Jtdn5HULBKF9a4i1mbFTqu4xUF45rh04cn5JaHQMaigOxXg76golqFdSyUF7psb9u7HZTrAJpEb+HnlSVZ3dTs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(18002099003)(22082099003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0BYtNXmWBDRx9DgYp8EBvIqF3ZMJZlBQDstB6qR8s8IiC2dfwPDWVNMYfJ/6?= =?us-ascii?Q?7QUjMPIqfq3Z1O9YTkUrdwYHO00eghVKBJCOYp+1ymQ9KxHalmo5K0vCwSCN?= =?us-ascii?Q?s7u8DmXq08gs52QeR+Sfc/DAXUPTuQSOc/4j93wgLXKVPZKJ0IS5lppjI29x?= =?us-ascii?Q?mIMjc2nBBW0A0dmmU1e/3N13Qo0D3IVmhlER2GGpkrklXmasWZ0/x/X99cH4?= =?us-ascii?Q?FQUS/gPpWWxqU2oba35IlIf+LT5do8lh4WmhaHYO80f8SJrw2fBkT4Jav3UK?= =?us-ascii?Q?CsQcRD439ox+5mG7bEEjJG/nFQjWgzu7KhFdpu/cNi9YNYEh1p7Rsd42k0FI?= =?us-ascii?Q?c843Ib/7AWBgVZTdMZNOaP+8gnwvtPeSMSvciPzbnF7TNMaprR97Qi55cCFO?= =?us-ascii?Q?5aAiB0kTmPZ2JtEWg3CDJIk87WgLtavDleOrql12x1nqDWwCWJ8VyundN843?= =?us-ascii?Q?Dwlnf5XKyXI7Y2jEIuSUL24/0Y3l3XoOmZCSWyezN09RXKJ0oe2LHQYYLc17?= =?us-ascii?Q?WK4QLjimHmXPWuvkVSEeUzL2HHTj/4uHFCjjLLE+l02J/1rkd81e5Ai+LYph?= =?us-ascii?Q?EGhsZ5RTJz0LqthosKvITI+NZlkrBh+pu2LeE0vAaQ+Oc1Pu2rK0YltIOJMp?= =?us-ascii?Q?/q5l4sZqp83kqsGweJPSxYaNq/CX9Sj2NyzNFOuppy87y8TLinVDoIyqxTEd?= =?us-ascii?Q?hgYZj59bJqIp7ogi6O1EXUxAOghF4/x9rKqrujIz/teEzUVi8NAlSUOOQ22t?= =?us-ascii?Q?qkfTaU8PN51sPQIEYsls1UNKcyexhv0pxG92jqK2CQOh8FA04epQ9E/uVdeA?= =?us-ascii?Q?v1eArfzrRTFY0a+yWJP51rZTvqw5xlbD9pIyddz+N3SfsUBjO7H8O093nRlo?= =?us-ascii?Q?zTKKEM3Sd1e0AJK0xb8wyMLZE3inXW9QXldwzv+ZyiE8UUiTMyzi1vHM2Eyo?= =?us-ascii?Q?2N101K+eJ5qF+lsHaNJlQiWxZj/Xq6m9qWF3i4bGvRteCxSuPjTzKqGv5lv/?= =?us-ascii?Q?+6xSqbahSZSIUETZXpUJV+pw0d/kbVy3Nz0kQU/fj6zbA75yTDbYj6ZyqZtX?= =?us-ascii?Q?/GKLawtmPC5bEvfuMWPq3/aaeJSk1jR8M/yjEPS8Wl4CmzVMuTVxJ2JUxlTe?= =?us-ascii?Q?dzFyZRRmtbepPqJj8zaiRkRIGp66YyFmYnjoL9lkli1LRV/hfRnZyE7rPNiB?= =?us-ascii?Q?kYh2ohDZPzS5J0WOOdGfPdWYIcqet6BhBgNQHaACnV1+NTf/OY/WdmeMjVls?= =?us-ascii?Q?XfJsMArkDewhBlhqKDKJtuUrMDsd3w89YECmG2gs40m59CVjSVC3YRrYWRHD?= =?us-ascii?Q?+HAOrI/rtxjT/o8IB1GBxH9bw9MHT9tzoQU3SAT8jQ9Tr/8GhnqKFrGEsL7Z?= =?us-ascii?Q?mQ5x0Mo//ljy/GcWzYqa3uOesy2PunelGBNg3ZlA7FMZToKVPxD1e0DRzVos?= =?us-ascii?Q?eFBwV/78YZ8sLoCv1hmhGNeK9esQIfnBK9ePErG8IL/n7gM1B4ZDT3WU9hqu?= =?us-ascii?Q?oEJLThF6JRbO8Yp9rDNlvzUTX5ZlHyEgPU3YtoVcY4zmyY9QndmMAiq8ZYsz?= =?us-ascii?Q?UOJfj/sHmmVtqa73j6hyIakSaBr0B+9LSu4AsVSMRMb5S12zGEl6r0EBhMKx?= =?us-ascii?Q?Hw+s0oAPVLwW/97XapBuZ2JHjLF5ZENIprdwJGDFCR+KvkZjXeyj5+iMrZRm?= =?us-ascii?Q?A5V7jabL9Hi22B1WMHWTAJx+eWc9aDIis3z0mrKUxBVVT7OT3o0iy/iNwutL?= =?us-ascii?Q?V04L11cUY1kBj7kvfKv4UvvuA6iTtIU=3D?= X-Exchange-RoutingPolicyChecked: fhO/LftrOOL9ZQy3zYYleBPnpCGcxuxvwTAKgbxIdgLY1UCDE2EsXLOGfgkkwBPd1OQQrAupbW+wazBNbwYRiBRjWOX7Nd63LgQFVOzvw5t/fiF1RCQK5gUfH+TYDLFGduVxL+8ZM9yPpffHMuZ0Lat5t3gqOC19K70UUCre5jL/toFLuvbbZSL590B5QpCesR3vzkd6I14RFxZMSfl4+Dz3xlYHMmCaTtudnRAnLQvgEYrA/v2l+oLTc+OTfGovyTSs8yJgxW5GkPt7e7z1+emd19QBTr3Vzb+G/2TmeCP4EfkdzEnmppn0bfdKHdtXccR/Gxs9jfnT8kMHCkjDYQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RP+87Hhm4RfONbM75Z5feYJQNE32jdGLJH/oZ8OScB+7AjJXk3EyQrZUZhTFQchVyr/kM4u+L9+pLR1XwUSSojOGil1jocdIxqIcd+ahb12puKbSoYfRCqnAhAxxfSJfG7CRiXUUNYWbQWdWIjNw3bLWHNC7jcE77riBUDxsxW6CxaPvT2qVEqIEjQUZ4VCPmSq5HcxyUJY/i8qpwuUT1Kp0DrmTmaTO76SvYqHtRlOExOzvxnBn21xgCuF30UZHcPnUk7GtvvjkbKYH71fdF+yGcI7+7OW+kq48DsBZncqyHB8CqXJRSh6luI7qmSwTGtLklwNOayVBQS/Mu8zsh2fCjH+GVQDnv1cIAYze8CnF7xaUx/6Kz+5BlAJqmwZufuQfW+W92szXUZKYzXaY1rkSXf82UVc3zx5xGYTcZahBkNDwdei+uwqaCZcO7qa8Sy51MbsLhKvpfQlqRrfuqcJbXPt9saHZeiZYM9YZSDA4GRpVbDHkV7xuMYfKd1p9BQYS+kq55oUOymTMc9qZMdHTOP0dtLFroIMowTZxwyauECcdAOe+QP9Uy4zJcIojJ8OfBR2I9DnVPN/H5+Gp6IRlzjZAG+ZO6q1jnNgG+v8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: af1b59d9-7383-46d2-f9bc-08dee89e0331 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:29.0385 (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: sxUpQvR/At7Rm+PZ6/gZI8rlyV8bU0YUypG8d6QvODDjL6lG1f89N5ZAgPN9N+y0qEr2UjzXUPWQmrq6aX8nvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB5672 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 spamscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230093 X-Proofpoint-GUID: sLs59brjWIme5oWtqSS5yZMzlx1uK6ys X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXzoTrnMNbaA10 6fh48OyRSjjZsudzJStKpzH+RMjZyA/if8xWvbRL1ZwrNkzkFvm00Jum5n6lZhtgMov+AnAp2id hTVyY1+qDmnHOliLm2uLDt1eiiMkzaz/3hGslxOZLE688/cjCUcF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX5HBu0i0ovEQ4 Ve3ABwipOgFDjAUKhAZt6sfTvD0ZxwigkejurPb40IbyoGbHQDpZdPk5qSVB3mQedzcGPv5eGz8 6PTyoxNvHSCc+TIeFA57DDhUKaEXkZLZ0Bl+P1xv+u16AvtCRwowipwYgoohHEGIWtN9R/R2vcA v+74QKh2PXSXfSF4vfdFmvGxp/GFQEek0sw+/RjE7rSno8p/d4cOCpfnT3XB//GZePvTWMHgGJm NAQxAVHxQ4Boi/o8wmHYpQ2pSD3PY2VNwJH3jAN2wqta0Ei+nlT793SlaRnqlfbcvR2H0M2twsf TuFs8ylmFT9MEI0qdJqAKYPXLsGoD1y9Qt+JiN3YVkHOLFDTBgvket8ufBpJXlSIaw1BeOaAcpa bCcuS68OmbmJPHlgteK7ygcB9/YeuUzjGnTPQnF4tMARdEhM0j51vpl8Ow+ryqvCgkX/dBjPu7n tlgUiBzKQ89mmEi7iZFHVCUXirdH8uQ76teJVhqc= X-Authority-Analysis: v=2.4 cv=ZpPd7d7G c=1 sm=1 tr=0 ts=6a61e0dd b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=yPCof4ZbAAAA:8 a=P2_R26dytZ8aPJic-48A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12114 X-Proofpoint-ORIG-GUID: sLs59brjWIme5oWtqSS5yZMzlx1uK6ys Content-Type: text/plain; charset="utf-8" Add an attribute to show multipath NUMA node per-path (scsi_disk). The following is an example of reading the file: $ cat /sys/devices/platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0/= numa_ mpath_numa_nodes 0-3 $ cat /sys/devices/platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1/= numa_ mpath_numa_nodes $ Signed-off-by: John Garry --- drivers/scsi/sd.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index f8c9096e6c43c..7255df6e3e971 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4076,8 +4076,22 @@ static ssize_t sd_mpath_dev_show(struct device *dev, } static DEVICE_ATTR(mpath_dev, 0444, sd_mpath_dev_show, NULL); =20 +static ssize_t sd_mpath_numa_nodes_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + + return mpath_numa_nodes_show(mpath_device, buf); +} +static DEVICE_ATTR(mpath_numa_nodes, 0444, sd_mpath_numa_nodes_show, NULL); + static struct attribute *sd_mpath_dev_attrs[] =3D { &dev_attr_mpath_dev.attr, + &dev_attr_mpath_numa_nodes.attr, NULL }; =20 --=20 2.43.7 From nobody Fri Jul 24 21:53:11 2026 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 29291438FF7; Thu, 23 Jul 2026 09:38:23 +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=1784799505; cv=fail; b=HhfyBXpWmxDbin9nG8x0T3HHNBnqT3uCAmT/FN6m1GhtU1IXzF9HY5qdQJeLu0zLyLVNrwrD0utI/sLM+dhtCwYa0T0wVLTaRxYOS4F7+7vqBQGyOdWVJQ6VeV/xGC9rSGkA58Pj5P/Uzp7778MmnF+inV99SVIT6NtuS9K46l0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799505; c=relaxed/simple; bh=4UcIMKzoSiKydCvcoegV25e5TWW6k97Pv+cl1HjhZyk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Hc8Zp+XvY1Sxx8WK8x+53jQSWNhoF3/lTBp1pSJtUQ21yhNjcfoVdtVYVIvSe51wT3HPCrIC7tkaUI2cKtyt/rO1FA06r7mY1d6THEW4Qq9tO4ycg3KbSJ55SpASP026+HGOaooWzmHUSwSOEWZ7rI1OpcIYOwYxutNumWtCSwc= 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=gitJ8Jd/; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=vzu4bvEc; 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="gitJ8Jd/"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="vzu4bvEc" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MJthu23404240; Thu, 23 Jul 2026 09:37:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=l/lSbDlcxAFUzY+hpvDUTg4m9EHFPM2Y8ZWz+Tp5GFY=; b= gitJ8Jd/qlgn5XtdCG2s5JcJ+hHPhl1VXEvMXjQ1eNzz6cf7dUT4WS6cfcDVCxpP 8EBjBUl54BvlZwxUPVF0xRo46Ph7h4PEuCVrB5S7ztlQ/gRs3wDFydzrPIVfG/xG 5yEsufLzaFyPvcQeviKe/pItrN9TIPmy+9n9QSSIlsokX43d1C9dN+Ys+FYOnPD4 Bzkqb/yryWKbainVhmbu+tmfNQR/zJcQMoQQY8qk6QWrJzBi1nkHTM8GFPraXz5C GGDNJAAPYt3xUTLyDEsJJW6/pyNZ0YNzlLYkWcIoLx995eb4t7mpBqPztgK/BYBF uZ6fCN5lHXTszAWYAwLjvQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4fg1n3pmqc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Jul 2026 09:37:33 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 66N9NXhb008288; Thu, 23 Jul 2026 09:37:33 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010059.outbound.protection.outlook.com [52.101.56.59]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4ffyxrwn35-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 23 Jul 2026 09:37:33 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Bjn+v7wkYbUbezBC20waHvsLK4EumMbsRSXjMiAvw9Q8kncwdXCPxbS/+K+yg0tsIUjqsFGRLvU0OujU29Jxw93eBi8NqrhRtqGQyGXYu7tbqpKtILSrVEXSBpZKjbc4j0Ny7znGZADzPWGzA3+j5jwgcHt0OpfpHQixU7t53SEo8ATfDaeSsZPJQNrmrYPeE7uNN/17wIPvYqcchFJATc5YasHTjBT4EMEIWx/MNyWpeRyWKcJYZDhRdOrNyJJqMhxILPlQsmKjf4ptlPxOru89r3qjso48kN7uTce7CHed/vNPcIDkFGtK1rHSBWUvmcT3AtaDpDTre6YU8DM5dQ== 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=l/lSbDlcxAFUzY+hpvDUTg4m9EHFPM2Y8ZWz+Tp5GFY=; b=uOJnAtxu5tLudX8S/rE+ErgiGkKmB4FaC4qUOZr9fwpqHfgotfkfq74MtIO0Wh11k3EL7cFoKei3RctMossqdIa1fAMqFDo62pPmX03X2oq17C7Pze17GiH1wckPV2pv4ouhodPnF62+0udgVbQBholQvkBru1zVrzhXgSWIT/nXr6hGHRr4aAwf7rLhD5gnO3EMJ0mGA9/5rGwnrrjUaykectwNBN1mYZxfkB3EM4DVbNa0nreCM45Qs30oPwuS5WebGKBLz7Z6Lsg0mrmNY13bP0aKbz8EInYKvrPw5R3uLFD5gUojOsMcbjUjtoF26Prg8BPB0Rn6pAIWP9RnYA== 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=l/lSbDlcxAFUzY+hpvDUTg4m9EHFPM2Y8ZWz+Tp5GFY=; b=vzu4bvEcZXV3/mj6xA84n55j8Mve5EYVmexyMWBLjkmeVYPtsTJwVQX9WuLTWidKxSP5O5OcPuwEKibGAja97K23mqsQBOFm/R7BQZDkE/2Ux9FDviqbKXNQkJba64cx6Cw95gAesJI2L7LEBMDNxHJUjdpmQHu8RgBEC4e/zFw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ0PR10MB5672.namprd10.prod.outlook.com (2603:10b6:a03:3ef::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:37:30 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0245.009; Thu, 23 Jul 2026 09:37:30 +0000 From: John Garry To: martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, John Garry Subject: [PATCH v4 28/28] scsi: sd: add mpath_queue_depth dev attribute Date: Thu, 23 Jul 2026 09:36:26 +0000 Message-ID: <20260723093627.2327456-29-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260723093627.2327456-1-john.g.garry@oracle.com> References: <20260723093627.2327456-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH3P220CA0018.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:1e8::24) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SJ0PR10MB5672:EE_ X-MS-Office365-Filtering-Correlation-Id: 98b2cb56-6c00-44f3-c71b-08dee89e03e1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|18002099003|22082099003|6133799003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: O+p5ZjWZNyRaMw/ras071KEVFISXOISmc4qTUvqeKgV8eUPzz9PuO0GmhKypLIULH0DILZJOPZm7jblhHkkP48NgyFy+sLaC50vS0Qvhx7m71Esijc7QaqRWdwI/cqqHVXCaOJWcJZ/CQ1JX0WiF2sxrS/hxzUj9hjEbKnA6t2oZXmA8Rdr98veHJiCmmSPLMAGGP4+Lk1gtkYG7JAhVKptK5a1D6ik5rD9tYJ3V568eHrjY5qi8UeQZO7Mgg/k/cXihU8I68suhA6wyyscGSMQXLuzgmEPAPxRItFFZ5MGl0S1YXiHibkHNu6/JWLPHUByJs4Ey/Wkauog/2a59pkyeJZ1jnTuy9RFnQ4C0r4VVbwFhbtDpNsVkpXxsjipMfXm+CGgifErUrgKuehzB+KoDXeUbGq11AWTpGnvfBHoWf6bUSo19l9mKCcNcPwSwgUl3cNUque94xQ4f3qck4lH9rUEGWYnnzPMDyICkUYmW4j6oAUtdxlJ+fPmejrnqq6tbegm3mtlSlPBGicwZ9/fcy5S56W8S7iAIy8jvgQwTY/iHGn/RfpYlzmOQdSu3gef6lHJZ4291BCu2WOgoBUEyGSc8/jjZW0fsSHn87kbHxAUNdTEqJEwV4nga8htglkHziwiHahjHXC+f3bC8r1PVJrieX5LiJkhMfmbDHuU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(18002099003)(22082099003)(6133799003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?T1ekrMG4iqrr847NVjtiRN195uY3t7ZWbDdA8jyeyqeB8j5qM25BIiAmUmCa?= =?us-ascii?Q?y2MFuQOjwDoCHAe8CxLj37vnhLFnej4nLxlLaf0d3hEtmpwIZTdhDBd31UFQ?= =?us-ascii?Q?pceg3CDzJ0039z7teHMR8Wukq5j6o+ERxg8HQ1GJWCjpQYIOK4j0gw8KUk+6?= =?us-ascii?Q?tXPwss8l3XEqAQClwlVXRZ5NSkbr39BqR4iFDCg6DxcCTpTLnf8ItBL4FDFI?= =?us-ascii?Q?xt0NVFclx8JUAU1/FeDqMomaE4IlRTM5xNGVq6M772rnbd/qV54Yku5jOOxe?= =?us-ascii?Q?UAW9y3z/WUF1ZizWbEOvMmhIcjT24S/fD+Lp3KfhQWhlMyX5ObjOSK3zJLKn?= =?us-ascii?Q?j0xkMxvG3UzSvv28ERtv+8KnXhYP0xhIztwrbtg4MTWR5ZZ/CGwpeGvsdvHH?= =?us-ascii?Q?eXx9MjfwnigmLOnuHHRmVjGlVFk/3OMlC2fI81lqZWSYqaaFXVsSMjfjmiBE?= =?us-ascii?Q?OWPdi9N7g0mbaFnXChz9VPZ2Prm6gOQFaeLZXvhmBXFui4t8lZPSRNqFYtbr?= =?us-ascii?Q?UPb8yaEuq4L8dAqedmQpleDSFbZSVHCAlAyLmNxmpdGde+HUu96VSqXEkzSV?= =?us-ascii?Q?yE5/gNOFSXyqjxlWgO796rhp/TISNh+FjygiBF3RRHQ6KcoOy29aClEGJO9i?= =?us-ascii?Q?0t6BKMcj305KxhwQXQs3TQV6hQESyJC36tQT2yG7u1MAP/DzTIL1n5cv2tNB?= =?us-ascii?Q?kkKI0XG9v91c+yAP/+QngIxt8a0MTJlUrle3PwSEakqYZdpssLsGlF1ceyOj?= =?us-ascii?Q?NiN8qQinztQALpSF2tVqCGB5eXgNf2NB0E2Q8K44AKlBrCT0kZEwEPzrkIVE?= =?us-ascii?Q?GgzmkugCTqDWHjE7HitfwtebikltpH7WC649bkjD1lF4cdZCCNcJU6NGEpqR?= =?us-ascii?Q?nq6Sxgb0XVik9EGcqJ7qTSEjRxN/j3VFHtfPqmBYPkKZpIf6n0qTvgj4yx3W?= =?us-ascii?Q?iVAp52lh3FZLozllrhIYCzIPeCbZ9qXnWAgrfy37YTlRRR8SSlI84xahAaP2?= =?us-ascii?Q?Q1A35jfJeiroKiewxG10CaYvgQQmYIhtoDkDFw5kQ82Z4beAcP2UHu9ecX66?= =?us-ascii?Q?91753yNp8T/4bOvsX9f7rv1NjuMnGezYSnq/anu2ZGTxmK+iYWnSRQRaghD9?= =?us-ascii?Q?J//KDWmfCg4nXWAQ8ThqgU8VvGpE62WvuNS7oeem4Cs8Uw9ZNSjnFdkQsbLQ?= =?us-ascii?Q?/S+b7E50spolMr0yYEvlnubery06QFnr8HQc6A/aGeB37dQ93h3kxzBOCyf8?= =?us-ascii?Q?MKbxB2Pl33a4n2KNfhX8RNcFhiXBeSbli8PVhRxikI2Oq6RJyGvfs1t8xMDr?= =?us-ascii?Q?F0p5rixSOvs7puv12aN2AkKMR4eBOXReWaaPEqJ9BW6mH6CurIWSbSaJ8vw4?= =?us-ascii?Q?UyO46sdKgqqb0alZbNgA/ADUC7rZCk/KlND3Hsd1QSy25/+nb1CngxyEk9dg?= =?us-ascii?Q?eOzo6ajIIXE0KPNjLJfNgLrLgfoGpNuV41imTvsNEQUwi2J17aKJjp7PMEI5?= =?us-ascii?Q?Y5GxgW1QnDsgoDf0lzjOoHY2At/ltPu2wZGz76sdyWVgupjU6YKMAI3r4d1s?= =?us-ascii?Q?XfMYGfPMumVKVYqka76pcN2G67kS7DKx0+ylc1y7eOLfNbTTZKzBMTSXktKN?= =?us-ascii?Q?iByqenQQGAKMeOASbuqec53DhO9x94FXqaczW5FQkrFHpYyYshFsLTQFVetY?= =?us-ascii?Q?twkhjdLUQbpPiJy6OFRCxP97pzVkiRt9bThcdoLBSuSzuKlLbjIomsITM7G0?= =?us-ascii?Q?SuX9/Hpryqd8FKdLxvr8utYeh+co8Eo=3D?= X-Exchange-RoutingPolicyChecked: T3BmXpHdBICDpHEvKeEJM1FaZMNUQsoDdWcva4MHzweahzk0rukaUt440MzuydWwfYZTP8sDPOfqK1ZMyAbJdwP5DnyLJ9DAhZKBPWcJHrQgYviEZqsSOZRW+Nrk0IUQ0LF4PaZWzLH0k+01nhtpNCcCUtn3SIURNzTxsZgcLkXHVUl8RgY3LHRt2/gYCvveyRcD+XMdesYjz9hncQaSTk6XHad0/CnhCPcAHheTN/L2BgCFmywVxpEVQYVF3jD3Gn268ROZc11fXT7DRmI/fc0iwmg/rmXsSYYBgBMF9zcThCeAJfLDBZHUi/Nte2IjGvyplI2gNZPpoQryPvR+jQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: kspHtlCoF1FkjlR6Ag5wFjM4Kt0c/7HALUkOfUMcWobz6fQAHQ2C4Z/b0rcDCyBYnE00pwaFixwwdRrMEPcuJjxUCFBC2/I2AXd0ZOfZV810gKGbL0/UwsiJF3MTWYaacl1cUV8zlfhpO8CEuJ8h/glnvk3khNFGH2GD5LgUhRIb/C2yd7yGxNgPGWwSIlCLhQgXCQ3z+LNxWgwu3vF0CDKNwkpNDEfTC3x6cSY27PSMGluzKndvoVxWC31cnUzVpL3uI3IGgLn5yPt727xyIFK5GFO54M14A+UUO5Lu4P1ScSHwMdzu94xGNPZIFcJWcnosU7OKes0XY8YY6EqnYdEeUjGHxMJTP7sCe6mWVUI8PBhlRZbEDYbHuUwSEGg5YQM0wVleVPpMoFWdf7FUlzYFRAE6sxcRLe5GyNKTs4JnHxgqQrxHXbWM2BAjR/+ok0PHz177g0pItjMTsXEk3/4JDB8vTCKvBiiUUKbXkiPZwQ7whiVJ0hJck33ySKhrsNUCN+Z6YaprrTSJ45TVpWCSVBL5n+ZGA/BuuysJPc4y7jUYmuBH60L+CbvfOknIgqP1N0Cefxi9nUnaFy1J0YfHSBop9x5xEdBb4i/wNmc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 98b2cb56-6c00-44f3-c71b-08dee89e03e1 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:37:30.2206 (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: KeZPFvWCRxKha7xhr6qmP1epT9hro4X3SlHQq6+QLmXQQ0/BPbqQ84zKVuEPXd4SCPBNCeZ5eo6tm3yGTE8lRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB5672 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_03,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 spamscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2607230093 X-Proofpoint-GUID: 5cWDQgq1xsJCaVRIxiVpSeA5oz6pzFwu X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfX6YgbOdNQiOWt bf7xSH8w8x5QYGXWL+lOzoipZ5380/NWyja1dtqUZCpenh1ISLT+JkAqyu4q4tsQUhkR2c6aogk wMKyL3U8tk6nTJYareW9yj6KGDt/JL6wpOfJQYWFmsysK064p2tB X-Proofpoint-ORIG-GUID: 5cWDQgq1xsJCaVRIxiVpSeA5oz6pzFwu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDA5NSBTYWx0ZWRfXzKkWDQUKovew oCFnNLqyKlD43o5CqqlC515dKfvNHjsMaddlLEGbdDSVJwfhwwuzsWhOkgE+T8t1iFTM/agC1mt /eYelN4ZWKc8vgmODgwflJypmrCQwTQvx4QNeK2XUJw0RfkRlIDAuWqCjJxhVeoW9Zh9MhK/kvS UY7w7O/t4kPmbzTKMnpMc3RVVNZdygsM6QNTKoGAcf41r92kjcFWZJWY/FIVFAbTWwniA5b/8W7 i6ieh2mxjP+7tG9KvQW/PfXNG+7xyqEAcZFGqI1VuVnai9bW6lYZ5bDDTwyjvlRStGlpKqb5XTr ++HejBrOzfNeTXQQvthj5iLhJmDLkTmjs6klpXNFfJCEIy/JD/deszsgL5NUiSqD912g4bsIaRJ 2pSES+k2CDw6pmXwNEkNRR1LrkIimMoDuBGPDJk30/prMAQhwftIB/SvrqhmzaVqq1lf78/45r6 jAosEj8ZoswJXJH5ImRf197Szi2a7YJyLi2rRHIw= X-Authority-Analysis: v=2.4 cv=PryjqQM3 c=1 sm=1 tr=0 ts=6a61e0dd b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=bA5FzAUjrTEoIiOIIUIA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12114 Content-Type: text/plain; charset="utf-8" Add a queue_depth file so that the multipath dynamic queue depth can be looked up from per-path gendisk (scsi_disk) directory. Signed-off-by: John Garry --- drivers/scsi/sd.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 7255df6e3e971..7b87404b70d6f 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4089,9 +4089,27 @@ static ssize_t sd_mpath_numa_nodes_show(struct devic= e *dev, } static DEVICE_ATTR(mpath_numa_nodes, 0444, sd_mpath_numa_nodes_show, NULL); =20 +static ssize_t sd_mpath_queue_depth_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mpath_he= ad; + struct Scsi_Host *shost =3D sdev->host; + + if (!mpath_qd_iopolicy(&scsi_mpath_head->iopolicy)) + return 0; + + return sysfs_emit(buf, "%d\n", atomic_read(&shost->mpath_nr_active)); +} +static DEVICE_ATTR(mpath_queue_depth, 0444, sd_mpath_queue_depth_show, NUL= L); + static struct attribute *sd_mpath_dev_attrs[] =3D { &dev_attr_mpath_dev.attr, &dev_attr_mpath_numa_nodes.attr, + &dev_attr_mpath_queue_depth.attr, NULL }; =20 --=20 2.43.7