From nobody Fri Sep 25 23:50:57 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 AAAC446C4BD; Mon, 7 Sep 2026 10:52:43 +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=1788778365; cv=fail; b=faKsRUjN0SV5ITzPRbCzcfS1++XQHQtEEYyyRIVOsbeK0E6LfTUjZbTXjjvqXCecpJwUlhyBTqHG6KWvP06gB+OdWYnGM0rbnHcMNSCg11rVDbps+i5KlpBuIjASPQlyNnw0OqBOl5M8N7CBFAq5UBIvVlK1WaGzLPDV3M6XROk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778365; c=relaxed/simple; bh=zLtfhO6Xv7wCPv5w1bY4bMrAQbh6OD7k06BJwZhkfpQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=vEeydw687o8WTozbYAPt+BVaMrY2Dp2ZB+IY9a3TsKYiOvGbMdr/Uejcjj09RUDy77EwgN/CKCPqx3SdaYt+yvYDHETW/KOFhzdxo37s9oN5y6HI1GVkpcOBVn9SbP6+QKddcKCpmw4jyneGbYrSKv/2wJsZe+FyZ63jB8CYeQI= 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=bieXcFBR; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=lsL8bts/; 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="bieXcFBR"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="lsL8bts/" 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 6871pNpj825152; Mon, 7 Sep 2026 10:52: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=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b= bieXcFBRz1rdqfUar/XVKvu6BIxzQLBgnPsUtZVtxrb6pM8Z9s18mbpT7dZrlen1 xD4US3SdSCY9ZBKgoQGdnA6TCVz7Owm0+G7cD15Kbymtfav0qpyne9uHCpmER/gJ 3geuJHGslV9A3Vkfua3TIUY2e6yznxK+x2+4RBR7NSlR/SfXN8k5hiTJj1EprRJb OMYkZvvxdBGh3Dqwgdt9e9ont55kHGzHumcyfZfJ7B5e5NoJI3SLxHaFdmoKdfvT VdA1yK0QC6DiiPLct7Y3NROJjA2Vu6eS5fP/aKD7YJ+oFq7lTWDvZzjNBTXfTkuA 3/gWdEEAmk0NTMHeTmae7w== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbd3st0m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:18 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 687Aogoj011743; Mon, 7 Sep 2026 10:52:17 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012033.outbound.protection.outlook.com [52.101.43.33]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh711ybst-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:52:17 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zTKEyupffbTdxTwkbAsERaRawXhOcg6/buy+uNCzO8527inJXSG314RE5ql8YniVgQiL6Lpwik3xXhx+HNTzul8CAwPMHeRTLLxPATSbCrFCyyLYwC6PjZFy7AOLpT1/FOclsRKcTKjOzluxK2RMxUuypl771y5+jCc97/GsdD9cXWi/S7KKxCxFcIHk+PLyO+cCsxMILdPF+3W+qaek4DxSbQMKlU+GCZ53PM1tfLoKu0FJPi8m0VIWEbYbo7M3IeOkQU838ro5XRorqCwPJbniAp9BcXmpit3sPpqFJvT3t4e2MT0NwluqRyH6u+u0PxUjgzSzZ9FzYzsaUm/mCQ== 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=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b=dzRZerffUpI4h7kRwZZ3CDSW5hAdKF8Gm6zBnAcTttvAiPrNGmRFymMvXf3qtUOJ5lDaoYX+6D2GEnTNl5T5OWMZu5ZfLZtE6RoSNpk7aqWDtzoqJ4tbbJONBuJWY8PYwKjT/xwx0M6cTc+C5WfWEW9IPqSBJCrOjuKjd7a/FpwBzKLNUi7Pq0TmVXI9nqvLcNhc2qdIcFGgP2r1kX9/35MqA2caTeUjD4VnztorBsc6gfwFT5JOBo9pMbuBxxQ5lMyZxJi6u8HNst4OTovxuLMpttZklGy/IQovisfHY+Pc8Hz3WhPGNMoK7veoC37zR2Qc1dneYuN/qPqSFCFoXw== 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=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b=lsL8bts/NnhDTmyDguTk2K2xMemfk9ymIkyPcIpMqvkyvQAk+r67rg3EdaPsBRBid3EhQsvebceHn1B2q6Rcwi4rB7p4NIXJIfEutdLhkA/hVsQDUK8V8FSuplTJMlCi3wiqVkzCuftqoV5Q6u7HX1+TL8MjhXJra3ejswkBJm0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by LV3PR10MB8012.namprd10.prod.outlook.com (2603:10b6:408:28a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.4; Mon, 7 Sep 2026 10:50:36 +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.0406.005; Mon, 7 Sep 2026 10:50:36 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 01/27] libmultipath: Add initial framework Date: Mon, 7 Sep 2026 10:49:55 +0000 Message-ID: <20260907105021.1763236-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P223CA0023.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:338::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_|LV3PR10MB8012:EE_ X-MS-Office365-Filtering-Correlation-Id: d18aefa7-7685-4757-c80e-08df0ccdd8f8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|23010399003|376014|1800799024|7416014|10067099003|18002099003|22082099003|5023799004|56012099006; X-Microsoft-Antispam-Message-Info: HrBG5E7hUhULfdxiCAjP6XUPvzGrHAtaev8TQ+zfInss2FQq9KUaoJRMM6/2EwAgwmicTl78GZIf1VcoD4+4oVvcxRxDLkfTOZxPof9hgVvRQrsbnRdeFUM/DXnAEwri2Gapo54rJ6saF5kzcRB69PY4w5riODzAljBzcPuuvytWKEcWa+ySD8M8IDME5syMYDs5n9a3eRYzw5D8b9dv4/fJj0EQ3gVi7m5sFMe5a/9D4c3YlV7+2UDGeWWx5ExZDX1HKL8/HsmkKm9wa64MUcH1A0H8wznLB38o/3wg4N9x94caKKpxx8NYBNJNUMv5VABA26NXBkn4iNaqRYz0yGEI+UktZMFbBAyXjk0CPXgJP5uZsPBSIkyl5L0jMZgpJn55MC4dXf58BCoKWN/4qp8IvGtw7xOqfgxEx5kWNEtpwLZGrpCUjNyU6XJhI8r7inbPkvG7FiKEtYHov7RHccwDOLkdy4JH8W3TQ6zl4DOm/QhC05LYMvrGzu+JYBDlYtf3z+TFupcJOg4yOCEfiwVott/Z7/EX3VwWwUI2HkYgsnYIdePhGQQRi+E8j1a58dedsTi8VxwwlCmBAZmi/r1fgXXZaK/knMUKHXPneGMuhy/5P1UaICllr6NyVUJ8rHuTGhTyzWa3HXPg+WUkRBGQFbzM2YbGWR/VM1zlLj4= 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)(366016)(23010399003)(376014)(1800799024)(7416014)(10067099003)(18002099003)(22082099003)(5023799004)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3p+kPPxYTzMASqUC9gtBomyUwc6wZAK6rFXZ4to4aLXUmEtpHSFKCBG/h9Vl?= =?us-ascii?Q?o0b7ceINEmXYJksxSE8mOkoA0MJ0maV1B7DQrx898ZuW6CZcfAXy1aa6tRr8?= =?us-ascii?Q?/a5CDFG2GEWglmSZ8L9Ngig26YDUsPgZ5FKO2a4vWs3O14Awbw9G6gV1+TQm?= =?us-ascii?Q?YidrCYjnd6PnJZFZZt99nypKObcNoGxMMn0VrioGAU19XJMIpiTb1salzUgb?= =?us-ascii?Q?/dV3kBkp4ZIGbscZ0eRAQM4rol6EwC0AqgZov82LWE3iGAEGGMLMQRSftf5G?= =?us-ascii?Q?PR18Mv5d/fpfZJlBKrIIyp0shCfgN9YzvDUn9+bBeL/C6TCbqbYDqDKGjNh3?= =?us-ascii?Q?zwg1Uu8xXcRE09iKOwiOSKf4sK9IH742Shgu2X6AWxEEfeJw5unwPC55RLX0?= =?us-ascii?Q?p+XIxv2hFHRR9xxp8dGuBQIKca7Vlddfx0LkaFEaWr/WF3K/JZSfTW2403dK?= =?us-ascii?Q?Fs7Irjn1yQEPvu204w1++CiR0USWCiBWlmOomPX5sNBADj5Vx9kZ6T6C1ESj?= =?us-ascii?Q?/Ro5zfRtzKfnkH2WREny8+4m9uYUdJhxA9XAXv23xgBzcY91guNwmnvDnPjb?= =?us-ascii?Q?Cn9HzqxlVH363rEqweIUgvjeKEooAG2Wp+4g33Y0+5v7MgFzJD+J66cBSGaD?= =?us-ascii?Q?vaCkUhCHoWzyojeoBAnZGjxe010NyHj/2fydDf+LZzlH98LQ4yK69AGtb5Pi?= =?us-ascii?Q?7IHMT4nBlocXsj4AGcWpaVEOO4TrnUqH6Jgs9qajYUNWtUYS2f7/jFdw0KcN?= =?us-ascii?Q?jTEEexAjnC3yH+B2ReOWG5ieJACmU6jUCr/OArSO16cxe8Wk/BPiDiJoGfZ0?= =?us-ascii?Q?4cSI72Fbk3L840DsnjXUcZq8CVouel6T335776qqTswkaUKXaa0mFuDo6V4I?= =?us-ascii?Q?7Xzxp7qcX+RYJdiv2uGy5V+i3T2Qafg9iKcdf3O8nt0cj1SDOq+cKN1Q8U6D?= =?us-ascii?Q?B7HNDOQvdu/bV6LKH6GCMv/4WK0i8NHwo61KqxIBaMyJBEP0P+t0lXkPVA4N?= =?us-ascii?Q?zmjdDFaA1NulEyZ8l5kCwUY9UZ1LtSVuWpQjvPy9ZeYVXKfaphT2eV8AzBLA?= =?us-ascii?Q?xTLN+Kz4reO3Ev2A1KFGfU01LMgoiUv45xww2smX6GpfuWTSe4V1ClqqnO+H?= =?us-ascii?Q?ZlKlkN2iBx7ZrB8r99SfT4v3hXikGxC7XVvw2zgQ/7CZIlqiwuJjUfEzMpZT?= =?us-ascii?Q?PhDAAcPQOy5ssgfphMJqyI8EP8aU5YQFr3rZDMapSW0ey7RCoOM056K7gDOo?= =?us-ascii?Q?Zac75B5X+JlVvWTz7Wui0u74lyUN3U1/6lCfJZSk5bmOa9y5us+FeLU6JcXR?= =?us-ascii?Q?9XSCyxn3T9lnEXgxXklZxPqIins4EZfiSYnzqzY6rw8Yq6zRUFBIrntd7qFW?= =?us-ascii?Q?Ypd5s16pZsMp7GwPHrwi3QFoWrzEHlTn3KQOSBCSwF2JfizYjCUruow7xzPG?= =?us-ascii?Q?esz6ZfQAJMOahUNlCph4jF9IKNsC4sfUhBS0C2NaOvdQD4ueI3lf4+Vp06nz?= =?us-ascii?Q?G1gdt27g7r1a8hzRbu9h4ItRA/MIpvklE9ayXXDkVu6/gIfBKg8F7vAja2eZ?= =?us-ascii?Q?GTjuvf6KyVJwrDJlYWKAQmPf4p0ZCpBLA6ggAVvHW8atpdQs7R794M3SLXYc?= =?us-ascii?Q?gGtzOwIwUkcgHILfp8uxOdS0eZi/EO3mB9Gth8YZAQLCXS/GAgKzClHlXdTG?= =?us-ascii?Q?YWBT8lHu8lOp9XsYa3fE29i9u58Z870puGzEqD9fN3zui7GszKm3w2NQqLo4?= =?us-ascii?Q?RIqLq/Acjen3IcXoSMrS4YauwFdAlZk=3D?= X-Exchange-RoutingPolicyChecked: 5To4k0UtLeB3PeVXjFaAkUfhrNfuxDW/q3D3fL/mAn7Q2cq+x+hG5q6k+/qZY411ktw0J7fHsYmo0EhbMvdBAmayBLaOTxp3hOtA4wzWtX3Ja5yefBM7LYWsrIAXVsOw5C4Osv5RUn90+Xz+IQa022sTjynNnn151XJzvCRsAgly03JAe7fC0/6kwpuRIy5PnFgkY4wNBIZOCTkspRBA1SgmLAIA3sqSPomIJEyR1LZ2YPv3XuCq/98iZGeKsKfSrCWuTNpIijxlmHtFVReI6x9g4NT3foZ+WJ4XvC/s8i/I0bqZtcsr2DufCnJ2VE8rPduUeu5+MlsWb64sRdIMiA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: IjXE7pI2OtB0YqA4Cr4i2OA08UF3UnPOXEPjRxGUS0R1bdwrKyXXKXkPGK55c+wTGlMiLYaQoSD4Xa1bO9JI7FFJF/JeO+kZN81KYxfhmJWn4m6kZR6GzWO/d0i//cZyUr9DpoKkq5GKbvYMCpIk3n4mgTpUwtqS8sWadcIds1MJ1QCSlpMCKuExIw7Eo7cv1n7KWg5ZwK0mktOuKrwk+ldHcBa+d5d6o+1JsVMY5yqHaDXKMz4FiDbIKuoKPCwY/qo8pJDyUFvRqD7/H3r8Q2tuQZV/KtLgeXeypFwsx12NaYCmfUH3V6P1tA7jjSZ3RjPBsGWI83tOx+wi7Ne0IhcGsZ0UsIqNTb4mvx/I/STVoDcjiAP7EBqSY12fEUyX4CsRB11hPbyW4CUtTMfThWBBjeC492LepvrHLfrQoQ5VYaam/bFYljWgeFwVKF5G41s+7aRsEbV0fwKV1B11Iq9kB5op9GgW5j9WstQWQkXAvC0PFVwB9L2FSerVRzhwc/ZpHsNrHPQpeOC7ZtNmeVl3m0yioEw9c+Firt4qqKHbB/2e80jr04deGNv0gibPolLwylmFwSmEKC+u0q6lyolRPOf61zEP9fiHv2YM9Oc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d18aefa7-7685-4757-c80e-08df0ccdd8f8 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:35.9497 (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: TNLQU8CNVmFTiwQHGlha9s341wgiGzfyz33LB4r+NFTnLfiZX8KKXLFtjV6ZGPGDJxuFnPdPqt6SqVwKTpd+Gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR10MB8012 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 lowpriorityscore=0 adultscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=EuDiaycA c=1 sm=1 tr=0 ts=6a9e9762 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=VwQbUJbxAAAA:8 a=IMLwmY2krkRuQTCR-eYA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX8K284aCDiha7 mUo7tdQB/iWBqpKwyBcqtAlLDOXCDTkb+ZCcosBrRhIBUMCHXm+yW099xR5qrQLm3xWVuFVMZCt xPuzFtq7rb50nuPgVIyb6nIsuwTqfpiwfX4FCCHJqm0OQrZ+adpq X-Proofpoint-GUID: OKO6FjDMhYQ9tMpVd3b59NIMBZCyWUGQ X-Proofpoint-ORIG-GUID: OKO6FjDMhYQ9tMpVd3b59NIMBZCyWUGQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX/ph17eDfxnnZ ixl5DuiyejexWDQiD7fA4hd8TQsvmc7sxfC+2YLgznwTk4n1/PH1AnTJF4k0SyTNbStkXvcWzBk OWWIkoFPUNVsgHOKlVK94DrJoT/4ltXgf2lHlEE8cOE3NfcdUAIAcrouaHo48L4rubxbbAbcket tXV64kDgg+X7NJOwPAipX4TONssInRMlFDWTymlDKSOzLKRwp2Puo2D+0lF2AyB88ofNsNvICQI uCfDK3Wi/OGDbIoWytUabop4jNAcrnko4/h7osnhMr+im7j1C3+pruVhN3IwA7mJLCan/UfQ2Hb +UGz9dyj0m+ERBE4WsoTdXNwPHjHmhivBMDTuSJqJPQbmXA1yJTJxgRF6x4ZA21wKut7JLIBM5V tXcnE7MpT3UqK9qtAL4dTJOiliaI8u46aMREPt9QYb9aKQrfCbjW4R+tE38Fbj7rvT/ihqCwLRm Ag2gYThV/tS75Pq8jmQ== Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 67 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 103 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..407d985cd31f5 --- /dev/null +++ b/include/linux/multipath.h @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-only +#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 4e6b34c3346d5..8e0c3717e8e9a 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -630,3 +630,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 dfab958327c5c..7041d278f2d1c 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -350,3 +350,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..f7b26c66eac7c --- /dev/null +++ b/lib/multipath.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2017-2018 Christoph Hellwig. + * Copyright (c) 2026 Oracle and/or its affiliates. + */ +#include +#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 Sep 25 23:50:57 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 6E31D483BF6; Mon, 7 Sep 2026 10:52: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=1788778330; cv=fail; b=fzYr+g3fbOqjcr89JgfcV8vdck5Yu86wdAK1F6ZiG7Y+oDZVAkMH3DGnhJZ7lz3jWeUF1UBdsJ5d7J3dg9TblepR1tUqhobHc7Be4L04WlACpSZjLoIhww2BATyMqwvSwAnppgCMN0qj9GPLJmaCfKHotBH5vbXj2ZOA/yJk9mo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778330; c=relaxed/simple; bh=MJ7T09CSj2OhJXnu6eqGDqUSNRSFdpZ/p7G/MlvP7As=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Hi3/rvBZ/oFOz9T18ScH5cejvyoprbBgv3ojZmWxJxbX2x9cFurOaH39JTld4mxrsgCq0RJLTo2kuqyr3F2A46RiWpO1rE2YkOLanHYPFkAe0Ir22BLYEFjJsoofv867SL2do0ro4BnF2hgo77VS2bb+OOE87cX+3NgsMT/F3xk= 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=DtuBgLVm; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=JgsFTQNW; 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="DtuBgLVm"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="JgsFTQNW" 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 686M7BLK4149628; Mon, 7 Sep 2026 10:51:40 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=vJbOfKvRVlzRjL7W+H01rA5iZ6OWj9chK9K3eQXbORs=; b= DtuBgLVmn8lmljtjRA5+BoYm6TQ9HD5Ng+tI49T6fRlmHHQw/OmXjuywtsvAQTi/ 38WMSnAdRY7Cb4i013HfIADoLizet4iPQXVMd5aHoqUm0HYUJ9TqtgqlmN3fiAKG JEnRWTw63GIBqIcsWRzS2Sl5eIFAP4WIMOILG1eOnoaZisuYqRBf4hbSCe68NQyY oVSxygGxYKETdckzuVc0UetxZTQScIpy9i1DheLa3dvUBvBaM0ND0IISkUSo71Bi V5J4nEtXj0FilxU63pJralU1GzMfiuwRdRMJ7MTG7ApFEXoV47QMhErmrGxwdCh2 pRVN5tu6W3cZk+Bc23uhbw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbmq9t48-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:39 +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 687Aopsx019105; Mon, 7 Sep 2026 10:51:39 GMT Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11010020.outbound.protection.outlook.com [52.101.61.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8sd8-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:39 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x33vlRnKetOk1W4XKgtpCPdO8HNSK4xdl0EVExqmJ62amIhTW4DpJAqoVD1l+Zc8fTm1yAEjDQFO9qxqiii/pAzPQ5zkBoK4crEI4YPjzeixHqrDUEmmLJHUb27G6bOOiim1UvUfGapHxo/5l38j205W/Qq0YzFaCZyegXj25j4FRWWb0xFKFfCU9faYHfrejteVabD1p5RpeXaYEyg+k5rojuhN2Gt9uL1dsD7z7iD4O6fbRD2MoFG2ZsjiuuVa+X0ttDGWw6wS4pBc+cvZecFR26E3Z3xaa0oWjBtypxlDQoyvwgj8HzAxFW9XTjAZFdUcirVW+f/T05qF01OplQ== 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=vJbOfKvRVlzRjL7W+H01rA5iZ6OWj9chK9K3eQXbORs=; b=wmbg1+k6yun82QtP7DO87SLN4FFZDRprxLs7Cbk+qQcovICeDDTq9oJB6xNjIsQfw41YJ3lrtJ9hgDuCFq3gvxPZ6qfc2BHd9vVbg/3wpKX4q421REJruwfX+aCejdwm6nAEHFg5um2KEa5rraG920gmbdT5Pbdtv2U6EAnCJApHi6JEZexT/WzjJ2MVlM2QLQRtph/jxxQn3bSDEtK8zWL8zhuEaQsoRXVJB22shnYpPKmTjkp45GTb7D5+mN4Oexv0rtUOySXD9HdtoAtzFr6e5jK9V/O0U7DZLOFIVSF2j9NPbgr+frtZN5Gx+Wmr/uyAsoSqMrBLkmE9knaRuQ== 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=vJbOfKvRVlzRjL7W+H01rA5iZ6OWj9chK9K3eQXbORs=; b=JgsFTQNW9W9mYoLP2nMNKfzm4HhSO217fMg5/EdbFHOwJffax7eZjqWpTEDiD6qFa1WrHWFLZBK/zFlXZdW22bm8tFSm5KJ+4IcazF5OMMFgnNhE+Rzb9qkW062OPxXtEVY1JwpEfJdkZd054k7ygVPPkNpCj9T6AiSGxIhGKK0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by LV3PR10MB8012.namprd10.prod.outlook.com (2603:10b6:408:28a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.4; Mon, 7 Sep 2026 10:50:38 +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.0406.005; Mon, 7 Sep 2026 10:50:38 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 02/27] libmultipath: Add basic gendisk support Date: Mon, 7 Sep 2026 10:49:56 +0000 Message-ID: <20260907105021.1763236-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P223CA0001.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:338::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_|LV3PR10MB8012:EE_ X-MS-Office365-Filtering-Correlation-Id: e525ba85-159d-4860-8557-08df0ccdda33 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|23010399003|376014|1800799024|7416014|10067099003|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: TmWbz4xCpfN9K829tzY0P5x9IFu27BJHC/RvBA+pdOJN5pCNjNtpKbnlaR3B+f+GgwJFSqZklja5bo9/rVTEuPhJteFuoHx4/Sewzk+ZiQHxnNxi0SawdFZgsj1rxLt6p2ItoHCLV12rguYoltVFNtvne4lkK0X+thK82Jsl7y+d8XXT84/aNdr48pkhRsz1H4XQHcrRbVaCirzsbv8nWz/A932TOeiS1jTP75eyyhFTEFQVQYww5tDT8XnUb35Cz29SHo3wTfWBKwC+wF71Q5oe4Ez2eOF3LHUYKciZYlbnEi9Ue2yPDOPnDWuQFsCjztjhwmjQQYlm1TJy1OIPsC8rDsVQZCN7gtkhlVwdGIO49fZA+rtm/wCx/OqiZHQPO/6ciKr4BkgYv0WHpeBSuWeViPN1JrRwUZaLNBejKBEvu0AKGjlCLqMhEtxRb651ItnIegQBbgTGNGeiTeJX2n3fflI3ropNpQqB8JcS4KP3XYW41x4KpvLhshqt5kdViMRe+Lp25/PqNYevEErusEI3hGjbacKuzGU8XKBZm3pNjpRE7J2sdeNtYoUoUFb3UMqilsoCffFd2r7YOP0QcfbZrWiFVBFT7HycdNOVOoiZouofdUXS3AkpGcgbwMMAGitgDvaDmEgatyKeJme4UylGnv/Hflrwoogdhv2W45c= 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)(366016)(23010399003)(376014)(1800799024)(7416014)(10067099003)(18002099003)(22082099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?z/NvxXK8Fp9yw9JPM8Jo6lGTPbrLMNvcN0qflvbMeG7L7wCm2J4uCfj+2qxs?= =?us-ascii?Q?ZUTlYJaCj1W3sCFg/BcauOtvkERkA0JAF8lx0/zUcs8LPDA69ga/2dg73FNX?= =?us-ascii?Q?F/UHmjfr6NXcNtZZcDHhPclQvl78BKgC4dGKS89x0YQwdHeSn8RuxLe+fjoZ?= =?us-ascii?Q?qfkY5hhkITYxaMDODfw617MXtnZBRuyzsx+ZnGI5YwWzshrybhUFZU/ZfxPs?= =?us-ascii?Q?N2CpkuT0E3qtcZZBlnmn+/rCRk1CPqphWwfFazJDotF2SuMPEABYcvNS0mw/?= =?us-ascii?Q?mtf9dvJqX+OwIQOlGEGm0SnMsedvVpaYpjI775FopMRXUPpU5aRler8cdq5S?= =?us-ascii?Q?BrpD3xzAvfRA8M1AVrTFwGAta/SKa/whd9Be6mndDq4gYXmWELTfpnb0tjYT?= =?us-ascii?Q?NZkE38fP9taGryYLzBVs7FTp8a2AyPV76XzYjXl5+/uKw/Yf53rXs8fpxA/a?= =?us-ascii?Q?QJIdAQrcqdZHreEYORTCWtWDHVCMK2JKqU7Dwy2modoDL7uc9rFlH0ECa8NQ?= =?us-ascii?Q?Pslt+4Bwx6LDMYXo+hHH2rx0+4soM5u1rijpyn6dnN3O9QgPebD9tW2aCcgZ?= =?us-ascii?Q?z//nSdtnPTlqZaaxt10Em0YQPqWCosmcRzfsu+rxeQOzwT+We95eb2pZhtWF?= =?us-ascii?Q?GrrMe1Uw/ZFJa91AuCKiGvUZ0ESPgXW1iP2MArRWZEy7L9mf/JohQ/EIoGfS?= =?us-ascii?Q?zBwuhlmE119DJja9Xf1PI9jOsPvWP18pS0MmpovFEyJ87truNks5rrH7DbxX?= =?us-ascii?Q?R5Bd7bz+9ymoA1uPFbEg2LuGtZmil1Eq0C8nOXZKGOzOh6/C+3v+b9KLtXDB?= =?us-ascii?Q?xzAXj8bBWW7oO14PhxHlxcwqqu5I6TyxTWSIK3ynMzDSaGI0EAY5FEjr0lCK?= =?us-ascii?Q?s5U5tGne7NzMVmktqyHm1WJt/yXSvUNQnB68irNNWDtX4nxfEI44FfQf66dp?= =?us-ascii?Q?q+tx8gwaEey1dPvtLstJGxyaxDSnStQ4YgQmaaHxo6hOX571AWXcO1Fuxbr6?= =?us-ascii?Q?9VZM9m+/cIDsRZHmiD1kvY3wybIApKOO+0nDKkBrMy6BCkiLgDyjSgs7vTSK?= =?us-ascii?Q?KLnZ6LRT6tgrM3tCUZ26paTqk2laWgweMpXmu3N2GRTxFsjZgvSfUvWcG/HO?= =?us-ascii?Q?mUoutR7eDG/+6gHFlZ9Vl/zYwLfijfTsvroDf0CuZ3UBsPTVaRI+QuywJouW?= =?us-ascii?Q?AUpyXgvBAZeJBVaoR6j+DGHY8gPiGXYiru11T0RQGYphsVGkFJ6UKq95uOsC?= =?us-ascii?Q?lnHnAWrQpD8RPz/mTsOP9qZeCCwbEsIdutYRgXfriVPASbcUJQ6m1SVspoFR?= =?us-ascii?Q?rlZ6SUy6Am4cdbYzj5XlGqG7sPC43RyFhN2qArCafAdawCo0Rve7/mWq0nTO?= =?us-ascii?Q?CEOuTURMJM6tgQCy9d7KjycWir42oCOv1goMPe5opSGjeSW+VuErQswrXhry?= =?us-ascii?Q?kNSXFzTacU8Z1nmp8X+WqslVZsM8XpRoDN0fqULiGWKGZFxyBMkGwUnBFW+C?= =?us-ascii?Q?Z3ZDTeLg//8oX5yEJRYzfkS/0sAWES6IGjO8u2xez+YemhNiHqZCMvp6/3GS?= =?us-ascii?Q?wEJppTJ3i3G3h3atWI0H8NrSw2Yn8QbkHTGFID0fyQuvkHhFVOp67+fSGM+s?= =?us-ascii?Q?F9aoZlKcOLi9hUrkXTmvHL9/hOroqmLHf0c7ejqno9vSGVuJs3nxIQXs4hyd?= =?us-ascii?Q?YC08GQvFJVyo1LJK1MEhgv83zNd6AknNQj9ZJPbgXo/iRWkcouaZtlNG4pJZ?= =?us-ascii?Q?ndZ2O7nSD0TPL48YcD+P8BSqYQEI5Io=3D?= X-Exchange-RoutingPolicyChecked: N8cflrfh65OZzr1U6w2466jDRDFof9fqPAcNgcuuffSpndV9m2DC7NSqWwdQNuHfAc2mID3QWjp70ks6z4bhTJdzx/68LwCPgYUlcVEAw4HslBMfQrSOv8vYDOirqvNWUXQ+egXStcfv4K93+9KAkCmtcIzH9KkcrimFb75pVfxOOOBkY/Fe0p8WSvH3Q0waZf87vOx9IaZNBLIti0t3cV8PAPqxnSH/J9F6C4UUbqVse3HJg2Ibjk7iqmOFPHpyvPDM0fO1oyOS+Kv4wnyzYmGXxeivpcePvPNHEFqdv43ujPUdXt1k+giL3sICmUle5MGSTDYDkqtJdzF8hRKasg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: iLXwcWC6ALZEynYrfiOrTl5WAkxGkeGmjlV0beSFGfj7kND7pVWxRtXsSiuu7FnQwnQxzqZmmAPHabxIapoWQYuqycJkf5GI4YjczVw7OjTVHVUYnaoWbl3bFCWwdRai5xf1Aew8iQ9AsiPHNzF7QEEhVZFkx6EEv4X7mcC2XrZyIpqMl2b5EebdoIlJMD0DUUu36W4A1aXmC8c+ktIA37dOut7iX3KmuayxPPT0mfilGizwf3WNq1wTp6zGa4PZDJzfjd6dvKIjFut19fR4RPX+ZtBHE9m7EcJOzLLi0rkw+EazsjHDKiCfBPcINZOjPVZon0KYL+YGJ/+l8W3F+A2G5FV/ZZ3KvAw+ia9Ol6vJEjPlYaUJuYDAhFQhEIObYlsuvZAd5Xo+84NgfmgqvuMa/9miYVD3T4vLCzdp3HAY0yP5uwkvxQ01ZZhgSMzAiBmFnpB2htwzFLEYfHEadVGpTNlNy5mAHY6K1qVi5sOT3QiLtva6rOaFyEKAPgHJ/0NxM810mhEakoDdU2Nf67eQFD+BgI17PTk2JohLPDuewk4vtfVbmGQO54DDgsAXkUaaG4rebZyEEWuzFCF/Pc1bdCrJ0RK6ncfoxXT0Nu4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e525ba85-159d-4860-8557-08df0ccdda33 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:38.0494 (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: +TuvBZ/LW8Nxel/ZpHzkh0fjCIaMLwbYwrlzKUKHrA1Uz817hCf2ENawMLbjLck1iycTgtbWAZqD55qJo+uB+Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR10MB8012 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=JYiMa0KV c=1 sm=1 tr=0 ts=6a9e973b 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=B52eoxIPv8yZRAGToxQA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX0WO6lwvjQS8Y qeJ3omRkMyO7iRyBXHNmypVBfRAh9JWwi3Dl544sbEDvoDASwY5eLRciI4PIhbDiSLto3xthbWy WiIudsaIwgIc0pSOcUpDXxQdQr5wa5+c9PWYDSAZcOMKn1ubq4Bd/QcfUHaAC2C8DPsEsQcjkET Vnjy0XpRXPSd1ojoT2vrMSNIZSLGF2AmA3IPEe4Xsulo+5OvF9yP0+HYNcDlz1eQ/wbDfyzaswB 6tO6XNvks0Ik2UAbzH1xmcuH48IZ7ZyStK4/3oCkscM4ORcvZacr+aktzQ/RCRLjcxkXCc3QJal hy9+Sze6rU6RZk3SFM74wio/lSmQN97OUie4NaAGFnVTWvRF/sXNh9UPFMRsnqqVNbbSVhpJSpO SbRWqYuiiFVPlTUmorYd1NgKyFrEEDKmTR7YJyaOrROXuVMWU2qv1Z9W+K41kaAgERPiOwfe27K /W7DmQXgsV53iHfoUeQ== X-Proofpoint-ORIG-GUID: 3HYzvUn_1Awz8BC9morgbZ6ZJaAVhoOS X-Proofpoint-GUID: 3HYzvUn_1Awz8BC9morgbZ6ZJaAVhoOS X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX7U3PYU6ClVrq B3T8pIxkuqE1actpZn7yAur7AEYkSgXWaQIMTvyGFBbgMtRl/v2qVY4cEk0FrFR/WFvpYFV6r0b 6YSj9ixQRV/FJSEjVNJjyx9eAutJqKiZ8Tf0L+i26ZH12ObljZYY Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 103 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 407d985cd31f5..ca6e02505be43 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 f7b26c66eac7c..574868ce53381 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -36,6 +36,106 @@ 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); + mpath_head->disk =3D NULL; +} +EXPORT_SYMBOL_GPL(mpath_put_disk); + +int mpath_alloc_head_disk(struct mpath_head *mpath_head, + struct queue_limits *lim, int numa_node) +{ + struct gendisk *disk; + + if (mpath_head->disk) + return -EINVAL; + + disk =3D blk_alloc_disk(lim, numa_node); + if (IS_ERR(disk)) + return PTR_ERR(disk); + + mpath_head->disk =3D 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)); @@ -43,6 +143,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 Sep 25 23:50:57 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 504C349F102; Mon, 7 Sep 2026 10:52:43 +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=1788778364; cv=fail; b=gNuFfL2fB7Quz9h7i0QZJexstXwjKhS75yBtDIkM/0ptl7P9F2a6vFi75GlO2ii/gBwb81GXcnuhIRMQyU95f+Sk7SSfM4YbVl5GXjTDVtAUz/kYQYjMsnkH50xXv3j8oFiO5pgcb88k6P89b+fqhQkSwtbZEe9S7imloX1JrlA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778364; c=relaxed/simple; bh=avdacaS6XzmqXRJM3Sd6/Jiekpzj9H4UVti6oU4GBh0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WSaWZXDe1jrUPyagTMhmvELbfomeoTQNSEa6NrOnrT3BC8iN3PzYr8r2QyAyBmvHWLBOuaozxZaKYWESLlkgz4DP5ILvc+ph8C3kX0jJTomQgrrX2nUh5LRTfxRR09DMXIzYxf9ueG35ewoOix8hAT6OO1dJTkKkDhCZ6R602Fs= 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=ZNq6s1w+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bdp7yga6; 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="ZNq6s1w+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bdp7yga6" 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 6873vFRE1033787; Mon, 7 Sep 2026 10:52: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=EHWLtWnlVItwvNDVIU/wu34YTqCvVj70IP/OcNTUg4A=; b= ZNq6s1w+ze9+uN8WC08zqLDB3RoaJ/FCmhCSMjnKqhAlu+z1E1AbJ+HVW7vWZdh/ Jss4QIC+wHPk5ZZbOVr7XQm+27+bkoPMON6FeDb8GXp3ictZRv9bxiGeG99Bl5Vx OyGYbqbpiHmi9Z5Nqs/J0HErHeqxEv9bBO90Sl5i5eIdmjWrWBOXH1UaMHX9Hwd7 gxKbGrMH09rW0jKnv8YJlYW6k7JB0NRqkPFB2o6yjO5y4tdHYZ/0+y4DQL2R9XiY AHdinPwgwSqVqVgCbT8hCSnVO/e0syI1Knf4yv7QjtuNupWnoHZmzODtaDZ6EKYp VbbIXiPOTOjSqECb1JCN2A== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbd3st0c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:07 +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 687Apnin012930; Mon, 7 Sep 2026 10:52:06 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013056.outbound.protection.outlook.com [40.93.196.56]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7atpvuh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:52:05 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MtHncWBwY5z1+x0OMoSh21Tqkb8K3HBURBrtTTiWuBEzqq4pzb4se/r+unvt56eWAIX3/EwTNQvBvD0HUCgJoQUbmQepJVcor7FixdYAZ+sNcMNrMXi2qqUr9uC3EYXyPBj4mUWtSUN1tV03V2PpeIFZIl7Q0n47FTshc87KcBR7n1OyE0B0nT6doK0MpNIxdqHajlLeNboAxanujtQgnxLHGZwIx2BBHw/KopaiCJaFdhG2KCP5/ddKCTVnN5xLT49FRhtz3ioUkxu1AOm3sUGB5Zxzd5EP+JkfWn+qlfwxIDLB6gln0dakidktb7Ar/Evw1HsMlpJkCyHarJs2IA== 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=EHWLtWnlVItwvNDVIU/wu34YTqCvVj70IP/OcNTUg4A=; b=xNv6Hf0K1I1igvVGJF9GvjNxb55S50ay8fwa7Z1viPggLi6jYsm+RyBkinQABtwL1ITnSgPNyC9Z4aONbbPTavojk+00wjSxWA5PZOmpqIbt2Nw+nBC6Ix2N6GMWtVVcJW4BYRCUYjH3yF3fMrlJWp8Wf6rtpcfyUROhjhfeFsXupdaI1Uk1YjQsRZq5jOG6AelmbcPQXJkaeOOJatVoRXsnQhKN/aj3c8gRM6KBMQncDzIy0kYKu31dTg0uXEdO3r/+EHKFqpHfLaOoPLj53syrgJVVr92/WD10llVOfV+Rrnn5TzUwvp4o6Z4OIg4ioD0qSDRPuAp5xRFaoqaHmA== 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=EHWLtWnlVItwvNDVIU/wu34YTqCvVj70IP/OcNTUg4A=; b=bdp7yga6yQaiSVVi6c+Y1tp7/41z3NH4DjuJRv3PyrxeUp8y00jXk/oi3Z5XqLkbhLd+2NZk/k4/3RtF4L3ewDX1nLI8KFjX9rA2HVhoNVgrTrdoTCJ6ndyOK9268GvkP9lbsY12OjNBr0HysfNTXt/krcH4+QV8cGsTNJZxClk= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:40 +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.0406.005; Mon, 7 Sep 2026 10:50:40 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 03/27] libmultipath: Add path selection support Date: Mon, 7 Sep 2026 10:49:57 +0000 Message-ID: <20260907105021.1763236-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0PR07CA0049.namprd07.prod.outlook.com (2603:10b6:510:e::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: ec2aed83-8bd1-4732-8fae-08df0ccddb80 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: jSXYtKiaGorbID85WMwK2eqh58BmY8suooidRHn3OsaGyGA3JXxOLnSqizNKMJ9gAwro1BVn916IgmDQmbBmyC+fLYoHKhhDmOP7cXx4lgngcdtFjE5i+byJTk6sYWMHlVbKOsrtGiDkHv+qPmh752HO7ZIBXnRmrlQPo5A1RNs5XlGrqYP0oPSLygV0HkeWi0XOTsdFwLA7niBJGCQxo3+8uQ7RSbjAY7ms8tCfSEZrFk8grty1AqQtZORQK5sC3DY8RTTsGekzIBqKXKCpKOHBA1dZsmyAujF3w6+N3j1tX5jxdvVxo+MgUsDra3Oi4WTf3q386MA0W+n7SeUN+3+KiPs38LKALIBUpjG4u1f8yXM+cnq7WmuVWakvTGeRyqlxbCJr9Hrv4rK8cRCjU7ICfh/feWjKEYh6uMjXBjtE59YFYVLgFZYaYMZxc+fCZ+YdO1nQpDzIIL6Sne9/0tH6DeIE2xPeuZF4RPrO72VTod3m7YoeuEM3oO8I4inkNwXVzEK54c/mOwWqb85i+XEsMsmZ/6IeOE23xkXUwwCz93MPN5EgygftZRvdacHAVzt9/aUe7z0EE0vLo+7Oeg1uYSTgWBW4jZKQtF9DcMVnAyYepAQXa4+kE0QIzg5UajeJYmtruGqlS1d+mxR8D8EE1DtLwuNNCbAT/ul6Kuw= 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)(1800799024)(7416014)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?USzi8XSNLtJfOxHTTRcYM6FtsNRwzPqt86rhrBrHrWCMXd5VV/hx14AOXl+f?= =?us-ascii?Q?7gvmVxirDUN32ICXOhChWDnwS7qjQ4emWLqSctcJ6UmY4O1jeQRBoYUAvFOA?= =?us-ascii?Q?e5PFUpGPIle4K27Zv7hJ2FXlefyTxS61/rk759CrJE1xGteQjrc9JQP+vFoW?= =?us-ascii?Q?Y9V/EAYHx6bqN5+Bd5pvB3dg0fru2SMy78MH0Cvx6oFW/DM5ZzB892tP+kb2?= =?us-ascii?Q?KF5DVYgfU1xPB5Tr5pKFc107PFeXB1JBOsl20q8EFMjJSr5oQghzmjtAmjIh?= =?us-ascii?Q?FY36EAfqNzKLx5v3LjQY925Z0GgH+g4NPSbTcERV3ST3/t0Vde0f5jtMa9o0?= =?us-ascii?Q?ZqdGCXlm3+tmArqCGHvtMp8ku8mxrALuRiVP+HDhjW4xg0QoJhmTXu4nSMxU?= =?us-ascii?Q?AhmX7jM4RmXvkU/SzQvH9B0o5RBLy91+zafozmKrIhDDmO3VI4sW6T3QqFdk?= =?us-ascii?Q?y2NaPg9Onn8wAE2Y2BBC8hYWmX0x3ToN1xrFADq6ykAKGxoFi6AMr8jAvrfR?= =?us-ascii?Q?uMrt5eJU8i2saHQ3Xr2YmqitQL6Q2RaRcV3AxJnNVrs2YRwMFtEFq++qpL6Y?= =?us-ascii?Q?g9/fYZ6dwdHUjrF7U5JrKhixIHr9bUBDxpjWjT5wz/teDMz7VyMleTkv7iQu?= =?us-ascii?Q?+sZSvKqUhxms3SaS5l1OVnDCHkZEywi9smRMYxxi2/D78Nl7/edviD5rA5mf?= =?us-ascii?Q?4TN+1DxZfQVvRVKFKjp4Oppv67RIbFMChhONnEWEe7nPAAgplLRY0ReZGLFG?= =?us-ascii?Q?WQmBzLGPOk2VOSpCx8+EWORH0q92vPL+aRW53p7iH8q70Tpsg25Svou53OlQ?= =?us-ascii?Q?1F0BZLoyZtOt6b/7s6wGJsJZECd6T81IFiBZHBqiDemZx3jom7xU/yT5Ig9b?= =?us-ascii?Q?HiI3gOyOCCSD10s35rWsat9xk2jpTTPnWegg0ZgkxjErRjdwkStHGmN6RrLC?= =?us-ascii?Q?zjQJmCAcgxVx7++xXM1HizE+M7JnYBiREId8QG0Oio0P+fu8oXitT+rwMo+E?= =?us-ascii?Q?aOdA3UfRam7s7Vqw5Quqly7u4vAmDgN8F0lisYqIf7iHrHZ4tX+gCJyMMQBA?= =?us-ascii?Q?vPxBqf820GeZZhB0MorpxQIEcbM755OF754vkTKMo9H5HGJ7sK0JpI0zovqU?= =?us-ascii?Q?2zvKG8u1mqHfIcHvBtKMpkZKiJdetYEfsv7VA7Wy0HImnKgBMvarxIW62VJf?= =?us-ascii?Q?QyXdnbi3zuWZBotM/ox+GAHT7SxZ5avRWM/SLCh6VAfqnaVm2l+aMXGBqRZX?= =?us-ascii?Q?rK2AV3j8wbQv+YT0bW0k20OUB5RiBcWZI4W/vN8IyV+vES47AfZgRtLjwoXa?= =?us-ascii?Q?ChqQ0T6lzwAhoc9iA7FDRorX1jZtZv2AprC7x4HvHEH9kId9x1EvUrIxY63N?= =?us-ascii?Q?cP+JSKHnE31ZQ3KGq/fT/175MuaquHiO03v3gHm/tR1cGl8gMSvK2QOh1HiW?= =?us-ascii?Q?7Gax72jplXy3umrUTRNGXA1or82iEw+turq3G9x9URL6/afcwYzLr2dR69zx?= =?us-ascii?Q?2ZA/6yGlMbXgZG2eXEMgjRnGiBdDCZNU7vdmM6INBfipa9YFXF3xLQP1St6N?= =?us-ascii?Q?MtLZL27lUmMIv/UK/IUcHzeIXqctS1mzJJk3pMrOy0bv7oUL69L56FjVBENF?= =?us-ascii?Q?t4uEajvLSeGXkTvK44IFec6clPoA2BKWjBe9GjzdqzDjTc2OF5lma15d6JC4?= =?us-ascii?Q?xwFshYFn/IXH5XlI9lNAZC6sGsaEZriPeOhuMC8bdbZNlPEk9GZ5oH1Ycbrs?= =?us-ascii?Q?bumAMhatfI6oXB3wGRueUiuLLkBFDFs=3D?= X-Exchange-RoutingPolicyChecked: b/GCF6phi+h9VqTSAAp5tj18pNS90I1ly0XBMIHTOKZDUQcZh9FGDEfs5fSw2QE+jRJytGy1jZsq3u8msQB37d6u/fSghwnCpnT479pXOEYJjqzq+0YD0A06xaCxdKiSzthUed4TnrBi/fQA36zDbULYn3bp+wuHi7ut2ZOasTBliw/bC/+EED3ds5XJ45NrptKVJkuj5qj20/z+3wXg7Krd7SyqOEEUtgmLNejewOpyb0ZkRhVtDqMJ6/KbVaZlKfHGDScTRaAvJOlJrDngGhg5DDdYJfp+8+v3ZbxpW54YX5L7TojIM9t257FDJ3z9IKpZD0sAy7AjM7zPyJJZ4A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: S3rDqhkEJHWWKkCsrQLO7Xy/Z7q8ZsjWWwMZQiWBxDt69udTf4LE48XWU+iUnYqLPpvlVt3GMeax8omZ++kxmTn2hFhQUu/68sFV+62PlsTeiL4pJ76tXE4F44dXPgZ20x4DXNmj6apPBRCEPubGkOsjRhO9jzI0owGt2SKWYQ0nAcrIzBKyXRie/r+ho4QpkaGtXyz3nvuu9KiPiPEpxsBVZ7d568ypj+sLUnXQpC8b6o8VtxtYuChMuX5DoD962NMfXnuRfeNxFokTAZk6OoOLqkLCFoeESaT/qhRviuphUQtyE8dQpvq4EVi0hJIDJArJKAgtD6gS8GVyXujXOZXr7M4la1qOemsil0wOfHQRVYMURP3HqEcgNAxvd1WWPHtqucZOLgziM8c1dIeT7MxCy49VB+z9+LpjCH36FmgMfmaDErjBUYOuH8WoA2XBQYKoVN56w1ivaDUCpuNRdaUpqJrPSfFH9lupj6/wXs+YO6hMGjGoAV82tHo8P3Bn7lBXPApRAebWtXG8FDvRk2FJC/hH8sWgKl8a6UAmCkiLdRnoUelLFmAIdJ1jxQM77dqdWhD5F+30sBBEVfXUG402QP/yE5od+g8oWfPdT/I= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec2aed83-8bd1-4732-8fae-08df0ccddb80 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:40.2210 (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: 6WX1fTy57rRcMm/hsoXTwustSbApX6JBa+kvZtBUwSqARvP+jGCx3UnqD7+Vyucm1ark9n97EUOGLgzLmLZk8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 bulkscore=0 malwarescore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=EuDiaycA c=1 sm=1 tr=0 ts=6a9e9757 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=Lb5UtHSxAhypNmDEWQsA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12102 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX4qVHnMoRPXhe iG8n+hl3wYtHzPOt5UNhvbZgan37J8iN0BNoOQZck3SM7VoU2CF6YMREaIj56iwUgB2tqdKmFvg oJyPh5bHFwweipDQPUNVsHRbwok2jMGbd6BrztRv8wF+k784dxcl X-Proofpoint-GUID: Hvb9CfWemuYOoadXCwlFnf_Xg4966XRZ X-Proofpoint-ORIG-GUID: Hvb9CfWemuYOoadXCwlFnf_Xg4966XRZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX3zEGKlWdBhJw 1RKdZlqsKaFRtA8sRu+zkTe+U8zNq5g1To2yTKcdyTL4w9zwXenCLRSHcMPlUkAt1an+OZpGzMm 1VM0dapfGWF3htpK3uQck9IwLxmTp3kq1e0mn5HGxae9L+Ly9Gd9zHdlMJs0veyOmMj7GP4/JCv r0QeB5YDJCk293NFUF0jdfEyauuO6f1kWCG8UhaTtBSaR6aW06iZt25/3xU0YksR4WQ/BPoMDwi INJrFJLxDtn8uSOLPgC/a56oLjzoQAJGtllSWHOSOk1VDdMg+HwRV314RUJK2qvCSx8HBXt+GkG a0dp2ioIkmuyQ9nZ6acofhnZvvNGrQxU/yCCVpz+A6VwMNDZu/51CivihNiFGPCpPVnhm72f7Iy VhAzO+MxkGwc9gtPev/Orgxl8T7lOKLprHZtxvnTowaCOn0wli9HIQFj/Cgap2RmPEDkJ/gfiZg qeLuOIH9IyPXrdNFtcbxJ0tezWCjimL5RRu/Kz24= Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 251 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 284 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index ca6e02505be43..9bbab0aa8961a 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 574868ce53381..3541357d07f8d 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -7,8 +7,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; + WRITE_ONCE(*iopolicy, 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)) @@ -76,6 +313,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); } } @@ -133,6 +371,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 Sep 25 23:50:57 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 163F7468C3A; Mon, 7 Sep 2026 10:52:07 +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=1788778333; cv=fail; b=TJRxJ2J00kxyqQ+D6zAHegYcc8AfE276qg5RvnDPwIoCfDB9KEDsPs/OA6lUZVJzdLQW0loEj+i4MBMjAGA5eH34ABe3vniKA6MLHlI9IiPm/dfyRNnq16cHoYpBJSgadNTp2FYzK6IrenZOb2HO8yuY8UisodjplVM6ZXdzJTA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778333; c=relaxed/simple; bh=cCYbuWhd84FDxtj/k2JbLpd62ibteWkQiyApg0FrR8A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JEnRIn7bkZZsfVDvlyXTZK2XoVfF0JFYv+tccpj6VHJ5xG1cQCwiQMUg6yzL335AVyECJGG68hU4F8JHTiFdQl0wvsLO4KfeFnFya2ANNAhinJns1374kysR8zX9x6W5jhlZQJG97WhY7kMpmXGEAvkH5pXC6jJmEllRWt6nbu4= 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=CW1dWn3T; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=nxGEGlc5; 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="CW1dWn3T"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="nxGEGlc5" 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 6872PTmw882645; Mon, 7 Sep 2026 10:51: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=UXqE56dFlh6wU6U8s2kfr7dSMVfxo2IeQpdEa1NT6oU=; b= CW1dWn3TyZ1zouH/VyebpSRzcB5MXAZupO0ZSCsqktY/WMUuy6ki4W+5Gm4m5QOI I9gEatW1zpBdk/1tFr5uIyQSLS+ahh/DCUC6xWaURBRo7LLN0ib7Wik88gPEE2ET SxLgucC1LMb+2uMZjGVfE5lNWkXrZUT+frufv0gCInsPREdvtinwh6OwtvnX04y6 P2/w/bv2+GqfOk//eNdli0GmJBh1qN2d/opDtqieeRP2TFy5OMASQ1Q+CaJsEplK 7ypI93/Kzm0UyG0hId2a/QwSkHbR3BLJYqqwFWJarwDH0nJ8mtgXSGsJ99U6vYuF Wjk9SltlWo6Kd6D/HzYjqQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbd3ssy4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:12 +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 687Aopf6019106; Mon, 7 Sep 2026 10:51:12 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:12 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dlUICCwH9pjiae/WfmYyszSexYBYGy2krPvHdTNFTSRVEi6F91X89SfxUsaQzvV9GjNg4lKRwOyVJC2cleTFvOKPRx98FH4HJKFybn1jQ5a4FdT+qQlBeNz3q5jcHdFv21w9bv6hg0nvHZXPO3xrHCH2VgquClxj7Ssn5Oq3NpiVraYy3MQx28tsI3Y3hFjDLrSsayU+XHqQ8WO6fpUysvoHaUFyDeqwrTcPsKzINHQyJfvs4eTLpLkBQOBJzBzsDfTcvzGAOnv+IUIbA9FFdLvkddnBoeU5jIkvdroHKoTNjd3civx73BtuAhkh0THARbf9EK+HsgMVd+3KnCVTGg== 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=UXqE56dFlh6wU6U8s2kfr7dSMVfxo2IeQpdEa1NT6oU=; b=YIE1koNzxH3ejKjSCUnN4A8z6rxlYHgOuYyE4i5I/2MFqegL/4cnxXg3kyJYnDpM8HuYJ52t7yGw8BKczAOqhMJPhRvX6vT9jILZOw1cW80WBPOOF3P85+8Hd9WOrVQ5JQpB69cNn5kCYQ2D1gfZxFMM69IMoK9F/Bj8j1KpzsBkfgoaui3YbJngt1TOwlLr767hdWk2GFVED5m/cMR7yUweZq5FwxO5cHy6kiq5B5I5HBOMcMzZ9Cfc1O36hWcyJqqXwOMOrNewtOQi2lPDYh8tHKeFfHY62E5U0g8w9tk/6iLojCTi8EZ2CT4m8BfsN2FPfHa5uX+OJJAXu4abkg== 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=UXqE56dFlh6wU6U8s2kfr7dSMVfxo2IeQpdEa1NT6oU=; b=nxGEGlc5N+Iq30yE6M+2fg2DxKIdEIrn+t1dZvOAAgBr7uOzPdVVbefuxZ1p5yzRjJLDw1GHjuX2OrHhZ56mLE7moxOxIPUXPLczAq3sVA1/P+RjM4JQs6WRLEYFaj7c1BvBQn++TayuQDipqNSMZPPL2DjYqH3gDs9bmgEtJns= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:42 +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.0406.005; Mon, 7 Sep 2026 10:50:42 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 04/27] libmultipath: Add bio handling Date: Mon, 7 Sep 2026 10:49:58 +0000 Message-ID: <20260907105021.1763236-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0PR07CA0055.namprd07.prod.outlook.com (2603:10b6:510:e::30) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: dfb07027-cf17-442f-ebd0-08df0ccddcd6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: lysLPZ3HdOSuu7nL0yH3qmFxbltmMz3Val4wqFKH9+YbL37UNKcrgegifqVdvt9ZI9gI9o/AVNMwyrR9WNmyH9K877dYLVJ7W6QHw/ZdOpENERJxzaabLNZFYhp0KQ0IrJFkV/FsStha6mKF9gCoDnZOhsut7/dMuob8xdUuRzB4htLWe80y92/T0U50jDH0jAoFlAA6+3nQcsUA7jRF1c0FmQzQQIjtiu87bQa+ekyJaLtoS19wzAGUkXhJGRT0eF6fzWXrCQk5Ttn9anExlXe23wUYebzYR+pJUHW5p1Bwkrh37R6m9lsEqYY9Hir/IvtvlBX79Jt6sdivxtOg7zvzVA7TmzcZLPqRtk/nIDIbX8/fdqXpKRl+6swgsLzxcGjeqxOVAvD5gChC2M9D+2LdpuBmcyUmO6h0+RcqrEyeZHAdG2tvSdrskyngxUUjBqdjdwNKh4vf2chBLnemPkksB6V/7/1GDoCLFBMSD1U3LfwlDjI5UvGm7VDm3LjmXauqMLZ3IbvOO7tFuYBT2vB9KsVQUBF70jMZMAihFA1d2avfboz4twEICv97WmVWy/oC5R6hFqYy5NjEJMlnD8WPiFkUUsll7dIFTAMdO0FNnLvn71U52jcl6QosiQ1yH6XiQKunSfL2gmu0LbGTUneWfa/tbB5DUuNDYrDEzxg= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?scKuPoGugCuS97hXN67CBbN0xDr/lfnI9uefPeVTaVECunM8tIP857bSPeyy?= =?us-ascii?Q?yhABYYQUUohQfFTxXtimU11yMeIJBqTMEb7h+CHDGc/isOH4OGkKW27fpcfG?= =?us-ascii?Q?drKq5UnRXM8uhFBwaEIS1VYfZWEH48kjeSrgsztItyxVjyX1wFzZj/HSEy28?= =?us-ascii?Q?tHRafocIv/2lA2TD4sjTxzx9/h2QRDyuXo3uq/+qQQtvqTX6QytfeWu4Yu22?= =?us-ascii?Q?WxogD+Wl8SMQrl7IrmlbUrxBXt2N4adeYR72xTPlrkkwnjIz3yYrWo8+WAFv?= =?us-ascii?Q?Md9bwJg2UBCXbqJFVKppysYpI3QRieZZPUIzCT6Pl0mj9/VAkcnt8vhDavH7?= =?us-ascii?Q?ZqwGSufhctuyTXxBtCZHJ3ue0VOReofJBO6Je9S9bJbrNdGsNA1Q213CT76j?= =?us-ascii?Q?X+bFbm/MGaFbsuddw29w9Q4ewhKwJ9udeajdSEw8dZGmK+YpehHHqBo/LxN9?= =?us-ascii?Q?gpTyVjn1Bh4CGFpSNqOWnL+5y3GoaKde2N1MNNpFU6mi8VzVh3LxjmhLZv1C?= =?us-ascii?Q?+WY/w+e1e7Mlu5vbbhTNo66h6QgLdiym8Bhd+crnyILYBlzPBH0fK292HXhA?= =?us-ascii?Q?UPVdoJ3Ly6upv4pPh6bjwrDUoa/xyNbnes1WZAcr8JAUcSeQAmYnygues9RQ?= =?us-ascii?Q?kPMsML3+RhM8QdZflogpw7vrgdIPgJYGAmTdC+UlxrcRD92AnjDOGAwIoiyp?= =?us-ascii?Q?77Eekc8op6Kwdl46hqC1u2uwNatoZFtqY6DXX06zP6CmGL4j8/K1J8pd+Tii?= =?us-ascii?Q?akUgI3iaCLth9Z97C8ejLdvM3D12SUrNEdCo7ow2ZKgBRmLMHscPpFaAyyCn?= =?us-ascii?Q?fyK1bqMeK8Gt3oufTbCiSQfxkQanF4HgCbP1C3TQOEexpvRqmlCvpUSIkgDd?= =?us-ascii?Q?ZT42NS3gSQbSoWkZpoI+/uD54oLO/bwFgp460xwDHBm8FiEmfkNj0p5V7ZDs?= =?us-ascii?Q?OBq7s/BrncXeKy9fvRa93ItSpwt6CvVHFrYbPqFw22KDUzG3Uv4nIrA8IVwg?= =?us-ascii?Q?iilSNXfA67fknmBOo05KOUGZSKI7Si3XSloZfGoDkHtwsx3lTMu7ROm7oXC3?= =?us-ascii?Q?dCdbc/v1V9SIYGj3HMb183mRhDBcu82DGcV5KLQ3Pw34ZIOqjIQfV5DrlRz2?= =?us-ascii?Q?uRTFUuIuw7i2hDCdjw8rGqVp5cbPMCKv4VOD/0rrnAX9TyGtlwZ17qav0jG1?= =?us-ascii?Q?Fu6GtHPOC8lxaPUlvQDh1vaI5rOjOV/EMZgHh3GqVIehP81Z94y3kh0msKm5?= =?us-ascii?Q?FkZYerqjb3/1Zu9ifq7yEduJzqVT6Uh0a8NM+qrXAqZsm2IPyjW2W/9J8LWz?= =?us-ascii?Q?id0EsrLGA4HZwWaF04Z3M6HrdL4UfqtUqjTYGUmxUnm1oXjFzRtU5zJnyWb7?= =?us-ascii?Q?hhyVYJgR+jRDqFgkSZJK2+IGrA4qNFKTnxQhKzn259XFlFe4K2u7MmUUGce4?= =?us-ascii?Q?7GKieBWQveYPKyqlODX/PzXLVnmED9Yoj10kf7zNOTaNuqzrJvt/bPLplq6N?= =?us-ascii?Q?DlfwHgnoZLivaXKRcNAlffWwzSnQjzP6FzGet+/AJQwtMB5RukNi5+BR24SQ?= =?us-ascii?Q?hoyVxNf3iSMN7Fe61WdjmjIotqx2frUXEN6WQJZihBqk8S+XwdystEc3/uvY?= =?us-ascii?Q?ZuirKn4AJfu2oLY58UAYlv98SohMvIP/pDo+GjVxQ8dHSVen1dtb83KxD15n?= =?us-ascii?Q?nfYMGJCgsE6+v/XtWaCc5A1WiQ13E9D+GqwMQjUMPf1D+SQgZhCyLFWHpXUp?= =?us-ascii?Q?HLe7P3MnVoqcoFXiOFDAaV2X4WRIYLg=3D?= X-Exchange-RoutingPolicyChecked: KfjPuTitI9Bdzq0Iz8z43EFK6Xwj8xquUAIQtAZaPvw+5knax1wVviMV0Nf+V62gOjbCGHByny1yit5oNY6CVabrv7DnQRnK/ywUxp/jEV6UlgpCkBW47VLjJTDegvnTLmI1o3LfCaFE5xlCK+4RYEfMoMSnsaXU2kUwmZo+Swg7RIYnuKzbi9OUD8dNnjn+eOWQ7YBeVzaIAoAXTmfw2m5iotoG6NS7YClTiLi4Lq5rTQmLb+V881ImHprNYgl49ULUesH12GVgSiI9cUZlE6XEZqvF3jAO5TYdgongFMSb3NL8FaTFMQDpWSVyooLZ/qsUqxwlBJM30N5Mi6JEwg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: yYL4C9nKEHPS39MOYcqVNUvdM1EAzHR/ET3lbFKi16srGLjMtop5sq3t17Mk82qN65PczxtKc0DA0/RLK9LimEjceBDsrl5sPjtE/2M5u4spTetpDhTeN+eUmAOgic0A86w3gttnSm9hQxSH67SddocoE3mV6Q/dJympI73HNesA+bUeTY4ogWFkEUYgk6FSWnc01JOP7BVD3/N94h4eeitzK6XDUw9crZdQARe4hO/U9uQ241jZ3cSDjP3EdmfWprHeVMhewuH5xFkfBVDLmiLKiQeMcoV8V0oU5U2WqaBgjM/UCIX1qrGVTc4XoQpT7hBzJI7tZlEXyrXPE0a8O8vjje2NJdbFGsdHvqgeQR7HhkGLcidW1QoRfnDI4i1hsFNmVX2bnPdQ3j/QEr27K/m0OdlQq6Mw29gYBam2SEvQkeKHYgldw+knJAJM2vQbKgf+KIcMcrkI6pTw6B97MzpaSLskxa65GBr0ZK4C3gvnEJ6MOus0fbTOW4v99r0Yi5nxUYw2WUj+HkKcEkr5JkgckkArise9ZErWzA/snFF30P1JSHfCJH7IMYprEeJmb5LLoissF1QB+dXSsxPTTbiVx9af4W+0/79SctLmiiI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfb07027-cf17-442f-ebd0-08df0ccddcd6 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:42.4953 (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: L1XOz4RCREjiFnCbn7vsMWunMf1mwPTT9wrI2JAZxjFUo7xmpZ7KCRgkWEILV4vYkFWCQearA8BMFqxOwJZjSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=EuDiaycA c=1 sm=1 tr=0 ts=6a9e9720 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=0Q2gd2vOsnR98QmcnEwA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX0UuNmpht8CNs X2/8KLTYbGet+UkC7yc1pAXo3aSLzyJsOy/djLNeSRIc1NBbBXL1+XuretLrfp6cSEu7tl3Knyz hDu8j79A1mC3z+SA1U6DCeF7gsy4snJfjpYgGBoDyn9fgR1OcMXY X-Proofpoint-GUID: 8FexTgZYS-sZ0EETMr2xRF4pfrQTt0J3 X-Proofpoint-ORIG-GUID: 8FexTgZYS-sZ0EETMr2xRF4pfrQTt0J3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX1j2cAugRgxnk FmjDOn01Wy5Wpp9ow3kwVDPzydwc1iYXCVWSMcKnyIdzvOUheKo2u4qD81CWnIhwIWCnBK4Rgz+ dYIcijQhqrmbj0fKz1DBdI/leylThajVS390wOzstAdSVXOxvde3Szg096MTZl+rY0VAbam9xkS EoaWI60PQOI3Js26TW0AkZ1pK5EI2Nd/vQ4K5sMFGE+k/iNHnFXWPyzibU/obBhgHcFcZee5iNT 3I5ntuHJk49wBB1z1B/ajPcy67qAX9oqg+S8rAVDONXen2JU9NnD6ebyk6vHYlRgV64Zt5y8Hoq dLX1LPcFroBfd5YMfHFKhA4HtKieLRzLujX1NIUFu99m1ZmITdTi7y9abguECkvYTrHLV2pZdBo rnSy8njhh1+uyfGit7dcEgXCUlI9azge+994G5B6W7gHi47UZMPwbzvxfpyeFKZuWAV8QtL0ApI n5u2D4zV8DUXAt/6XfQ== Content-Type: text/plain; charset="utf-8" From: John Garry 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 9bbab0aa8961a..374f0531f7e07 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 3541357d07f8d..3b801c52e1a3b 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -6,6 +6,7 @@ #include #include #include +#include =20 static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head); =20 @@ -44,7 +45,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); @@ -231,7 +231,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); @@ -246,6 +245,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)) @@ -291,6 +365,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 @@ -308,12 +383,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); } } @@ -325,6 +423,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); mpath_head->disk =3D NULL; @@ -384,6 +484,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 @@ -396,6 +497,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 Sep 25 23:50:57 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 B3FB546D087; Mon, 7 Sep 2026 10:53:35 +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=1788778417; cv=fail; b=DGpKr3/eJ/RTOrxhG7mMXIa0QjdXK38pH6/PeUmfjAg7mgnvKqZeUesSYBDj0iLJdJUGnEKZwfwtIWYTxRfeY1FSBf6NpkAOeJ2y6UJ2P+86aLt2q12E9fLLuZwQrumbLL2O/x082rMK8e+irhQN7YN/04MJ89kBRP7hTd7AUlQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778417; c=relaxed/simple; bh=owmzdSnRU3Npol/nErMOuWZNNj4mpIIsnzxYXTMd1VY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=E8pLPFoRwu7ZA9U97CpenW/Z5KFC2vOGhV86saX5VblY0AL3mUrSHAvwTzFmUr4hm8vCYlkxYuRPwVy71Ja9FHlbicRMiftNJlpCAcpZ2RtpwD0TAmkWFKUzV/sg8FichNPrZslzQPR/quM+UYspnT+QRIJy5WIO1sJKHSucepY= 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=IMNsAdoB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=vUylcbMV; 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="IMNsAdoB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="vUylcbMV" 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 6874BIFh643862; Mon, 7 Sep 2026 10:52:08 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=Bz6vYg0DEpsHOsyJklMsgYwQlV3aN2Vvtd+RjA89ao0=; b= IMNsAdoBqV2P00xJYQHUOoXziFMn4YFEXtizuoYUjwcJAW+FgpwIM5HG9hYO2z1T aGjGKiIYnG03MjX2vqTlid3UM4xGo0LAnfI4DO/4/jJrQgYyyLqyFlhT6xotV1C+ gQjFoehKoXM7Ei8SL+YWo08wiOoC7uR7Yw6wkB5u9nFtri9FFdHyTOFjpTwlKg3P YteEtg+5b1gcOd/Zs/sBR/4N4GaLxMrMNKJxTu1k1nXt7LSwlOiK2fkHqOM5DuBl vhSVyydUxmKE9V113YVEsI4lbCIwK79nfARK5KCFLvtRuWttQkj+yCgIQyK8iGoW syUAocFX9Feu3VOW0IqSrg== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbg1ssj6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:08 +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 687Apr1o013241; Mon, 7 Sep 2026 10:52:07 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11013001.outbound.protection.outlook.com [40.107.201.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7atpvdq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:52:07 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iyUI86otKqJoBZ4ycW7wnf8O9E2ahhw6U86fudyaRAAf9iNUev9ZRA/h6XIVSZiELnwAvdfubE5ssA8q3A5YnhpzSHE2lMQfwYwVahhvbt9A9+iJYmM7bLHbkgblSHWb0YtItC1rEEVt8O/qwTdi0mFRepEPagPZF5QAO16s6iv70k4x2SC8s/7KRII8wF3pN1gxUcVHiovnyq2neYh4R4aDhER0kJHGNk+QlyFZZdLr7yCuRXTcn6ymsJ5RPSNvspGKmAEzvPHPlx4fnaxvw4GSrqlKpK4MJa2LU/3IHGQZwcJOp3+NRth/35VUF/gdL3XfdFAN7ZuGXVefMByQWw== 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=Bz6vYg0DEpsHOsyJklMsgYwQlV3aN2Vvtd+RjA89ao0=; b=bKcIVZaQlRPAedxfjzbgL4nF15UoJHWFGC4yo2gRG3ZNTthSEZkCE+qkp89NpdaGdxextptBJ0sxE20uTXroE1G0rDExlNPbEK81I8MoM6siBmD8jLSl5oe0iv8oQU/xdvKYuP3OIDDCPy1Bxp9N9TM7S3WZntSNf6fWU0KUxOk7VuYltfeSV6NVXVroVokC6aEr8uh+IzbuUyUmaX6W1OAgbKZ1zSJllJwBq7tAhKqoGkhh/sJtiRm/FZnHTd/Q/rbQ46CEMCixvx+3QBwbByLnHo7N4XuO0lVQTc+xbe4Q5i4KSR8wsXaRXbgKl68iKe3U5zr8ULeMkXEACm4P7g== 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=Bz6vYg0DEpsHOsyJklMsgYwQlV3aN2Vvtd+RjA89ao0=; b=vUylcbMVjwQwEDAB0uLH1v42u4b2STwS8Jpq1wDv/CJFwsPYFMVgtVbgI+ZRNem6/sXsuVLMBcLZQpb97IygWsSbrFuB523J4pY2kLi3lzIIPidePLyFGzxPJmLbKrPwyEzByeDnJJJwEzaG/+PXcXo5Nzuo2lBWdd2cZMRIml0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:44 +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.0406.005; Mon, 7 Sep 2026 10:50:44 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 05/27] libmultipath: Add support for mpath_device management Date: Mon, 7 Sep 2026 10:49:59 +0000 Message-ID: <20260907105021.1763236-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0P220CA0017.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:d3::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 232108d4-3f73-484e-1c76-08df0ccdde1d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: sVmQFpw2EkXjzvmV/fFB11cngDrUWz96hDI91B2Hgolj2Mz7d8+Qe53kcCs731t97o+YV5dtOXz0fgXsEp9UQ4Jiuy+prEHildq2qMf7AgU5jBR2vYz8LNjfmUidlkncVENUXfxWvA9hZkTFlc1BWlVT0Xat7WpGgmNzAl3CiBGaYs8xUjMDCvGZJeahZfnPKk1WSChFqoeubJRRBsd5iWB/M8eHwJIvz9udYCPgAUeFCWR+UbEfCZN3c4Z0K+JKCHP0mafo8EVpVx9o3IW/qGQCl7rPx8Q8hH5wAoer555ygLZS+EKbYoDca4ZimRNJn/5u4DnwJpaeRplgPJCURz8hTVnpsNVyRGzRAahBiO+2pX1xyAqOPOAULqwnwh/O6VE/WfBHoyuqaiCSrUSseOWEbpOUBaomHat5g7EfgzrLqiid4aYaUJOoxIFjCfFNpo6zmKSuj+PLVMCMXdSXLdyXCJrDgl+BEqvwY8+2YkSeBBdh6WaqVV/guxVT2gswa1HYHBf3Eh3xRViNAmXBSa9YRipKT3gAr0rthC5LHPmT8kAt27Lp/KW5HRGyNFcFRQm0THnM5BYOWskDf+8jPo+RW3wwJ5wASbu8NJUjatDq3cgNqe5MothhPCrT5VBkn0B85N759vck1YNMR7QkDc8aeSJzj2mHVvKIpsQ1AT4= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NYzIVfb/2/ueiqpG7oJ3LXnr2phitdapQzMIY4JsPQqU9lbR/S924PzMgq01?= =?us-ascii?Q?DyC0Mv9WSOiTPRX7ccvCwA4cL1xxtndPz8vOFTxX4H2NCguhk27UGajoWA/D?= =?us-ascii?Q?e4AKyhcsZERgDBAD0DtyU4/Iq8r+BDhPaCTYFP+nW0mjviVA+QCrftvZGQOv?= =?us-ascii?Q?90YMkzDjeQMFtY4pBFTp0YVTIIJUD0tZVhW95OFn7obpLxOBNnvh7pvg7dB9?= =?us-ascii?Q?WH40x9Cwz+UT8KJU5Cj/WcmUsj9cemyxDMi9irN1Z2BACxLuBKWaNp+LgSAW?= =?us-ascii?Q?/hYoOCDvElOARFx4d2AZqq9jm5Ct+KEQF2yUfPWC6lAZY/MdRESZy9sEe8OZ?= =?us-ascii?Q?MqoKMJd7CzmHSswc+vHre9Ag+2k8G6JwymIzo2t1Mbk0JEuRtI+KsuGsyjV/?= =?us-ascii?Q?KVKqh/kzp4uRGW1Aw1/vy0sX1LhGFSluzEMScgj24V/kA8FWDuqMJeDW/4VN?= =?us-ascii?Q?M6DtuoQ8bdDrEYNuedlTjZrqa37JwyB1rl3QSbElypXoOWwJNPHZaBTWO5UY?= =?us-ascii?Q?/7nn3Gcu+PC6jUEaUpP7BAOjLmqW2GYw7dQQOvw6nYMXI6cgqAbhR542bsKY?= =?us-ascii?Q?AWqet6R5UWGLNPfj/ueK4kcL2cP1TaSwNPkOatU88oIMzmiNJoDjDYTbJuC5?= =?us-ascii?Q?k6b4ik6dPxo653G0CjT2STFriTzQ/5o4dpeiSoNMjEF9R5bUB8YP6SAkDfal?= =?us-ascii?Q?qM/8fBRXiVL9vMxvRRucQDvpK+3WSPmx4owrba/pHyBr2ped+6Mob5fRawYe?= =?us-ascii?Q?Y6OsKs/2hxjjKMgJczJ80wecaAil/5bdq57old6ODS/PCCxZcprGM93XxavS?= =?us-ascii?Q?3R00H7XK4bbk43WkdRF+2Og9KxFjKZCuH04yk0FB2/7Hrv++Ti8A+9SUKPhU?= =?us-ascii?Q?gLugmATXBCdxOIpGaEKz+VuWUKgTjUHJX+WJCcKkRp5864tPXHIu2tpQLEtd?= =?us-ascii?Q?e4mfgHOezXgzrGym+EhesfPdy8eJ5DoQMrOEy7fc0cauVCfJczkGmjCcS0aP?= =?us-ascii?Q?4aZQJqhirV4LhRrHu2G9BjjPZyDv6uLi0gnVViKsjnyRvU4m4PebNyGdCLJg?= =?us-ascii?Q?BoZKs1QDkyrRr0usTxOgC/RtxcOv7IeR1aABrhiDO1Yu2J5zNZ8FdHNz9/tx?= =?us-ascii?Q?PpefN91B0eAcnWVY0ELHyiMx2JLvvczJr2bv00LhQAdhNN/o7qpjs8ieEcmh?= =?us-ascii?Q?U1dunhKXRsc1r+w5FpV4A7nCkL2szmNzdZK5BvlgIUfVDIaAYFa8QUgDLjy1?= =?us-ascii?Q?3iE6P0pQx+cQylttXrh11SsKezKlFpBw6QNED+FInziUsHrEwiYc7CkahpV3?= =?us-ascii?Q?hbH0hbKxPHm21abPFlukGbpHtkponuQoNcy/RcrLWZ469kS0e0TJrci0HySh?= =?us-ascii?Q?8n5kj0tVqrP4HLQsWeFWPaQn+0oKkp58vaINgD+m05An9pgoBS9sHt5Jsg9X?= =?us-ascii?Q?A2R5gWfors81eMz398dejDZxIS8ntWFIIHDKUcHhLR0g/q07uzn+VfvlKPM2?= =?us-ascii?Q?6RgEl5su1QNs2ULzOZk0rW75LpobZAg7o4p5fHOVVpb4YEpidEythnPyC/on?= =?us-ascii?Q?UwIz25JChFUNmSTyjvP7z/EFh6SFAUrfXQxRu5sFIs2ooGGIyPlg+T86AhGO?= =?us-ascii?Q?v3ffcrOMCOAvwYe4yww9F7NFyYuMBloNbsFaaoZQzqh7wVF0ROkt24jlua5h?= =?us-ascii?Q?ECcx2Xs6UoHBt/R+avpa3twq1TP9RQChAC1d5rNihhGedm0jl29DgL/7vBm8?= =?us-ascii?Q?alole/DJHWe8dZRYg0fBMfpxjMcpHl0=3D?= X-Exchange-RoutingPolicyChecked: iXz2plrtuT2KFE3a0HKCDKsDNMpztfB637xW7zb7IgAPqy0TTNeyFkClou+BueVhyQy6yQ+DruR258lujEXzYQNqC5kcDtPIebi1dzYXpp/cBozYJcCEb6u33/kiqnwUCmM0QXGhyrpeCuMHYXsyCzkk+r2ACJfGAiYrvQJEMyNyEApMDQsjyM1Ds4Kxy2wNI5gneOEh7PeajOftZCZSisUBwbfe8CZxWCGqMlnyK1EoO6Oz57d2kMcU8U2QN58mZa1hm3QOo0Yt1BRpCqsUp8WkEIfxRIE9w/MTvhjlkKR45kpLtqmQwcPeOGLdai0wxstZWzOjc5Cjml2d7E1ozQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lXYPUcFpJPCoLshwGNYgFgLWeZp+lFno+E7TWuyOh/srxv4YjHSCGuc8aPYRVru0/iB05GrWA2flPzUFSj5a2ALVqAomngw2DzU218Uw9mWvh0Of5Hfi3wads14p+m17+NI68KnoGW1ACK8r1kOVm5FkDxRUPlQPz6CIfycj4Z/xfE07AgEDvI+at8Q+OZQvNyp4gkO4ze/kd48LByFl0rKGOOnD9l05AMAeVXJLgMeZcZNHj00muVxVY7jWS0KrYeOb8+x94BQJtZLHjDijSJZVR1+CPO2C77dcfK7sQa70WcSvt+QSZdWealt+WD43r9aDfk6M/mSR6miWYLgtvWOZJutwupCS6tPaB+JIv6yvjsyerDgu0Hyk0JX/BYdWtuPPnv5U4RkeRTkkOI11u2f4FMaM6evAwvH2CtFFJhF/TjNXZ0vtjGkU8mUmoazZ6hq+PL2GyvGGr2cygNhC0JBwYZcqjKcV6A4ijE0O8fHLZWUE/7lTY+Q7J87LaIT6Bcjvr4hxwGOK6+LvxApqidBu4CxHIsIGYR+POU1jeerRAobJxkS84KhItpCohEdUG0o/EUJmPWLrvO8afBLMBjpIyk1DFWHTi4+6KgES6L8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 232108d4-3f73-484e-1c76-08df0ccdde1d X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:44.6151 (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: L2wnkkVxinYAb+EYFslGQBXeqknXRddp0tg82cA1opt2xDt6walc1PMPggpjKuyNSPA5EgXRA5g5u9DirSpY6w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 bulkscore=0 malwarescore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=VpYTxe2n c=1 sm=1 tr=0 ts=6a9e9758 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=WlZ9DiTZ2y1qVm1cHVYA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12102 X-Proofpoint-ORIG-GUID: 7J2pEAsSBeLPplKYQboaLF28FSJibrpM X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX75wdYQgJjyFa rgZHY3kzz7PoMyWVnjTYesJFZvtIrtH+ofI8ZjZJ5TFeQOmVivRy8aa1TPvsFKocMk/GL2MLi+6 CP0J7WUnOSDkStT1VrlzxT+DyiiJ3MmJ7pmQgsSStum/eLb0irr0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX/5g7FPrqp4cJ YyyuxmFhUKfXmD2LFdwV6NzCKJGhWn/drEXwER0z0cxPWH/T21JeZwTj4WNFEfWu8Jqy4f06+T1 MNcvDjiiKPfMaYhrVmQI3o/jPkNk4umvxMLoecF7HevjGNkxUwBureuPyHqANV9msuIlgPj2Gyf NhbhFeOU1MDKpI9WPN40Y2yce28xST3pg31YIbnhFLOvkehfuCYsJwRa/ZctcaMqVg9zCiiMpH8 FkoNm60JmlggENibM9lkrlm6p51ujUyZlgNVvQrbTCp5zIL1QYo/w4OTKGET4cxAMRb3YYRM+jp mPNpCZwG8+Rsefcl7YQVEDrPZ0vSJePg3EBalBGY2xYAViduFWkMB3aYC9UNRsKDhAVEyLpMw8+ cijUiX7pUClu94ZxalLgjeH5vaHcdJIdu+wrjRA38lI/CMg+vLeJIVT9tgRNDK5P7m44gqWaRq5 4yifzecpNEzQyz/9csEtqFHMUnQGPaYPlJCLAdig= X-Proofpoint-GUID: 7J2pEAsSBeLPplKYQboaLF28FSJibrpM Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 12 +++ lib/multipath.c | 154 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 374f0531f7e07..033ee8d54bbe9 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,15 @@ 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); +int mpath_add_device(struct mpath_device *mpath_device, struct gendisk *di= sk, + 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 3b801c52e1a3b..f24086a6e3012 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -51,6 +51,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 gendisk *di= sk, + int numa_node, atomic_t *nr_active) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + + if (!disk || !nr_active) + return -EINVAL; + + 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) { @@ -472,6 +553,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; @@ -488,6 +571,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 Sep 25 23:50:57 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 E7A1B479885; Mon, 7 Sep 2026 10:51:52 +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=1788778315; cv=fail; b=N7hwgRbZ/QMt9fu+D6OXFe/KOMwzRlq/Q6tNgHbVVr8bhBRhA9wuyY4kkMQwV9vCPD0nVoIbIAdhZjC7GTA71EyXeHzhl/aa+wkc3a5E5sk63LiaZpy/BJ4FCIN/Ro674kdOBtTEfjuK5Cs74UOHUk2AGs9U5nBQDhvC1dyIxP4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778315; c=relaxed/simple; bh=bPE6p7T5G6zNreqRGlEAePMWn7/MqHBi4FtSz4y3uWA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=h39pKpKFRXxrviEsdTmUq04civTHJQO8TVg4/nt0HB6VO39X/f2rss1MH2tTKA8Iu8+uE1FUYmoL7GPreBJBh6PXR/iEd3F8YU5y/QevUiLvjVL6EHintSFht3neehQ0c6yo1hgdRCmnHPofhLevAjSjOxgb6mSB3KniioT8X4A= 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=i7EfMHkZ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CuiyQ5gA; 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="i7EfMHkZ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CuiyQ5gA" 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 68701eoV219204; Mon, 7 Sep 2026 10:51: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=SyPiERtt95gEupUcKtr3rfwWHNQOyWfJp5Kk4BBvaiw=; b= i7EfMHkZVPKafTelN+iIgw45Bg/HZsQUuhH9Xmdvx397vkUy29I8IzcA+BCxH7c7 zJ3R3ekyW9cxJ1aYhGaOekjoLsMbhJu90Bp0xHzyIS7GbZ4+C/UENQtxskEay520 kf+79Vqthh9Z68qmM2lG7X9ccoCnIR/WQMYWvgCI8JWdnlb7wrDrgZ5LjZq0bRX7 jj18PkpaYQs72W6f6vrzf5RooZcRN8cIBMH0YjAeJ43BN/cZohceVlk7AJd5VeXy xL8XlMNzjSvr33YBH+YidI5zzCqcBf4Dis2uZwwBAaezu7coFc4XPrPShzLc+wk0 eaXPP5U4vP4fAxgBNdjFVg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbgvssfn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:15 +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 687Aopf8019106; Mon, 7 Sep 2026 10:51:14 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:14 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qGaDVZwFnA3gJVoDy8ZcKtYPNTSrabZxlKTV+NBnvKA3I+6BJvHLLu2qGmEPpIVcXT/YFlbVfotuv/hQjZO01u4YUTg0GXYPMl9yKGf733fUVzb+ZRFIWdDNw7V+aZYJ+6yzrEQrZx0wfPZaS5vPmL0aDjz3+lW1grrBb2PKd6gfN+Rr0ge+2dbdSOlTGiEEzXQoajIul/eHDr92H9Fl7CYP0eBT2Pg5GQoe5UYjvKqWBo3UlUtKRYrA85wMnmJzCzKgBwDJ5RWn1wECfz7TXEdRonZcHn7FPxey2DpLUWohCR5E5OSKto5BP7fSADW2LJ1tbUaBvfSAnlt3xdpEvA== 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=SyPiERtt95gEupUcKtr3rfwWHNQOyWfJp5Kk4BBvaiw=; b=Q2hQI76oGVrYbTJTFU6mJUKWLgQ8s2B32NRm7ZxXlhKpjyU11GtjyV0vF5rN9PF/yBXbZVFCy2m5t4V8Mg+/hEr7mo0S8tnv6FS5G+TxIjNF4J1wiTjYOi1U5WR5nXp/qtvGe5EWHnHH8DaoJXTI3jdCtSo0FI+jHcJvHCIzcrPlDoMXcB92q0wkORZVcHWR5jF3xLEbGJ6QWb3/kYW2s4n1aw2hJeSIZRpQUiUgekZWuz2D74iFiJRKd13OHc2oPLR+HSE+FU/D/eAHZgvTvls/E/o6UQbLLuXie7bsj7uCDd1XFeg4ox5JJcU4vjM84x1XXgOEVv8644TZnoQiyw== 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=SyPiERtt95gEupUcKtr3rfwWHNQOyWfJp5Kk4BBvaiw=; b=CuiyQ5gAxmco+d/mU04lOnqKQtldUzojnieeeHoV1gTrrdQ5ZEPxX41cmhHW5LZyp2ZnPPll3daiix3M30kLgvlgy9whTftT0Lw2SAMff8mFkT9laqaLU5/w804wyXMkfP/hKe9JEofCQJIRALgxZk6n+fPjEL+X2aJ/7aZg+x8= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:46 +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.0406.005; Mon, 7 Sep 2026 10:50:46 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 06/27] libmultipath: Add delayed removal support Date: Mon, 7 Sep 2026 10:50:00 +0000 Message-ID: <20260907105021.1763236-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0P220CA0001.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:d3::6) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: db6cf73b-5474-4f31-ad21-08df0ccddf4f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Dc/RcAw/mnukUCDqKje52hkISvJCL3sakRFO1JBLg29YuK59q7R9BP0TOEOYhxdNRRbdXTLMH42//K2mfKlH308S3Ca7oIe+Iki0gb5uruNHuGt+fJxwgIIK2UN9cjI1aRJyC2HzMOVPfxwDhVShdmjeuyvTerPhRdL1atIhl9wm0RaI2I5IOsYKzX3AZua3XUhdIyoTR7LMbF4zqRf/FFlb6tdWU22L2kM6igesyHU2DBBXwy0EIjw6u6gvccK6O4o00PTXBW1eaLlgLtwT0YnP4xiMuIPVW/s66thdPQExEaSpzLG5zZjYA5WFQKiEchWyDuJKCEHHBJolW3cwG6sS18gVYq5sTQwSXrQsCcwwjtGuQpdIbdEcBzsz1FwI2FeQ/e32oUvjT0xoJ/8m3G+GsYH4lj9LE4JCPRv8O3eBtdiYG/CIXc/41fvfpGWuoHGYWX/Xz7mrxxzk6JKC75/nmdJXIH/eWTqj5wBzlbXVnpo6NO1VLC/R4WU7OGYnjQOaWUzIKHz8CjSLZUoTwNNJC8+vDIHSOHReIfCTtRTj+qjpntmZaEiDi4WFrJUiVW+539tSOSdJ65Xd8QU2D9m5ExYts5gmUJFyt5ruhJiK9hLCIGs0eGwuq0AIrfO6HkS4y6avTX2XcbkGEDrH0+l9pxBmORnocg9zde3AuJE= 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)(1800799024)(7416014)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xB5Wx8mRCuDeEMAsg2BNLN0fAndwJuo/lc+4srStgxaFFB5XtfMQNFxyUBxX?= =?us-ascii?Q?m1VtT8Jrom91Ok06MdU9BDsulLDvoJT6f+RNB3pQOC6UTr+oxVWR+CVMXiOc?= =?us-ascii?Q?jo7eNvKhhehfPSZTXFas0E4zk93La82AfWnH9/95G68FHmYmdG4fCe+YXf0+?= =?us-ascii?Q?AEOT0HXlN0vxS3WsISBOMLV6AxuPJYCy+9CjD8nFYIjMwOQEx+jLl1hDTTCe?= =?us-ascii?Q?CfcFX17G6KTN0pyuScpEdcAOjhlvf2nRGR4jk0n/vwgkQQiRVBeCs0C9OgL4?= =?us-ascii?Q?aMZpJutGO04qUuVa+pZsguTpsJrPjjTrEKhrrjdMoYEAEMD8xMlNnDvOmgxr?= =?us-ascii?Q?+M0j7Ie2J5Y5iGZ1cBV3ZigFhqz5eoblClFaEHwoBwyjVyRDk/35+y+X3Qjg?= =?us-ascii?Q?hL+QvyFpF+Vk+0/ipBSiFy1VBkjDG7P+bUrxV33bmMPHt+kYxJG/tfVaI2gC?= =?us-ascii?Q?9kxXFc47WZZvchuHtRc6n4L1Zmd9JPlcbr10Ci1SXF9o6sroM6fMMVVd6e2L?= =?us-ascii?Q?SUWzmvFIAopZjrqPAxsGjnkjW0fd0SiRmDOK8dEdd9/JxyAGT0cHe2FdMPRY?= =?us-ascii?Q?UtdO+Fi2lA5wY0D+ejENutyK8SkYlLggQU7NIcEUOOTwkQ+W5y4OrAltb2f7?= =?us-ascii?Q?pUslIkiQ5AP1jn3nea6x2TXX2LkIAY8ODrGW0p3hqKnZp7MFutb8LNXWv/A5?= =?us-ascii?Q?L7Gksq3TgdIRKQaI/+P3qXKsRGHuMgIQ38KzyHEPJ7JKoj8z7YEsAxNDcx8H?= =?us-ascii?Q?vX2ofJCWVlKJhp/xSN+uNCm42O84mJZwyaIK6WICq+rtyAK3iy+JY3H0ILuo?= =?us-ascii?Q?9P2vjX02ezZWnqAUhy/2jWYfgEAFl2Hjhik0tnIbLafZ+NN9acZ3fK708cWY?= =?us-ascii?Q?FVdkWlum4jMROGgwzRZm+1rrfnQq9Z51jylFeek4AdZ2+q1ueyXoso6z4W0m?= =?us-ascii?Q?S5IzG6KTfzrWHLoOluAPaGxqXMUy+xqTi5Mp9xntjzfuXRZT2h2lFT++3WlT?= =?us-ascii?Q?vsPx6RM4kyCDKXVwP7ZbVT4NLIwzyFzDx6WzKcUU0H6cO74fYgMTN+oDPm85?= =?us-ascii?Q?OzOq+9Wjf/Yye3ruOJjOkvGOv9jqHAO/aRPUFxPGum0QONQzBCGvyBObQ5Al?= =?us-ascii?Q?2i4kbNgY4RA8LWo4K3WFX6T0awpqQy0KyOOZP47+18LFDjl1d/4LDbQaV2MU?= =?us-ascii?Q?+e4ePMC1/gRx8hIw/KORqn9TVR9gGPr7at40xeoPqXP4/O+DmSJC/1fIgQvF?= =?us-ascii?Q?EI+78k2uU+9IRbGmwXn7SJzYwafD5oWh1OWxN6sgJNCcBdlopgWadbG1LAw2?= =?us-ascii?Q?e6ASmPMdrBN6GAv4P6SUh2ev+9QKQLe7LAdXv2JlHUMFQGUK9w37fxXdAD7v?= =?us-ascii?Q?hajfO0mtSXW9GLafdCsO6VD6f5YZF0g5DEm4FokaTmpRUTVXMTH9sFJYv1e1?= =?us-ascii?Q?BEZzOiGZuQRJPhFYhh/R8pCS2xrbOGTiZdDvG1NzGsypi8yLkrMjdcf73G3m?= =?us-ascii?Q?bOYawR7Aw6S37RyL3nNSoa/GQ3pz7Z8uJNeah6eijjfkgOHog2zbiQO7Blws?= =?us-ascii?Q?09+YO+2k9JU3T5kAeU4jUWWDSuIgJFLebpNkJs0Bzybqr+Cys4icDs51Zy/L?= =?us-ascii?Q?8YAPZTU2KQ0lo9uk/goiuMFhy8YEuSIVsM3HSUEtg8J/DrXtdBeh5AJy6JPh?= =?us-ascii?Q?v5wb7AvIjAhswI5vBRIxFQMT7BY6/a8oBNTo4RcvYLQDFGdNO1OX2Lzx2Qw+?= =?us-ascii?Q?51nPe4wnfQ=3D=3D?= X-Exchange-RoutingPolicyChecked: Kr9YNqCuur/bFymecI8njlZ/VdWfsjCqkYjGSOlFWqV/CVV+dl1YgIizBOxR4TEBCcLPXnI4iKW7Q8aefBJtyY2Qe2FyI4xGLpy1dR12BA6yjZYqEgPM1QhFKEtH2YSD9tSSFyvmkh6BxHMpdGDIJp8v3HAtX5tP/5/qCJKc7APU4z6aDIMTx1+paGjl0BCbJDlbVrRn0ZeIQ9C72g5IV9pUN2wZqmtyeq8mD+q6yoYBpchYkp6GRr9ey6gsOZkZTjGKlHjDrHBFBenODzzll9Cs5I71vrjy4byHkx6grsqjxtubZq1e7gBhNxD510oHlCIOl3m9eNE8q8M0iWUQow== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SFJxP2CDJgbH3IOqxGqSvQpDoDqVngCHY6CVaq57QBFsMkIMU/Ubcd84fI1moyMCjstFGm9i0PGf1dmJy1UppljjYowgHDx3wayQN8Ptmiv4Kg88fN9qkKFeUGoQhpWBRkddm9x3EiU9Q6ZUCACSZZSZFRcliTuqqPKbXAAaotRzw22oRUOJvVw6GHs/2JrNvjaOldLGeYol/feimRw7+sFfUP+k9xH4sAsZGMItArdpACYISCAgRM3yn2/9pSlc+IVP2+HzGL4RY8ukD6VzzNs9PmTy430F7MFVQDbJ4Pirye38VYJNnLemUrSWGqUC5O7WSNIbGxw5CWNsIcRnTZ9FEujq5XYOti6xowQpZSVoXuhORwKitpZtkLPqADuNe51EW3urw8c4ySjj6IHD3nlU0tm89+zwFzJMh8dN/4fSRz058AIjQEbLZ2JPYCm59lIqP4EPh9LxAzjlW5D7FkIMX4rAD4s1RsUbnOtgR43sJ5qxsd2AUxL/Xy8XSDTa9BAmVfUDxZpwrOPZ+U0QtuaxI04zTFs6WYtubt9I7hO0FJDLyVItbhLNl0LEHtfySIWjDm06IPa0hYMoLgejdxOZRakT+/nl9PFrDl+4i8g= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: db6cf73b-5474-4f31-ad21-08df0ccddf4f X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:46.6586 (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: ds0opHQzf5KxeKI7oyNpZzEV2komeITqkvPJKFOm5r/cToBL+xwLqC5Bi84PnjXnPw89a3SOKJaasbY8ZEB0ZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-ORIG-GUID: HFjyhXmdFdVJy2xU_NtRf7ptLmZr_PlV X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX6R/sW01JTSwU J+KuL/+5vtticnJAguqjRW1ofdt1yL+5xObI+4mft2TmOG9mN6r6WGn9L959WY/W/7X8UvR10zB VFXBgoEk7VpxTCgYoZFNXdw5JCsc3g4bWThfmCdM/2MpKY6saFiY X-Proofpoint-GUID: HFjyhXmdFdVJy2xU_NtRf7ptLmZr_PlV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX6V7nyl400gg9 mTG7je4JPhv92lZpz9bwNzAgXmkKzlvGtUtL6Oq3HykJcGci3QKKpWKFDzQlBQBy4dvmX8PQgcK RukiOspMTcD5ENnWw+pksRBNjCkk38h1I5wt38jOMOH5LR00G0x8LZWQDjmM40UbhdZsBcBM88M VR7yfUh4VwGawTbDKy7WGH/f6XeEPG0+pHHgx/DL1fV4e1zlCdIEpcJS97gGeqimIirES6t1uCE 9iUnezbmV48YUVkUZYVqQgNVuGU6bZKYKFB05+HRnFQsIiejAI14ZvE3sr6dtEhkJLrfXTSeKKP o/PUlwVKEbaxf66zkV6xF2C2uveUowS+2annmpS88BnIJmTtmr5aS2bw+RHyH7iPlPNr9yFN/M0 Ru9JUmal72jn/VWBb3zg7giDfaJlnjAy4jvl6gqW6N9PYvBsv1p1KS4QdJnqrmZQBz8hGLqRcyf OVtt7F9U4P2en00ikjw== X-Authority-Analysis: v=2.4 cv=Td6mcxQh c=1 sm=1 tr=0 ts=6a9e9723 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=BfxcaXdt0Lgmg1IeN-8A:9 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 | 91 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 033ee8d54bbe9..66b6ad9c2219a 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 int delayed_removal_secs; + struct module *drv_module; + unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -111,6 +117,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) { @@ -126,6 +137,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 f24086a6e3012..9fcf0b743f0e1 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -66,6 +66,9 @@ int mpath_add_device(struct mpath_device *mpath_device, s= truct gendisk *disk, 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); @@ -339,7 +342,16 @@ 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) @@ -481,6 +493,39 @@ static void mpath_requeue_work(struct work_struct *wor= k) } } =20 +bool mpath_can_remove_head(struct mpath_head *mpath_head) +{ + unsigned long delay; + 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) && + !check_mul_overflow(mpath_head->delayed_removal_secs, HZ, &delay) && + try_module_get(mpath_head->drv_module)) { + mod_delayed_work(mpath_wq, &mpath_head->remove_work, delay); + } 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)) { @@ -528,6 +573,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; @@ -571,6 +619,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, "%u\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) +{ + unsigned int sec; + ssize_t ret; + + 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 Sep 25 23:50:57 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 23A26472762; Mon, 7 Sep 2026 10:52:59 +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=1788778382; cv=fail; b=OOT33JrskWL2q2zoqk3uUnq4EVgFKdd3DSxkqJ0RFJFXpm79kSUrKHQ3iRFwYmkxKfSpUWS1cqgzHStruqDSdWkwUmLCiibxugsd2wMP7Aa67k1poa7Q9j/6KoCOJcCipucW2hOfEAaXFdEuHjVRyeSffZEjouiP2YBjx17ueEo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778382; c=relaxed/simple; bh=kOZnslLKzc8ptLBgNlKDmoaiJKo9Uan8dXMhhHrUt2k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=b8QBSe436HWw4dHiJYsOoe/ZL7n3kn8BJ3FfwY3FJGRnU1b6XRghfUCsC4oUmErT7/IEHC/ZH30kJ7ufDaqQap4sPl0KWTUDkJOgNcqQnRp3hgrOymgvW+WYcVr3bsHt/avRXHIrTJPY+k822ULQykom++leE0hRaKAOuSuwRj0= 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=si3J1ZiC; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=x3IRRsX8; 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="si3J1ZiC"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="x3IRRsX8" 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 687305JC445986; Mon, 7 Sep 2026 10:51:16 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=51UTDenyFHghqSZp/iHU7HvgPI87/ONcVKk4stwu/jE=; b= si3J1ZiCtuHK+qGHpf1wuQhCfrXcKsz++dMm8prP530bhdnS1YYxzTG8ffFJ9qmY 8rYqgROxr1B4DYMYOndIrgwAs1bHocp6FkyFYQvH1pZfU03a2qMNa4WyULHarXyb k76lBe2JXzFO1sPql/LKwurYau+vvlATJud9KGqggwIW5Y/+CK6/VhrXF6wNOARN urVlS5Ec9kx+AAnzPBHBvLChJ2OxM20+VC6gfuVF1oyE5IuNGGb6SwfhxZoylvWe wAIGWSFhXMhz73dHohWlaJ5r2XPneVUUPuW57cpsYc/90VnAXNSyQ/WZpiC6yHNy BeaXKJuVz9I8UHkt0qPfMQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessga-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:16 +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 687Aopf9019106; Mon, 7 Sep 2026 10:51:14 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:14 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aRueaUpSTuum6GR4H6j1oEfD/x8LcyayWa41avTpmji34NvAv0Fl5m7iKGSv2u4HwITfd17gO22UXme9SPPW0TApLutoAT2mLF/ZigpgJREZ/rDf4FMzA6YMPWuwZyxlmYMshOO6yozJAmjYAW7Tuhz/GiauRq4YLwN3II7LSeWmLEenpUqCipNaV9g814g1pEJ7DgyTnJWgO1EHPGWU/+inIlWbM7Ey+5PlxJJcp9L4vASBbiZk16X2pgpSD13Cnavn47PPHnjZgMAUwv9kYzUDjpFRYAAhKmziVUzvMMy455zjTuJ+OIpzeu69G8x893OkxYv3jFQIpMeqHq6+mQ== 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=51UTDenyFHghqSZp/iHU7HvgPI87/ONcVKk4stwu/jE=; b=qlWYH6z+RiXx8U9W9STSaKoKexOTm9bSrGoL0bbvwa4PzunYWwP0AESqfWo1LS1x2LADYRG2PJAqHDqRaTcaF394HF59/PHgav4fkefeZ2597ipc9V1wUynDOwMx3XlMy3cGUI1ZeZfX3Wo6OKE5jm90ReSrNi6GDoL9fYXxoDRS/KWIyE4fKoKmuV6TTtQh/irUhZ1FpK98ZPDW65+dUQza0qlf3IYlECB5PWi4pzbgpwTerJAOf5tZ31NZc4T3KuoQ9Sr2fRbq0k4btbwT3OaeMBW1u5WdCUGA7FN0YcW4GLBbJdAblELRrBqVRi27Rcu8O8IP9HR1C8vvPgUHVw== 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=51UTDenyFHghqSZp/iHU7HvgPI87/ONcVKk4stwu/jE=; b=x3IRRsX8Rw20LM2KKxBAs6p16NPEQLC+g1ZrWUKG1c1Y2vcViKY5kTHGFINDhdld1FFfDZR0QVwHfm/bMeZMbCV+9gq2ZVhy2yTHdFJLmJjIvt2wnjfZ6K6hAs207agKh7YmhvkUBkPUdR/WPUhZbShZBkhZTiTvgfSgKm0/6Y0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50: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.0406.005; Mon, 7 Sep 2026 10:50:48 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 07/27] libmultipath: Add sysfs helpers Date: Mon, 7 Sep 2026 10:50:01 +0000 Message-ID: <20260907105021.1763236-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0P220CA0015.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:d3::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 4adcd2f0-ca26-438f-99ad-08df0ccde0a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: ADmte9525wZrowCjjYU9nkLQg3KKL9dd99tq/r2+RdZS5R8OBzAJ8H/oE8cWu42G/zpOjPV1uOJ7pNHNgnDS8wZ0ziIMKv83dEIo6ZduMdNcnFBxqOjhRAKBUX0f1jN9cv4stehuhKRn5JAjPRolO3s3Z5o0saoDC+DmFemQC0lF4awrD2rNlrSxMm9J5T599ps1lwW12kj1eAM4wbmjH/UcEhqw0Q5HfXkJBkQ9oDqVyFbHPcv6KecDrxdP9jwphesd7MHawMrN/0ALbHxsg0ClsuxYS0mhXMjZcgSXq07qvJUDTWSwf5nK431LOEXOeQqzGscJ93T2zuIcEeE8n+FLXDbR6tEojo6LaGuhMYSJsG3wJFzkzJsuSEsYzUnkQGoB6A5HcdXVAuQZ51xmAIIvD85Jrff4pk8OrK7Yb27Pdx4xQQChkucrXqR7yaa7Q60CI1DN10XapG/13xGLhzC8AnGG42j4Jllew7Z7cJhPAWvcv73FlRMITQRZioF8hxJAYfWt4LBlepEM/hf2pUJtcWDXoYISLM8VT8+8H6OWw3sY7nQxTD136wN6N8f4qEQxf+gzo1VcawcAmPDCyXJoklft4RIDjptE/U/Wrwzvz7+uwq6DpwqWi6gxYB1XvY7auRcjYafpP0RiAM+Qa2BQqDQnQfmHRinZjpYsCwg= 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)(1800799024)(7416014)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fBLOPAAuVftDh8ahJcWB4WEZBXwPMsZiH8pEG4fN+/ru+PSIREM3wUkh7KlI?= =?us-ascii?Q?YAVvj1874xvbtSL5189OdJj0vJO2L8rxD6LY5NRfGaEJKJ34r+8vkO2eQib1?= =?us-ascii?Q?5OcGVfnw+CYoBy/n2FRwqzQ7hOfUyOSLFbZHZrqHzzKY3omF1B3GlNlI4Coy?= =?us-ascii?Q?3ZVQ7JH6oUaMWtSSyOBZ3eOZQZ3upgQHs9HKjXPQAZue/x5NtBULLNHO70mw?= =?us-ascii?Q?Y0moRSxTruVHa6eP5yYrrO2f28MujJYWkxp3tFD5rnlXeXEziLOI7tBIVujY?= =?us-ascii?Q?0hxAnP6piTghmAywT1NmlUMyQlz9gbulrnDtCBsbbCFUZWvObA+5QzMJhzze?= =?us-ascii?Q?QklLTbe5Nqn2ANXayq0NTtAFUxBLYCvmfL97Gn+WjZDJCbI9ATR7jMcGsJ4V?= =?us-ascii?Q?byfb4NtwlSU9QpgvaEIhaM0ntx9zFouikbd3HkQXjGPMdZElP598iuhPUJRZ?= =?us-ascii?Q?CSB8CZdzGx0lxgpDDVnZSZkOynajFlkJiI45sy7L0E1Iw8MRiA/G4I/5dpku?= =?us-ascii?Q?0ERrd1Xj1L0Bgow3WiZLN2k79qlbUrqW4NrIMJ0y4UwQnIauizkXu5xmtUii?= =?us-ascii?Q?McQYiKz30adpIBApkIcrZvu1sCtKMPxBpL4SllshMQ4VDEPO+vWWoWPEcBic?= =?us-ascii?Q?TtDUF9eNqOM8VA33oY5skXQ9CGGPbP4X4+nsU+XC8cAEum+oz4AuVEcWiixX?= =?us-ascii?Q?XxkpiQMkpSCmfEeNEdS5rHRoa8yHqqIX2Dq27faGAPUuq6BZVDdXtCCetkkb?= =?us-ascii?Q?5GpajtiNGPXLCJNhThjp5/JUGfR2cWM5PS4PsX61W44i4y08artfQv/sMsPO?= =?us-ascii?Q?VP+kuCKLix6bR+aNnzkJmuRtQX2DPw1YTPXiuY1MTZgyVkxoF7pjPbdmOFxw?= =?us-ascii?Q?ZXZwAdN4MC96c0ieehJ+74JEGhvye1gx64ThZilwzsnys02hT1IrY/2w9Xnp?= =?us-ascii?Q?50bmP+b0XalfzWmzzR48JUzTche1FgZa0U5vtv2Z3t36eXrAImRZ3/XxqdLi?= =?us-ascii?Q?2P01sZGcPktOhVFMz17KbLr3E6OwCRamAp6RozvcTmaavqpGBfEuIrmz3uCu?= =?us-ascii?Q?VJWhjB6X90BACYSAXU5AsMDGpNhEjk1esLslfbZaxeA9R5aV7mN6klY5eKMp?= =?us-ascii?Q?kqWqqIvoH3KYi5F1Ue++RJxTT57g22mEkP/x50+szrKg5EKDEN4AtbeLQSHk?= =?us-ascii?Q?mYmVtwQkl1TdxQyco6ji7T6JjYrGqYjYP7kejWLlmQbFCQEnbRNaTEZo2pvL?= =?us-ascii?Q?GdLvJXDJvIWcgMx2lIWG8WEEQz5KDUYVRm21ZKMCCJ/t8dtGVCMvZAvnVd4B?= =?us-ascii?Q?+w1GhByB0Wb3oY7ZME+AdV1xr90BDbtGy60EnCZ46aLULE4HAZCnFGXn3EST?= =?us-ascii?Q?hasV06wYXlmH8uJYaZOUrCltPOoZcQABjaIXY4CjWg0G8EniSIYh1TDJxPAd?= =?us-ascii?Q?DoXpwv6JTjSeypSftBNebMXlo1YADgzJVaI60BhLYQhM7jdUj2Fzseb0UW/z?= =?us-ascii?Q?3CTt/oas7wEaNgHiu1lnSQbkrexP88PUsYoxL+Ya7se7MUkYKygh4ZTc7PE3?= =?us-ascii?Q?XawoDxraMWHj5YK5vuvQ4b5U2a6RdRUgkWCll8NLaVpdS3640lQZfJDmMqd6?= =?us-ascii?Q?X6TsN0OUEPI+jcLt+9WEpsTnDT5+YjIk4+iGLVUesf91O1GuIQThoT1VHYcE?= =?us-ascii?Q?RRN7kJJO3EArO3stU84WglxKRJiash8sW3pB8r2CdCm8R7zsbM5QGHVokfva?= =?us-ascii?Q?2JQucNtdNQ=3D=3D?= X-Exchange-RoutingPolicyChecked: xk7thvINRWbSlIh8UnfoyO3DeDLZsJ8UlIdZjr8d/AwqxE6fZtxefkKNUDt5+7q2HgJykAmkXXH6Jhx8pekyF7dnmv3XeCR3beuEp7ymJp7rp/Rq+FfX9HLaTBZ8WyhGvWqIJwa6QT5VVt7wW3Ao5bgCLQUWDX/FRzgZIofA9jLGZuCRVEpCKfzLuvofXut5PqGZ9OdMgmEuxvCwF8pI062FvQT4sGPK9ayfKcXXvGA/Zt5a9ro8V/s0RAErxfTt0s5ugX9gaSNymRIahKpM+KYFT7ksj5rlBwVeSIPAB1k3C1MqcxLwi6HJtxEewEcqB9Pw6GGIdZXauJrAT3CMZQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: YClLcW1qBHyPSbVtrDWYOvQI+7thufSOG9v5i/Reb9a4zZwslv+NIZ4Ax21lwzvNwK7qn2EwwjL2YRcAdeKriU+1vg4tMSWgJiTTCwimSDf77cx3aSwaAV87B53pPtH56E4Q6lCINdIO1rDKFCqhJzXaCjl5Is40jKFRtQtt0iSve8cfusbA/OTXuvatKifTC+R31BIyo5ERHODQXxlb0aCJjLMTLUXOvkT+jbRrBZWsSe6Nd/nK1RELICuOTR20cI5um+VsszqTPGyWGMBjQ21ly48kh6zlCzrFsxY5l5UkArApjzmjaYgriGlgbEqb8IY6vL2vKxXxkj5OP62djrkSn6cqa44pUUcR7zds3NbDN9kC9fPsbCl9hObwDS25fNl0LfXTUPPYtWGlmq9Br2xjjJJYPxSZbbRXsIrepdjWEQzjshFgEmx0y3MOjxscLkKmDZktrF239dpW6UVlecoQmUtW9zc7AGRYC7DTc/nWBlMUyKbm9L4xGZdRUfOCIwaqqWogxzGEI3t1eQCKCc1KCszfj0i9uVcR9vb5z2OojWreyN8+grBS6uFSnC9jew22T2bj/LizyNZ2WwcKZMxX5w9WuZcmwIfvHQexgM4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4adcd2f0-ca26-438f-99ad-08df0ccde0a1 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:48.8476 (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: a5HF5UR+jPWEfomaKU0c5OOmqtwNXOyFGyYY9riQeYCIbQPjUOQhrCfXqTUZBiWQ5Gw6ulRalABVl9RVAuizYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: 2W5nqIGP9GwgSGM5zrcUzW01E8a0zWEv X-Proofpoint-ORIG-GUID: 2W5nqIGP9GwgSGM5zrcUzW01E8a0zWEv X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e9724 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=JWw5DRbbQmmJTouRsXkA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX4k7sDo3a7YiY 9L9eZ2oGtyWEi7d6loofJxoSfxhfGrugmW5toCHyvNN50xwMSk9lVkI+eHOYWMWnVkaEpX9jeRb Xih+37K5PhMpDihP+ZRy14lQ8TR4Ssb4mp9G84t/Y7hCP8ayxV9F4nqaatfJbeOSPw+QgsxBWhL tTYluXyAJXqrKKBI2Ph12s3HLms3wn/dqvk9Y7e4WEZ0B+UlbkW79dB4Vh8ULoe2gQhSHgQpOa2 vVlZbNNzpD/m+pBsHvUAcK4yN4GnH0I1Ry+3iiMBTl4EjfVRkDbIQte/4BZRq1ntQkfAEzfcwkB mG3gbBwIxC9Q9jNvIoa+TEwEny+2Id2QPZ7ufE+MqA8bSydxJ4zzD6ZB43GQpHXsHmP8NJB7nFd WBZsmPBCqEYhBuMYii630bjUgrZeXWYCXR25eAwVin24blB+5Mq1Jsolrryg9kHU7rDoBpRls5Z 3j7CQplEshc6SJ2l5wg== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX0QywO/gvE4V7 f+MSonGEw5535wn0hD62MhCzusK9uo2E+KeOJGg1AJ4QfZY/334cloYb6+ugJX4bAvPuRkYCzdP oyhvjJJGfNtlzxKZhX+CDpnB34Y7iyAxA9Idb4Qv+v3iLxpB2/Ok Content-Type: text/plain; charset="utf-8" From: John Garry 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 66b6ad9c2219a..7a3708ff37254 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, @@ -118,6 +120,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 9fcf0b743f0e1..2bcad0a9fda02 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -619,6 +619,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 Sep 25 23:50:57 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 7F2F046F4A3; Mon, 7 Sep 2026 10:51:52 +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=1788778315; cv=fail; b=nV5Of3K3TC2MN5t9pcwWa0Jqtxxt9O2lSEKQVDiZ4wyx4HRCgZ5MbF0ac3pPCN27pp7YHEPsLqONOqLgxEkNnczJ1Dxhtt2d0fRLXlDQDD0ESdGz1Ro5bx4Ok/7pTJLhD3wTr3bPzaSlNXM3HYM+1TwwylzkgVHTMWMYm29D/g0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778315; c=relaxed/simple; bh=l3Jx527Njv3LB2p0FnrgaL31M3DwO6Wwp0N/7KEesfY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GS0Pq6cJ3Dn2oCpIwcq3tdsrw+wXANzz1qZhpfJpj5eh6KLaJzcvuuUVpQc97Iv3i20jD2JuGAh2OYZfnNhNsPYexae/Nzq2s9dzR2K2ufjoTou+zjQ8oTyeiYelRXBmelBckYIqr/YwAJFVNds66s8QLDhrh54+94NNdcjbFZk= 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=GnLrAQUj; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=szs5w2kZ; 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="GnLrAQUj"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="szs5w2kZ" 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 6872umgh1096886; Mon, 7 Sep 2026 10:51:16 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=2HkUozqt65yLP54LrOYLAmfMxqTb0yoKfg7Dpwq68d0=; b= GnLrAQUjs15OBkJc/mhtsStbmBk7e81GB+4s0BaKEbOxeSQyM6q3LPZhEChHKkrq 0Eq13ENwHEm5SOvx1myMSN5H7TmfYi9VlcvJoz6pWPh98JubsfJAtb905dubFQg3 dOH6u0tt7i3jVIb0p7AqlytalufdtRqfAaT/NIP2XgApygAnwqh34n0hbQkDgYZY Y0Q350H3qaHn5G02YEjZZPWALVyu6CL7IQa9EsgWayXugYpwDX+LTRePBzTIVawp Z2xkIyT3Wu7Dd7ukwunEIZ0ZrJ1WZCM2RRpj9jwfCcLro7mbQnNztckrAphWfWKF n8HwoyXIqPUVrAr5xXL1Eg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbh09twv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:16 +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 687AopfA019106; Mon, 7 Sep 2026 10:51:15 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dt7yHZckVbAB80GTQE47W49hxc8HlJAlYO52tTi+LyInyo+BSw0QqErH5TFLoPj10X56w75ZtKy2RL7j2oQ0OWTtxNG1hhNyxt/ShNRIBGESzD2U7kt/t5GKJ/outrNU+FK/InhbhfKHqLEVQKYWJZxFc0bhXkpvWRF6iMgSVReklyrHmy5YGtTnhgj9IaFhutGFSsKlM1BOusbr2m5E6vj57JUO5nfUTHB5BDoYfyeZciauDTFeaRUK3jdiIPoPqDX1dL/kcr5E1yswpdSdaNUfDY1nizIEI1cJKcpOzww0bGpVu5ASbYzRuTcrRCbLM87rgPk1Qvas1BvbjCj/KQ== 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=2HkUozqt65yLP54LrOYLAmfMxqTb0yoKfg7Dpwq68d0=; b=YElFYg/QygFYKzTndKDmKrypBk7E1IBnHM2MlL4XC6bxc26uoGV2SvVOttcz5V96OQU24nMwwdvVUCJA09mtB636U4mMtqKfJ4KBsP0tovW3HM9Im7BUX0YlhSK+vWDqomZyVN/5StoWYIt3MkH0yNmWlcyebD09puCw/tA0hiuktiHQnVjIGwVqh0oINYW5Dx9GC6HRiYDJkRVKgkhfxwO3DbAJAupcG7AdSBkQagkKKv4qMFxQtfzulTzKE3kwZhVWoMcqj1SkQHiaAxcYCWhwq2OwiWtQ8HxJOb9qyNBe4ig4+0FR74/PBaB9G4T2lUNX9mnqidml/v7nvf7VRA== 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=2HkUozqt65yLP54LrOYLAmfMxqTb0yoKfg7Dpwq68d0=; b=szs5w2kZUZWlTiuv1/MEfp0IRiY9PYlEiDVovOe3QjFP+Cd9RMJmf8bd7SQohlDjkBKbywsvU3whSGR62fc2BHFQMSXIj1Q0/dqomUs1OWQnYE0icAP5xickL+I8+mLUIfnAZmOGG/7FdA0nUcJbpVQTSoW8dUf95+w4xH2htxk= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50: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.0406.005; Mon, 7 Sep 2026 10:50:51 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 08/27] libmultipath: Add support for block device IOCTL Date: Mon, 7 Sep 2026 10:50:02 +0000 Message-ID: <20260907105021.1763236-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR17CA0049.namprd17.prod.outlook.com (2603:10b6:510:325::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 1fa8300b-95f4-44ab-d7fb-08df0ccde212 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|5023799004|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: iSpXNGh5vkxMyvUPtzNOscaQWURH2Ld1XlTPPwiX//bdv7GbjP0QPvRasg2DkxWMkC/uBlN/z9vD9d9iLv9tVMiqETRkqtqsQg4eJuoeoKRqqlaAN6H+m+zqgYn+eatn7K0glgNKwhm7B9LQYmHzcp8/Wm0Fx1XlDyzL6lz6vc6p3u4r9ziYP5lZp+yONEsNDblvoDGBeRMxC2RMwMRQF9vhEVkddeOYG5ZRG8nbx2xKFGRtQFIh8gt6qNnnrBKS8fHxdbQaZz846PLB8zWvgH/Hd6tzg9BSvAAOjWegeQs+xBkuyUFbgpQGjBruN2dUXxPZpntuTMkx85AUKamoroqYa6z8FaRAGP4TzDxrXJ1d4xTkX3RUvx8PKVKFerC8LvkKRMYn/RtLtPr2Z2RQ1YNjXFxuDwBESyuoiZVBB0mmd+hNMSkeLUaiSoQXGFQeX9qthR51arJtmKXsLkzdObBQasNG1elnxR8ot+bKs/qpKzrxAEQ7u3pfOSaTzkwC+9lSE2Vxr9GQhXrxTpoYK4zvvQfIbH7PSG9GG2/qF6vPCXd+U8GxWInU2/CgBY+DSJdpNt0MdC31pZJzrOr6klBkEsm9nsrf+7LSphK5JazV4Y5hokOh4h9nwNX8CePrkqQrjjDabrhyUTVONt/RhtJWglnTO+y2bjuBLfcKHjo= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(5023799004)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wJ/ZIxbpBoN/TUMnWel63B4uDPt7u3UKsoTR2bsqnpafTk23GTJgb9Nw7hty?= =?us-ascii?Q?p8/PRBs2GXbSBYvSXH76aaw4gNwYuTn+48UIkc+bZNcTMFX/s9/RQdJkzx5F?= =?us-ascii?Q?KW+gzrlK8+aZYNpb4EKyTE8pxlv0Qr/Al8JeK6+sL2Pl5RIL7Y4C9Ny4Z+9u?= =?us-ascii?Q?VIW1rBULYKKAapgeQ84T4bJZk3VDo3vjauaFz30kndarlTmQGUIFsXxRJk1V?= =?us-ascii?Q?be3aQE0Cr2SDOTe/l/j9CtSzcoKJI/fklgu+s5e658L/9LuS+a0ZdKhaT7Wv?= =?us-ascii?Q?9c6RO+uVJHP+4FFymw/vGKhLBwtYwYC0RcLcmD0+F4yGGN37LIrhoyayGNxG?= =?us-ascii?Q?9zFCVnDosh2ZfimQM/uZnhQLs/1cvfdmXI+qWgT4A7P5UuBpCcVYFuGqTxmP?= =?us-ascii?Q?63HS/G4hHqg/yIQH0yZ+q2bgjaI36n4Qj9U1zKf/751/F9bt91oPGS4rPuQG?= =?us-ascii?Q?tR6LCL5C9KD2sjBw9AmqGoBcTeSQE4bOZZkpPiK79ZEmJT5sb+oNSi7aI7Qk?= =?us-ascii?Q?qESwZjXIa4LK5/TvGuzlOoGCpPKriv4nx12Mk1h52gFLfqUIMYBV1cSNQFSh?= =?us-ascii?Q?UpFuA1VLnPDukJEZTgvoLC1stq8pjLAjUHxVvHTKTm1rB1l95FVJsrIOMbvV?= =?us-ascii?Q?WfVbTx0i7yvSYOaEVzwNLf4OXMimMknqYRxGLLaFTdaa8pxhQT7XtFgrnDUl?= =?us-ascii?Q?fnmuDb6lWS7yVlpd98IskFZyngle/9wr5yBwn2wixHTlhxcHwe0XaUF8EmpR?= =?us-ascii?Q?Tr3SgF/TrK1VbRSFQWlcWrK4cA0hiEoX8/G+KnDwDE2OBrsh//TRE2wBvAtv?= =?us-ascii?Q?+IHMrvbE2Q7L+ncS2/bi5Cb/EHvOrqXaSmZu75vD3mzx48dq8TK48ZN+R4nm?= =?us-ascii?Q?kEN0wUYTIuwbqT8tA2GdUMdVckPCPiAi0JvPgd/go0CPxqq43N8jDiHUWTWz?= =?us-ascii?Q?KcyOLSklKHlpKMIyoapc1I1h0qOyT7tvfretXcgksUCGTBRL8nms1zygXcxv?= =?us-ascii?Q?YmVdZWCvg9aOjj5e7aKS+WVsPSsQvv/4H3MLKjcwYjb5rCwYJ/4sYQWOhzgr?= =?us-ascii?Q?DB3qblBBccbQlcmbEfjJJUgGcltvCdK5WAmMLR6EHuu/+cLAdoDzJZwk3i5N?= =?us-ascii?Q?yZUcQgIvvck/E3JEwPMLDdXSgVYxqunLiA66Xl4i9CH/JxK1Th7KR7eQlm19?= =?us-ascii?Q?kPz+iVMzqJQz92Kr6I3dGk2m3+kj9ER118tkR2rPFLYEvPJupiY0/9Od6vmh?= =?us-ascii?Q?Gd9EICxCbE5kHAoHIzeLALyrCMdqfbTTHtZUL3/0X2khbXXWhWLWEdi3sHjr?= =?us-ascii?Q?ExjVsuT2vrs6Y0b22cAzDx6QuA2tExIA/GCLFRO6M0yssgp/4uXmsh7vppr8?= =?us-ascii?Q?2EBIu+sNqLgjQbZM7mSRzrDJcURLDRF/MFa+GGyctpY/3S3bGKr743t2NJbE?= =?us-ascii?Q?c4kU3J6HVIsIVaHCFT7Bk5zgHUKvY7Rmyvtw8wmQLIXanZh4aR09jixVGFxs?= =?us-ascii?Q?Qwvhn9TbCfwGnC8jZ3TKUJsM0PECEMsdhdGGe79sBcemZL24ABOeJlz77Uch?= =?us-ascii?Q?QZCn5/84eYOquUiEDCiFki8qr4JI1plTuslPyih0GthAAD6oFaaUdMmQlR4H?= =?us-ascii?Q?nOchPWkszSm31QfSvAne2ZDANqkHy3q1K4ZpPbcN5hrINt/YUfIApfyUujs3?= =?us-ascii?Q?pVevdILukM5knAeRB8Z0kRVVXqGvIIW/vlBToTEQvHD4S4YaPQuKYz1/bUJ8?= =?us-ascii?Q?4HU5JQIi+w=3D=3D?= X-Exchange-RoutingPolicyChecked: 1IGMzPyFFeE+MEd1PLinsQYjAV1Zq4ZhJgwAekIOp6Me9npqsASkaoXdLt/CsgLtwHJ6U5FckCUuoR45TiRe5H2RSU7EqI4D1zCWm8vkNNguferJLJaa7GD1n+av951xVFVa+/jE6TeyM8eZJ7jwg4e7S4lP+h5/W1ADAzVUh/+9SYMfzSWxVHWIk3jPvhusZwY1emDJAxht2AHTbaebL0UBSsod2pTa3VhSc76638wkN20uhI9dXFgyaP8gJMMSh40+QhMfG9m3x1CIFgR0UwiixDcanNlIKX3+CA1cK+QnGcUVI1Nkvtkhhj8sDISv3mZXyIRRzg5qAfFwTTmS3w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: C97Dg9OEwgMcOUeGyFIDEjxuzommWMAjuZganbFNFVpdgOmFomuWM2YN5TeaWKy6IOQB3jh4beoywpFzMW4DQlvGHasVit0WlzdnmZle6H7ca9a0Ude6ozccJuJzgN0MIA1lhATq5kGx/K4aKJSRsaauAuEQbo6VPTQPioIwyyNX2oHkgvI//1DcfpZknJ9HOgTG2VVY6lMIM6s4D7RgB2PTROxUVeZGGERsoCeXxgFYYy3usF51PgDI6EL71USLgQkkRX/w93xAYrKA7eE7YrwVryG9197WEt/37or/Q8zsZfdd+MG51KdQPS5KgdQWRI0ZrsIG2Gzd1lDyVrjod4+i8r9I3I38AHOyMXAtZLbZgVzsgYrPQEXg6tV8WZnZ3YCQh5O3RwDDrhc8EawjXUVarDZ3n4Edqy1dyfaruShKWty+22YOuiOWWIriRScOr2LSRO6Obf6clXrLt0C9I4KpbOvyxzAC8YlYvfkPYW6Q8r5G/cVEkNa3P4UIQSgf7r7pC0VlA1cfT9WEZKh8OTQjhCfxkgR5728nvaR9oN5Vyuac5AVZkrEuiOdFtPZB5PW54sWAB790DykJb5xoGYaJViJ2M+Ck8o8RAHaVHlw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fa8300b-95f4-44ab-d7fb-08df0ccde212 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:51.2759 (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: DT2f7mB4BIKwnFmDu8llZzUd50kBENrwOMgsFTae8lo227ilcKv+e8OSsjjen3QpKSEIMRhU0d0kPx8HCpbZIQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-ORIG-GUID: gIEW-AcZsupSoElcLVhqMWn4rHIRq7Vc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXzbKuNPQhX1S+ a1RzjFPEaPXY25gFYPm5/eiZodgC0up7ACdO+PJvxc1x61NEERfcNiH1mzkXlbMmUkG4IvyWosT bVcsVcMFexOtIs6v1j8otVAEvNbLYeWrQG3IrwBjGX47s94uMjFwz71I85sqdpF0hSuNEs7qAXE PHyspGWBJjo1XpwhA1KwdMcClhZB9gcK5CGcO0ncx0obS75C7OMv4iC8LJLQ3jy9Rd7Ou3W5c8O zJUH68F7Ej0nltUhZW+HV5FLs0uIuOmhZov3qNgK+fXoYN5HcUhrK8FvVTMTCKN38Rqh/clI3mD U7MCJZ99nabddHVTbcG7Ai6Gv4veF5uNECBvgSTK0E/wgICeV4DvnLUuIr+NVDvFGHL6HyOjUl7 uCbHyd9ugUasC9te/aAwJpMkCisoOAbfuMXna/mFDTS4/VkLVwYYQti0ZvmcSr/j7T47UkHOArz 9u0OLY6RyhbA2Z3FoCw== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX143BYEJfsC+J GygMKRZrVd/jeKENqqXY3gFKZzlXaWAlHsZXG4jQw2yFD9Xi4j4WIc4vWhf+VmEWxqFZc0+aEwU gQjZZFktWLMBCsYPkykIKCQjOi5Z8OKqD/rxQ6Sj9c8MqFHWQvHz X-Authority-Analysis: v=2.4 cv=GKE41ONK c=1 sm=1 tr=0 ts=6a9e9724 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=6nTNfoCXqZZSb6MP1VAA:9 X-Proofpoint-GUID: gIEW-AcZsupSoElcLVhqMWn4rHIRq7Vc 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 | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index 2bcad0a9fda02..4afb55b5bda51 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -454,11 +454,53 @@ 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; + + /* + * This check is duplicated from sd_ioctl() as we don't pass the + * partition bdev to fops->ioctl. That is not yet possible as the + * per-path disk is hidden and, as such, does not have partitions + * scanned. + */ + if (bdev_is_partition(bdev) && !capable(CAP_SYS_RAWIO)) + return -ENOIOCTLCMD; + + 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 -ENOTTY; + 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, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 954CB46D554; Mon, 7 Sep 2026 10:51:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778314; cv=fail; b=DJr0/izljBCZzOSI8imtHKkBgn0cenqDb6070ny/CwSEMf4Q/TJ67Yh0a6B/avgNFcZGLAEjusKfHO6T9xd2rS6HpvH56zoDeVWdxm9FAaZ8MG2aGbmryNWLJ/5hGYd+RL3objqj/muSwyRKx0FaLkbxjyCxTWp2eCpp6lShtFU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778314; c=relaxed/simple; bh=ezUVb7R/l00PyTmp1Fnunx76QqQTTH/ssrxL3g3CEoU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tyJn1wqeHTu1osEsbqPAZID1XNPjzc3xfeAYnDQTYTzIvP7vfK0KtJxLsQamndVfS9cyKrFWDrBdwy5yjPPE1FuSzHHr4J7RUS6mc1Okxvp/HIhrsmAIdMExB4ZNm1vsjck6TDTMzS+zjhrK7Ii13ioivcoGqSmP67FSY1QbAnk= 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=G9hZv8e8; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=OhKtm1Hp; 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="G9hZv8e8"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="OhKtm1Hp" 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 686Nwj2Z229226; Mon, 7 Sep 2026 10:51: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=+HSlvr6KaBXEc4vTGwl0gYkaxMc4vWr0BcwqGoGVvfU=; b= G9hZv8e89a1AuNZ0zP3SNOS2MUX3d3tJqfo6NJjsynPnBO3rRyT7vby/l0jsKpZa yu/XYybpvuawQQTYdGhgf4WnTXweAEvUTnXXwCUiX00uqWhWDN3hNcBHGxToWdTc aGIJn7FCTztbDMKqnNDqrnd7xY34Z8bEW6xgQupPtdymaLdwmqM994cdIjog/Fvq sQB3PfTVJ3/URQdQnmXrPaBpbGxfoOMKzLlxVAH+b1LsRnpTasPDhGcMyEX5Dhn1 GAL3lGb2lTF6B1inPiG2IwymcHYtolY/jC6EiWiwEpdAf57SO4PhYVtNJxi7QERD AzjrZxR0WBL4EegLXTxquw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbg1ssha-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:17 +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 687AopfB019106; Mon, 7 Sep 2026 10:51:16 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vgtEu40f86ySc9sBPwToAoYWlt1tejJZTdiVv7upz768vYX6lxGON2DtnuC4IWq1ES4PdoTuPzJdDtxlibyPaZf3GkeNH1DG47Z4n3/AHqmPg+bFm+MaMyK8d46+MQ3CZMUZ2XVGJrV3jnEeBwPYeTNd59YWnXrLFuPsBXsETgxrIvSC1hYdHVnJnEwQvSLnDNuKP2Vki4ZERGgcYcp/fu6yKfcNRWh4NlJekW5RV8F2WDYA7Tcvjve1Mb1AcH3II3Uwqn6r4jCz9A0krk7WzQd4qg+KxWL6QwZK4gkTLvfv/ZEnQaVHFvTCec+l6lR9GM8r9Gxqi9G/XkcDv3lSbg== 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=+HSlvr6KaBXEc4vTGwl0gYkaxMc4vWr0BcwqGoGVvfU=; b=aWqeNLdQSVGvE1ZPPEeoJhbPJ+as/zwJXyEHyKXy7zNtmirDdQlbIeJwzj8yOS8NgsWeEaTtMAr+hUX40f14EFocXwLzTUM+eSWDqEnoha63voI01c2idpWXTDo6nrIEVZMjZyp0w45R7afntWUaJKMY5OEhQwB9ZMfzquRd4iHpQzOtOPxRzVndeUX4GzEuFM5bTfq81OY/tMb8Nbi0A028Pc+xOXdLopXZiRZdhY1yLzKEHlaT6c+fuf+0s0DyWB/5tId7xdnTvU2HJ2/TfAdO7OErj2B4M91HbMJbY/fmdQ1E2sNM4a7UXqIMAJ5dy/noOEGIB9+eJ6SEXI78SA== 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=+HSlvr6KaBXEc4vTGwl0gYkaxMc4vWr0BcwqGoGVvfU=; b=OhKtm1Hpj4J1HfCP5onha1oFBBLccBCo8quDhwApDZRZnhsmh34Y91/riConJvLihRicFl7T69CrhowlQL4pOK6Ev/f8qBSTvA+oOiOyPZAUG6G1183025ZFaySN0CJgE1AMNvhK/63LHxgJcP0/egQtfQoR7M/tQFU6lQ29cy8= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:53 +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.0406.005; Mon, 7 Sep 2026 10:50:53 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 09/27] libmultipath: Add mpath_bdev_getgeo() Date: Mon, 7 Sep 2026 10:50:03 +0000 Message-ID: <20260907105021.1763236-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH2PEPF00003851.namprd17.prod.outlook.com (2603:10b6:518:1::76) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b500f63-81a1-48c5-50a7-08df0ccde34b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: w/c0KZrGzcIrafgO07hDd/bDQF0S1rfNpFz0Li+HTBb0uJTzHEi5JtJWGWfvHK1e3O/sMkgtNvtQxKAlRyfe//+COchVqTL1vNTGO4TGpk9kSaXqTTacXBfcyMsWzG7Hw6yuO2hB/l/xZ+g2vvBiIE2gCbAXGS5IFbCpLy37MwhaVLjc36ny0LIDEKChY3OkSMXb9l9GBSGyqAToQ4skYmpka96v5BCx7wNQDw9HRCQOfYnXV36KRqHjo703bzpyChdk6W3Y+EN7XgDH7AQ8qKv7ANI73Qsd/mUcnKQHshM0W+3YmehFKaU2IKaassYVJKdiO1xI0O/6lheb0x2EMGpo1YByHyVZKJqVL05pnR64S4hiMBOlUKsHNIlP56zYZ2ruzTWPfOBWPNSRVp/JgLRNgp2Qy9VwlrjNPonYJEb5hHf5X8fRtJOou81qNL02hnabD+7jrSXerXu3+s0Z8cswBLPURr1Ce+928jKvy6K356/vS5sldEvPVxnii0DyLB1wy1BlPuhc6kXMwzlh+o/JAVHpJSuQJZ/77YwFfXyZw0zkXLLNr7azBeP9e7KW9N5MGiZHi+MmuQHqzwQ8GoWjOjreSIrYWO4T0wiB6Idh4OiEzUH2Ao+RDqYc5fuRFK6ZhO0MMC5ICsF6MxpFHwD9/0QKfqRT/iElvgCtV1A= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CG5XP07Gx6y3A38GaHLWDvixPtPCqRsEroEZlSpO+IM96SwXvQPpPXA7sgy3?= =?us-ascii?Q?/Mc13Cdrt6mrsvZst0UgvfM1ZSzmtI7rxtLWWE9fUbluYChMeGd/74vJ4h7S?= =?us-ascii?Q?FF9k44Pw8sVKmhlh42oaJ8f8xAtzyOsfvKsjJnl5uw+j23i560wFq78c7rOR?= =?us-ascii?Q?7Xu+Mg7bPDyh6b4SyR57KbF8h0+x0aYF8Ed0hX/XXaxZWnAPdxHdprdMxl/m?= =?us-ascii?Q?ExnDgEKvaaKQIXd4ee+Fv+HP9HH8nRMoqWFoZh72nplXGfGGRmrgN+QDj3Ko?= =?us-ascii?Q?q9Z9YrdFiwXNpUIkZmLptetdQh+nuF34B5x/IYc6nc+3P5wJmyKawLWYKLVt?= =?us-ascii?Q?hTe8ZgxSB0Z2I4ooKCKymz+ZPQ5R6yBvrrQaUawFCN1agPEAwN1wpFJuOBSE?= =?us-ascii?Q?2JpJ8LCdsWQXhQr1LO+vznbURn3dgvXyocUeMVakYqnjRHngLBDPUAyhi4Vr?= =?us-ascii?Q?eFmVNfKZwjRNvdBdSJvNjEXdcLVyDyIsGWH4IjHulQ5RBjqldtXAYCWxZhhn?= =?us-ascii?Q?gd25XS9J1JeFGS7cN8gTFSy6LEgXMnoOmFjIu5M4no7HdfpK9PPS+HUXwp/h?= =?us-ascii?Q?OJKn0qejX1Nvkjo2s7P7fXqRkkT2Dg/NYn5DiJRXJDJ0RuvXWilVDnx3sXYU?= =?us-ascii?Q?vUJC4/oXLQiw5yrHosoJeynb2ZowV+ta5LSvcVZa5cv32wCn6N8HpEDyMpL2?= =?us-ascii?Q?S07qfgVyM4pn4lmtVW6MCHeJJUfQ1en9pwuRc2SyUyYfzIvUnFpUtZzfQkRR?= =?us-ascii?Q?2LpDkkdvbeuh7Y4HqG9zxdNfn5vt+IHRo1m0HW2HcCxBXZAYimzKHoZ8n1/4?= =?us-ascii?Q?dHinmqJIWpiQm9VAJs/It4GJQ7QsNYF5IFLnv6gVjEsYjQfTsvccMRcMwhR3?= =?us-ascii?Q?0YiOCBx73pXpyL4iA4l1mSBwxMWA+ykxaRbArlkfJSBiR7r3gmKzoqO+5MHD?= =?us-ascii?Q?5k/uXUN2DtbAad/xxbRKQpN+kKVGgKE8OSDnxZ8PbUosKEB/1ZZjxfLoUsdd?= =?us-ascii?Q?Ou3STsaUfsKxlNJ3/ssJBoHguvrf+zK/c8wuI8w8HClIG0fh0dOHHWqMTdue?= =?us-ascii?Q?gREWNW3QpPedTGcJ1H3RuD4DxhKw5IS+Ss9JZEycAk1/Jpx1mdqCBtntN1oy?= =?us-ascii?Q?I7btwW7CzYNHCX7M6ZiyL0Wkrg45CgiPle+LdPTNhh8KXSX28EihqOoNlQ4k?= =?us-ascii?Q?jWFsyDvG2RHI9CczzGsV5MLnIUT+ahcdofy1qiT0Yf1n5bVk3dELE52qDzLF?= =?us-ascii?Q?dqRC3N6CCTSGRHQLalwDxuQKGOyN8q6zUAyCavSyBR1sswRfKs34cAAnXgzW?= =?us-ascii?Q?xgTXCgR+qLKjZEidN3wGUNrb2tP3SL8+AF/xoMeu4MRRNSFEg1JjF+Tk31rx?= =?us-ascii?Q?ykPo93161oHoCCJ5l5OqK80MDF/MEG7unYnv3Jj4nhTAmDYSAm6pfCDCg65c?= =?us-ascii?Q?sL4/etdpo8gSgnxwOeVGPWLMhDhISPiKn1bVBrZ35L+uxNZz9qFh1hg4EI53?= =?us-ascii?Q?rzYI96NVANHD0n74ZAQMhEiOxbgSutTj1wdyubGKiI9+C1UdKuLLwNSS+hXL?= =?us-ascii?Q?NIUrW2+PZr1X8rZdw1kWUlZtNmcp99SRaZoyAPkK5mhUgPM7Icrh3UoIdG8z?= =?us-ascii?Q?8x6KFypBX1Ea3InVmtMmgXyVzHo+pArUe+7L7OVJzTQCkAS0N/5PITpPu1o5?= =?us-ascii?Q?0EpVRF2Qw93nSE6cTi0xAHxJ3/JW3uKf1Ij1yE8F9Z3j6a381g/aJQDwgAs8?= =?us-ascii?Q?xCD7lBkL1Q=3D=3D?= X-Exchange-RoutingPolicyChecked: fE65mDVCud6tpeiGiEvp3+kZ8GdoWeLWR2g3unPn4gGIeS1HCfU7FwMRab0ncXYfG1jPcyt1eRq6ed+lKf6UTjTDwBM0NhnSG++4HdW7yUoyK+U408CkxNd4fXUHacqlvsjvEoke/GJRmoQ60xs3UcSxdt+yXL0g0XTM2wex48iluaeI/dXs6BFJqdNQoZz6vUob6kHcreZYTj5qoBc8rAqxsMuV+hLr7jZCgbmyZJ3nOWHfPCcizSisP99Fdl4Q70gMI6MfXC+mXBIcBn1+1HGA7dmC2B5lBuqkecQnrEV1lftoUXn1IrF1k7iytbvAd+aRVkphzQ37/3FYtVLW2Q== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: JGkuA53FQkl35EZPUo6pdbYcTcxfYecvzdWeCxOWO8WWg3Rpl1kdC9bwN7cH8J6pAp9oJ34ChFxhsmXOsBFx+qHZlaNB/X0eK9YQ0hL/rNdfDUU+6K9e/io0krWinJOq7Uz4Keh7/X6iIIG+5gl/5pM/U+bDn3C2bQrjs0s5bq3sZry0Nq7+j9osf8rP2dO6bcbGEpi6ThpQR720zM/m6KskdFBMJ0kdQWVbt4ZlONdrANOE1lqdWg1VKP9WW/+R+GC3RwICqy6C863FVz4xVv5uk0wjEOIhstPsWCY93W2KJqUu26g/TvVow/Lerctzz8UQvnP1PDzD+E/MpjwVvwdk6V7AdCa2dODcE6b6JdzmPM2JXiPsoPr5JzR0ZnerYuMDPqrdN6O+FMy4WxkuJj1qMQQSc3QyQo4fThY8T1yfdjQyFkg5kYfYTo+DzKx2FcPm+QCuk9QyYHQFLCH+ZOworeI40hnbrNcAMjwQ+3Lvub8INaTtVmqYs3P2mvu+/+UgqAdVAaKW2s0ObtTKvc84+sV3eAf1t8uVY2yrUh4lz9LL0GELGODALgBaW/f+m9VMUX22JXGgBjpI+KMClQpEfApFOQ9qxaC9wH5iy/Y= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b500f63-81a1-48c5-50a7-08df0ccde34b X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:53.3171 (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: ixdp6+wxhdgrr94EZUY4ETGUbrk8yAl0dlOvF/Mgm91oEjnqDzPKFiy5dse1ddnwFSO35rS9Ace27GKfvGuIyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=VpYTxe2n c=1 sm=1 tr=0 ts=6a9e9725 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=-Y819F9slc_s4kW3I9oA:9 X-Proofpoint-ORIG-GUID: L75up5-ON5CoADiB-zOmCqAcToGkFRmB X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX+XTqlSIDG/V3 MQdutaZnWkJ+1TLCUOH8IZpubCjOl46Sm4hKYshFyiVQbOBS8++Fyt8vBoCxwmHzn2uSBwfjisJ aevsYpbgGQYIHupkzTJ652QfBzwfPe4qUg5SxuVywf0OkiveKGCT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX/DSnWutvNk6Y RcoHU3yB86gkylWB6AVHvsmIHRZB1Tkf7yCJqK7ie5RLOMRKKTemqvheWa8ZW7R0NUZo2fchx+C TCfP0jWquDv9p4eYaD2BIUKQkGzgEEAFQcQb69RvFW5qagg0R8/LfVZX0yV9kE4rhSiQXjugP9r eBxFImrWldWdfMi6+tAzc3LuAVR/CRam/+ImNDGdQuXFO4zmgR7ZgQj90BSZuBVZ7IL8pxu9mmA G0v+SHlU1pkBrp7Br4s0CSMPALIvVA+jBkwirBb4aPmxb1RYufQ1gUUKDU6+HOOoeCXkbofRPbp kow9IMbJCCV8zvSy/LZARkx8EzdwreqKm33nYPSWECSuD7IEMKAsNY4vLzsayMrrH4BtS+LrKXF 2piV3vO0ng6284HHu7lRT4o3SrSZJFSp0C7euivYMnM+QRNyNdsbunM/lMasjnZd62qoAuDJlMH S+QZ/v936OI8U9REJVQ== X-Proofpoint-GUID: L75up5-ON5CoADiB-zOmCqAcToGkFRmB 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 4afb55b5bda51..ee0afb0f4246b 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -490,6 +490,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, @@ -501,6 +521,7 @@ const struct block_device_operations mpath_ops =3D { * avoid their custom compat_ioctl implementation. */ .compat_ioctl =3D blkdev_compat_ptr_ioctl, + .getgeo =3D mpath_bdev_getgeo, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 7A483471CE7; Mon, 7 Sep 2026 10:52:03 +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=1788778330; cv=fail; b=SjaRV3XYT5yZIQEiYUAjJMyNgcAUb2alFQuab2/ncQZvCh3NCTkYHiABqbdCfIJi+fJLKxHklk6zrhwxt3OcziMzhGmJ5N98YrCwhIgBYzCnPelUwR+UqWUjU/HBBMkjqSwVlh43taj5OWibb15Six/xOcyckKSL1Fvhmv5oT2M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778330; c=relaxed/simple; bh=SdflWPofnKeVsYqgc9yZN+MVtqKLs20u463C4jGbebo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=i6y3mUoNai9CX1LzvcVEJzrRtBKAe4oqah7P+kwt2FMljPyJ7X8gGoGD7IomcjRfVOLm/0edsug0+Qbgp79/hzyprC8qv3SRA6PMVTosGn6U/Y+Yh6njk9ScF+7RMrMfPS0E28ASXi9BG2w9ozl9ahIbuMcsF35xoNddsMemGNc= 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=ku8iA1Bz; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=y8TRcqI8; 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="ku8iA1Bz"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="y8TRcqI8" 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 6870I0fv166091; Mon, 7 Sep 2026 10:51: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=XXkB1vnqyi/MJpPMa1hBLK9o2yE3ihQDNMTzXdFuzfg=; b= ku8iA1BzGrcn3uRMxRypH7vqaWXgjtOSpy6+SVH3XvL7ttBipokMmn45bA/a1Sur O70jpdJxMmvz6SUjreaXewPgPtukhqEqbwQ10p1m36RX+jDXLTVO+crBYOxLHxw3 8oK/9shot0ufDSGJ4pR2EI1YmA0f06P8uJ4mZGBXiuyINuYF0XcPj/lg2uVD1mf9 gmxpDXMaT1Z5RXvA4WA//XY+3Xwt/UGVplF+vUTJqbq6dUawTPHhO1vR1ErDo1Gy VaG/bHBGzfTiGRYHLpxjiAMGiupjYSOU8vpyPH5iLPf83loXDdrA26+Pb4LHB807 3OCWD7vJhPJxfpKlCFWe+w== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbmq9t40-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:17 +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 687AopfC019106; Mon, 7 Sep 2026 10:51:16 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:16 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UZRXb1y0P7EX+QNUuS4GMeq7N1f9QxfTNZO7hiSVtWMsG60P/+68AbHG5Ap/R0dlPrE9mpYzCcnORxAydnrzugf2TCxsk5udByUNZ5Fm2MK2yzxeYOeyyryQWcc3l0tt6T0m6tLEd9yImNiL45syxPcTCQdFBSJABFjgJBqKNy33oO1MNWsv1Jj/DghIEpPxawQyJUXj8xIlzSya+KFhRanIRfLu+PqvKR834sSDP09pTP8VClUyk7D6WXiIo5Q+cvrKdDiORbfiKBexFZRFceFi73FaCX40fN3+QKm366AbOwoCwLAqI7mbs7cyoOhKdwR/eC8VkgmdZ5vvhVdi9Q== 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=XXkB1vnqyi/MJpPMa1hBLK9o2yE3ihQDNMTzXdFuzfg=; b=ndzhbTN5w9VMFK+ef1eUg2s94D1k2flBz/7KMevRs/xg0HtnNu0u+ualmXDdHAVPc6q/7oxOuhXTBI0o5nHGuBQytynbN7T1KFW+E8bJLq6/+gdisedXk7ETj7xatxf1h5byZoYL3r2Uefz+8a+KGp6Q9VSf3jsMfM3rqIGjM5ozLRgR2s+XpSa12eNEkMeAjCDUiJ8YRTV2Di0zdcxiPdMV3YEdFq5trk9FBY0s3Gxw1iSGz9IE92F5OSN1dKaZ+5YQ56a0ddRWBgHzZ2WOM3djrlDjo+D5SU9K3p9EyRv7p11PDREcLf1pccgPV93L0LQl+ic1uYI4etWdZ/VdKw== 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=XXkB1vnqyi/MJpPMa1hBLK9o2yE3ihQDNMTzXdFuzfg=; b=y8TRcqI8+AW1ah2SAf1qBL3U521iNDyFqmZFyOEd4H0S0PeYrZr2vTuOLx5eDYRoe9cbZHla8S4axu4h9DX27D6wEq1YZQL4egbr123YcF9R3sD/r7kwHkRxbtbX7W09YnGmBouarGDfimwKEwnwvhid5uVXntbTvbsQV2hgaUA= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50:55 +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.0406.005; Mon, 7 Sep 2026 10:50:55 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 10/27] libmultipath: Add mpath_bdev_get_unique_id() Date: Mon, 7 Sep 2026 10:50:04 +0000 Message-ID: <20260907105021.1763236-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH3PEPF000040AF.namprd05.prod.outlook.com (2603:10b6:518:1::5a) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: ffd898fb-df8a-4044-9a13-08df0ccde47a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: AtwIHMyF3tRmRcgPL/+Y5TmWqgZNHf+diYjGdrWfcsnF3sEIpYpm1kTkPAAoXfoqXeOG6pv2WhUiUf8ElmmnEHXFa/spwr2AkRaRUJYlpQztzwkPT4Y8n4mq5xDjYpPPhr0sXurB/lKFrTT6W9mAz849jSZlgfm8Uj6nUImrwWsbmJQ5rCBhLnNlN97XmFJ6e04g+3h0v2FFIUJUKC+ja1GV5jl5ifE0eWdSd/Y1ooygTi/Q7IOyE0oONjURxJv8oWM0momdIR+zduegyJGpHaJyiRSstLKjxOpB+PIyi9M9yo5qCyHllmj/t6UYvwBEeoBuOBue8JOL6g4vFqRQ5FrDq7uT6B+nQXyskd5LW7/I6kwmRSasiWaKtdBwnYTjBm81oKNam+JSeXJTXTj33XETdWOF7xQHyT2qGk5DaMe4fdSQzN+ZLCIDIX+G27ZUtQPqrrvmQidvEJ2KFvVxkHIcJUrXRuN6xlMl+hsuSyJzvl5MGalhKfg71BP8XkBODaRo+Oy5H58bLWQ/Xz6KF8Ok39HZ1kKk1/sFinze4zbo0GAazvQWyLFJeeqj7ur/NJtY2fDhm8fDAxN3DIflgLgeCkXmCNHIbrm0YT8dP+ubtBXCVlEdOSxVidpa3L+2AgzmuUbmR3vfedgObYTIevDj+PvFvKjlu/G0owRnjAE= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zInsMbU2yJdzqrmN37YKYD8XekSHfk04rzZf6K/SIZZpJXYjijl8Gty2egN1?= =?us-ascii?Q?xA+F8eibJBnFBi6bLlKjC2GMFwC+2GHcPazkM0KLenR8u0UwkxckE1cVW7IJ?= =?us-ascii?Q?xQbqHVRU/1/RZ+Bvvuv711zyNzYJRci9vtwNz2gnWmggORiQrHYoUcbofEmd?= =?us-ascii?Q?20ckA6wMYMVLGTmuSpFFyg2QKsZwyUmU6Hd54qA1ha1JfdWp+p5fiBBBMMhx?= =?us-ascii?Q?sRaCc4WXiqf/RQdK4VPOUySThpn3Ehbg0pizLpSAXojCin1fyWWpHu4hVXnd?= =?us-ascii?Q?7jJwKpy8Mb3gnCHsHJD99QA/80A+iCsB4VXbuYxDyBYMpa/hVXGvzwUs2AOE?= =?us-ascii?Q?tnnfJBBbxFYMOJM/RvJEWd1pDZkaviENhYPQ7VjE6zmFVWzNl5Qhxz2jq+VD?= =?us-ascii?Q?V2nzyhg3lG6lnUU/slLD9eY+FDj5ix1IXL2IC6CALzokdwETFxmLGrtStaze?= =?us-ascii?Q?gUF9tgOmajudvcfYu5QhOrj1n5VHUEeuJCuso5DGVyUn5t4odzrNfQ8LeLsh?= =?us-ascii?Q?TQj+DaWj5nvAgskyV5IuQo3rVdnsFnwvi7FpyuD8arK8kRj6tggp7AddZfSX?= =?us-ascii?Q?Lk17n6q8rVzt//eeDBRDjekvpVHBM81sq5CGZFnFvyXcMdfvoP3zCmlz0hzx?= =?us-ascii?Q?XyyUsqPHjIXnjLIUwDKnimdDU5f173AtMfrJvoLoq6RIZep3/JKk1jy+c4uO?= =?us-ascii?Q?4fcSVwkXtv7oBTcTSQ5ZhjeTYoiX7zlGHlquaVPtThgzHwp6pDcGseP/uC/l?= =?us-ascii?Q?cnnthoIgkhV+OQKiNV3U6/4DW92F02jr42lTY5uLa4OUWHPewNT1ahgqWCEL?= =?us-ascii?Q?ZUWGIP8MUCvkwK8jWoYxlJOOzFrT/lLItPrts4U/sb3fTw8k12kPmjnAia6e?= =?us-ascii?Q?q5nnpR4DCbXHF+oaMC48//zDHiHZb/TPwzGNXF9Fr5DUjs6uc2YOT1OVPZCi?= =?us-ascii?Q?OCYrPi9jlcya5y8ZcoSYkjzx47/9ecUgI7MpCZKaf4sHz0DbGfbQmYNV/QP5?= =?us-ascii?Q?l3zXe3rSz0NmOGTlsOrd3EYJ3QpJZ5Q57wM4XpIn96Ey6iAFWl/Sas/6u57/?= =?us-ascii?Q?apGm/gJRwdcrkXgHlJenlGnRneZXXtYcDcqYoMByXZsudIAaQJ9J9/swvKFV?= =?us-ascii?Q?ZL/EIFzdikWfpIV6zuHLqbZ0P90oMAJaQ5mSkNORxlTUldfKOkTuAd8B7DUp?= =?us-ascii?Q?M/FnxX17Ry+JUMgrSsNtl9hEkzw+v26Ez2ngpg7lwag8eLIwDG4QFUrUlBDK?= =?us-ascii?Q?HHspiLFSmBbKUp6fbGLKVl4mfPLBo6KxLbIE4wkXxOOE80JSE9Ec0tLTw/HL?= =?us-ascii?Q?tpwfdkqYgmeNE3uyi65qFw5OdiEIt+w7qyK/a/oyBA9wcIjRObT2jzeeu5dF?= =?us-ascii?Q?zdjUH/AMmVcRNqa5tvZwpuIcvI9VJ+QRh7HVsVAVAEWgTy3e+iN4/gmOXVa9?= =?us-ascii?Q?iq28C6KOmnNEztSMnWkSS1BTEq3XGVY0YWcGU4pynFvJr2lXlFRX2iwzwTfE?= =?us-ascii?Q?MmQXUCap7Ka04M/LaSkKzaZlnTrGXnMRQKUxMctyOZFZWPqvDJigVeAKOCxY?= =?us-ascii?Q?30M/iiUHYpjO4LNIBmRD+c5O9sWCWbF0wrMuusqEPtohIbZJpEjShjdaSEOk?= =?us-ascii?Q?IxMKfAeSktCAIV9yoMxbQX5ULXzrABTxdqihDK+YvAAN3i/YWEfCKpYARX7t?= =?us-ascii?Q?/n7aCbX94/5VsUX7/yTRDmImFf2gi8mHEGuBwLtOHfavPFPwjEwMiyzq3lQD?= =?us-ascii?Q?wmVLyu2a2A=3D=3D?= X-Exchange-RoutingPolicyChecked: jnFCVOPQ4aWgRecT5EVUSTuqTkS6z60ZLVCE+x8gL7p9N9l4p4jTLyg+iZSYUeZ9hwzy87vG1jQ3roNfLm74AC4/8KxXPvfw662UUgXKqa5yZqqaXjQgPffhUu9gKYpVjJbOob0UMu2bYUgL1u3GAspYS5yw5YWFLkbV2jTe7mmdyb9+fu4ILzvvktmCMsTnOBG+i6gPpBd1o47qGXg5leaFPmSXq1WYzIVBwoPa+Ox9JkLzTbbJm0s8RjlBYDr/lv0YmNIyQUV8Y8qTuSsRSJcmVH0V76n85Wu+mXByIBjO9bvuPjviKpvZ04qJ17jRm4GZ24kpOOtXIto5OQkAAQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: x/SoevHfJGC6Cl95D3q9lb3LV6JGI8S4R2vobDsFYCQo4Ur1jex937bHQTZRWW/BDXfyZbXfB8eSVOW5M+SlTpEQsVLT0LR7fm/mbC/+WVzhdSeB482JFL0qgAzLvBHa78dvzdSDB6DQu0e6dpRpHJG3hqPTUx3D2hSSfnrOiwJ0z8cQPUNd5uT5nKc2apu9e9S2QDvBDDljmC3B+8m+xexKhYCfMzf+wiRP1FsGMf6gzDiKqXhfkj4DtwvPxyhmpqqP/u18ujsRO54d9SMbuF7JZiDChpGzgTuhG+ElPAaVZqG1ILCf8KZiw6Z62ZJqob2Pl+V1vFxxkNX5MDugidyW+ZQhCloUf9GXzpPaKp5rTf8pDIeJm+6Th4vtbBQYa97SC0YZdYdxdGEJ3adQ18NPqjgfGajggQ/ENv93DCR2kAFhzFQNp5pC2QJ5QIy9KsT7esxPOShmV2ldqPTpYGEhLKHqNd7RAey+dtpLJgjwetmF2vUZxh3SyZ1W3xiE/h68ymHB9jOCU6i1naHy9gxLZ+OPNIPT48ZnqFsaF5sOvdEuos4ITsruHIB/HYA1G1xUbd97PjF83itm3G6ZxWq5XZ0fdSl/YKnXP6pNzgE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffd898fb-df8a-4044-9a13-08df0ccde47a X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:55.2872 (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: +KRDVk9+HJ/+oyG92ZOvVRhhio2TfGO97/Whr0BXcjnnKW/vvI46mW/Pms5O5aKB4waqKxZLcddPvulw+vgKKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=JYiMa0KV c=1 sm=1 tr=0 ts=6a9e9725 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=wdrd9TenfaMKdVnI-z4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX3y6SkKcUSiLk q6LoqZRFGe/LHX0o2S58mZbwLGJ8wzDbdMIS1mee6HgTgUBgfizocKtn5ni6WbdHGY6VcBOqDMd e8gDAwJ8fMYSTMQjZsgGps858OT8sheTymHeKP4gWzylFOhZi/xbc27Qyk8NGrxK98UVYaysa3p VGYQT2LNONBZDLgwlbblD8XP4X40mYukzxi4YBERkrYHrHbfpi1g3i/GdWQ1Wdwpe0UNLlhswCv jLlBVI/qMuGe2AzpR74Ly/aNSh9hwAh1uIpwAVoqBAjb0z0XbGwuuTyJecE3TgaKLpbDrgKFqBj rZ45+UH3YtZMklkHjfvsZUpMaLI6F0ZIe2A6839xDVz/MOMv88S6+ubEoCbzGeqhHnmWIrFNqAC lsn7OxUhUxyS5/SzC1qfps0oXqud5ZZFI2xC4G7fQXRF1bDty4HBICGOl8rNiDPPbU6jsKKiB5C Hr8Bvq7LSho8O7+9VIA== X-Proofpoint-ORIG-GUID: -hdhmrzWGJ18dusZNvBHmr5gDzXm7rtD X-Proofpoint-GUID: -hdhmrzWGJ18dusZNvBHmr5gDzXm7rtD X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX3vGEMcKXdLoJ b5p4n0Ohr0DMgKkDcd31VpKRlTPlQuCDSkTyAahF5C1hxcd1vLI1EhcxQY/eOkYad4rUktnvMkB KdQCYBiAGOVpnHOIDwwgCRiacvzEKA5Ebz5Y2Exkse9brmzJJ4iz Content-Type: text/plain; charset="utf-8" From: John Garry 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 ee0afb0f4246b..6bb4346c57656 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -454,6 +454,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) { @@ -521,6 +542,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, .getgeo =3D mpath_bdev_getgeo, }; EXPORT_SYMBOL_GPL(mpath_ops); --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 6F0F144B693; Mon, 7 Sep 2026 10:53:32 +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=1788778414; cv=fail; b=f/Ih10nmIcUrH1krX3faGP7NbXyqMIjstIwZIzrU/suP93eU/7MMgoFft7S2vcHdO6+tXdwq/L+wX678iy/FLW7LqPaOBeQW9N8ZMDPpGwKjx818DgbdCdvP29nLuR+gVJVUaMdCmzxxRrVkey1a3c/ylrzFJtnxRR+rWOQV6LY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778414; c=relaxed/simple; bh=bcGOTlhWKWe0jzeTpP/KaFYLU5u4iuxJIHrGzDLJtKY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EZSn0lLWFnl770T8KBQmY3exwr2EDBvaDM8AdYS53759LFya1IAZ1gxM7wSx8MSwqt3lNkMnYdB+eGMmLVSPMY+R+wMWjMNbptWZLg9I7Ug4nalkfed7uNWPBWJKCtPMRIydE04chqAMyzaOxZXZ+JrbV7Fk1irlnrHyuF1y+JE= 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=MvL7c4U4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=RFUdK42v; 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="MvL7c4U4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="RFUdK42v" 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 6871NBFR287528; Mon, 7 Sep 2026 10:51: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=9vZhiDW/lW3ihQBi6XvuhbnyvV4zjUPIhITgvKfCfI8=; b= MvL7c4U4Vp/dSQcZlcNzzOJdDFQRoVnGRZ8Dwli94vv0i5jthkH0XcFAkj8MsySq Er2CQ7pRbIfM3FUqaxrRG+ZB8Uwu9EyMrQOu4B7M45x0qZM7pfygvs39xW8G1kKK U6VYmKNIWNDs3fP4sDryGmO4LAqu1js2mB85DjtWFIDpHnyBs/Mj5VxyFGguil+9 Gfvjl4XY3KiXq5XDFZNCo/Yr5C4ob6VkIRBugj9/ty0n3YvPFYCRrc79UtLWTytf 0TO2chvVnkg1ZTebP3k3dveIJCXGLMDjsskndk1uyVHduvotTcVmXfwBg8V/WsM5 NAjc/WSKpOYtKBdRgtF5pw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessgb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:18 +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 687AopfD019106; Mon, 7 Sep 2026 10:51:17 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:17 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tz+n0TYljd14b/Q+qXh0vF9RqhLNn2MXKQTR6A8J3TJf1FAQI0OXifaW90bQr7Zk0k62vxkRQUTbE8mZqvkwcTXOZkQ7D45q4NEuI3LwGWViXQGEMaW9MKSwQAPXaxiYtAIzGvbW/mR0YBZibzrik5oeLNDPoWLuPy6IN27hVoTNHNqJOG+Bn5P1wwVVE9AB/FgDgQ5w+toHsTYTxT6LzVrfTAAwcEHfMlkRYhkBCKHEH4Oexz80HezTwSlQSAR8+XYi1nhxqAZ/2NokNhl4DeZJvydRoJIa2QCfFsThI1w/r9KKEfW6YSj0ZsNXaKOkY/MvLmNfbf/kUc2JKwV8rw== 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=9vZhiDW/lW3ihQBi6XvuhbnyvV4zjUPIhITgvKfCfI8=; b=X8oxprJf+so7sKLH3ZD4DrYBkl91O8EvHLOok39FmIjqI/6oRNDcAn2D+Zae4NVkB3lY/BZxVG7Sl7wEHykC5IujxqaIiPPfV8q//P/BJfNs/5ZnrNl6eqw3ZiESBGFUpq9U5s93KR1RrK0RmRxBLtORbfLYQ7CcfuE/IM0Jz1+CSF4Vn56oe2IwGIulSQAEwhNW+B5BJuDIhzncg50kyox+B6gsZYqNlbXU/8e8HJNdRQQo6u/BrqKRRVdxaVoqvQb2cEPt3Qs5jYg3QPvs05m0Nk0Oa3qzWOg7fNbVcQx5es232r3E+fKpnIlLtkKN7noEhY751WjBoqGQTbpFag== 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=9vZhiDW/lW3ihQBi6XvuhbnyvV4zjUPIhITgvKfCfI8=; b=RFUdK42vulTmNTHGgGhjbwhtSg7j32426ryB5J4ayhu3Y4IydWd8uJibx2ddDbprMDErZGm/XD0tHvcxarFbpYaa3iTADRfyzpZCrkhEJLM/m9vjgRwwBYz/k/2pnUuHbAO0a3VQY1wp8N+b6VbOtncCN5TpsA2sN9bz1i/L5Ko= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50: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.0406.005; Mon, 7 Sep 2026 10:50:57 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 11/27] scsi-multipath: introduce basic SCSI device support Date: Mon, 7 Sep 2026 10:50:05 +0000 Message-ID: <20260907105021.1763236-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH2PEPF0000385E.namprd17.prod.outlook.com (2603:10b6:518:1::6c) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 81fd0b94-e9d5-49e5-40eb-08df0ccde5a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: bZlDFy9dfyTe1vNQodPZHfV5OF46c+GsnPrnNcalGkTLW2Q5/1mESCUfCRC9Qjo8pZyuZ6zyUmi0800Dd5hhzOlyVnEeQy0QXlJRyVoT8jvf4lRz32rR0Q00Dw6pV2NCrFL/yCB3Hb+6gWPHr3gvLeRtOvp9SOU93U+2jW+nFg7TBqATYUGnl+YL3tfrKWW/3wQUsfhy6VUPP5bL8M+gCRUwAk96DsHVdCiexLMJR9tLPb/ujh3AP6m2I5BRwccN2nOHNIK0ph2K51NoBGHTg7REpzGHB8cE1AQwCBW7nv0vsx/I/y1GV5Dv5F+qMkoe7Qzeb7DIzwyP0LwACLgZu9md8kWs6j0aQ26/RjZy7lKRJT+s33poTdPELnXWlq/JzAiobfpCPJdgIdyn4tlE848QvFdfrQ/ZuHAXY2dDoiqHmc720d4YeVa8sH6LPxYOwi2ujVCfdkvL9T1fqTNqf20+e1Fo+YblHfv6s1m7cR/wH00vXrIi5kKkZ7R6NwWD2jNU5jr2XHAVY/gnXJns5e2/JdEqbwmlaiFaSjyfnhcugaSh2B1Py4H4lWSrmixFm75dE1ouS2kaFFFXW9il5GjwKTJIOvIUbL1PVre8xrhXKYli1uEy4SR0qKEjWxrH0OP38HOv9UwZAa8R4n8cuuOMD09f+7dDYp5grWXmEsk= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u88xSK6bFFyzf4Vw7ipfJ8Ii7Ze/J5zS3O9f3oYzGiH3j1sfGDXzaHL3rD85?= =?us-ascii?Q?4vkNlwLszThaYTZ0ZZsTZy5FQNNiBswGw6CX5vebdwIZg1ugO+ZInwsANdcP?= =?us-ascii?Q?N6ysa/3WoWwmra3fg7VXv0jt7ZuT4yoL1A3MOU0Xf4tjyB4WyfAoRZdOdFvy?= =?us-ascii?Q?JFu0dowZaudjZNsQwkLXQeoyaHpibg2jXxq9R+7d/Ncyh6VVgqvEov3k0Oy4?= =?us-ascii?Q?Iq46wjxTgI3c3uFsnj2tUAHYkZfx6bsAUzvCWW58qunyI8vnV4G/+uRgxlKk?= =?us-ascii?Q?OZ97ra4kgWN//FVIOE5GftsiTPSiVsjGtIz/1z69UD97gCOZ3XZSCZELCXpg?= =?us-ascii?Q?o9o+ta79/IBiY4pYZ2fxA9nBE6zzf2vv3Q8ZTb3sF9fg2o7kicH7aIrj8QnL?= =?us-ascii?Q?iz6RyumM2TuqcKeXnrHrgJIC1z2S1MHsaJ3arEwm+NPxR8XXnjXJNOt5jtsY?= =?us-ascii?Q?ixOxvx9JZZv0XYET9eyUmHlh/3ZAVtW0H4vWbTPvtBeYtqoc8AyGgAJkjQ4P?= =?us-ascii?Q?46jWi9XRmOljcBZ5S6Vy8AkTbRLx+NVSK4Jn48V+Q4SPhA4D3Rkb0kNFQVlf?= =?us-ascii?Q?j25igDkmfbbvbaXHXxX1/ehVkT6gch3Fc4S/fK7GjYVLyj5Lcioi9ZkcdTUo?= =?us-ascii?Q?8AngfuT2dvCKDeOBorxakzH/J14Tr5+7NK1CjHYBAZdl3HSRY2FDpeHe04hM?= =?us-ascii?Q?+HXFx4LmXaf09y7WCwZ9VH6HWmT7kbNetM8YF9S35pRM2PEMv2ggD77dgc5a?= =?us-ascii?Q?WTodpiB/Ul5w1h+FEdu7wEruIwbKUQJ+7EKwMjC4+4Uigvrk1Cco3YEJDLZv?= =?us-ascii?Q?ir0gbNM1urEm3rICUihQspGaqbLufMHQZ7BhIeC6CmJP+60nfiSrxN4frNpm?= =?us-ascii?Q?iLqFxoeNJp2yVoUp/IfpG7PH2uSHsfSdt/AUALX7exq9KhIZH8NRJKLLRLXm?= =?us-ascii?Q?m283oD8gcD8htsz/Hq7ZKoO9pYfokrGqw0JVOdYW5SpyTIgFphUkjPRnjhSC?= =?us-ascii?Q?KTEUmJYNgLLZdfRjiHwJlF7WeIHp72iBOzHKxT19EL03pYWYfqPXFw2ukRl0?= =?us-ascii?Q?HL/JHRWjE5RJJSDqlF6iL1UaYim+Pw4E2Mi28gO+Pf9zCbS4yEsRjcsOdEVq?= =?us-ascii?Q?irzYmbZ/J2LwK4YhzSl5I3Vy+ca7svN84fP+W5HIRp0igEfa0QSTqrGVBeFi?= =?us-ascii?Q?TDlejPCiNa/DXdoyVV+A7QWFfeenDBellQyIdyAsZJZEm8ktkjTX0Qlru92f?= =?us-ascii?Q?t+m1g4d09/Ip6dlzDOGiHvRgc38ZAbuHYEEfRAC0GReQZ7WCnYMpaRjYzTB1?= =?us-ascii?Q?CGi8nCOeDMZTeAh+x07Z8W2MT+Az1WhfNd60Y4H9O5gmeZ/E+07G4KG7n8Ah?= =?us-ascii?Q?hFsRiX9r6qGtC14EILscZohDiR7f+GqqtbaqCN1avGamU/ST1TAArSAWvG2Z?= =?us-ascii?Q?mu0JykwFn8dPQW1sg6OY37hOWDyRgseLsdsW6k9vRd0TH311DEs8YL/fq0mm?= =?us-ascii?Q?4J2glVyTSgQaIILJNbWawIHQP15zpdXnotUd6sNL2djJKyXZyZIRpJTckr35?= =?us-ascii?Q?5y9IndyIzb89dX38s6hVhVXONZ/3qJLoXgTnKrZuQ860zAQOR9snAETW5+a1?= =?us-ascii?Q?zleUjfL/ohZJ9EeOhtDfyBv9wfmaNLnZN9tbLn2r5wZnc8eu7mY9+Hutq25u?= =?us-ascii?Q?Q310K2o7okYU0IDxlUsElegZNkbTVqgMZrs1Ose7sT/OrYODu7YPKEG+9NPQ?= =?us-ascii?Q?Go5cNKtHcg=3D=3D?= X-Exchange-RoutingPolicyChecked: f2oY8VwBEg3WSBByHuhtUL9g18iIyJ0M21Oix0CLdVYET23AxQmg/H+ohy5w6TeiybxZoQ9CUPN2zns8OPOrWncxdnITKJRsSNb/tlXYwycmlrVSfXKMndZ7Jt7UYfXZu6LmIgaq6e+PvKvFmg/E22aoFUOxX9NM3yEZl6fezSEIJ5ZvPAeWDfPSIXimDPx49UvooHQPsg0+KgEXd2VoIOAG/oJh5Qei67V6iJ3AdzoFpqHO85iFi8rhFyzQucJ5FbobBETfrkW19wpSTVy4M35ULWJS4WZMsrDWM/St3Qz/tMqrAYmHzhVTwXcFizKT76BZx2pd02DYspUryQD8zw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: MKpp/YFQDuKw5Gmq5M7QV9OwxybxousJXWLnwN4dUA2QTIQXVML6luUScuijYGTw9MaPEk8AKDmqXLtJh1C8YdGG9UwNGqKT/DRGHygJizpdnszp89jQ5DXjYYf6I6bLEJVMVqYEdoRcc6VxKbXL74rTpYohe0yiT2XffDjJ5AXO7yXf+5qdK6Gk9xHR5RQBQez0Hgyxj2BgJY2jR9Xi9NFs899e2G3DnGezFPBXXnuiZ6FbYzXtCG7ijZ6FlnmqmQpGPXRk+VefxEI5h1sqssTmCsl6nwTAr4XZeYj1NppkdqR31H6J2DCptIbU+LoT/d58kvx8hhAstm1FNHm2YaycDJW3d0OOCkTDVI39F13H66/1uSzre1tUFvyGJ2t2fQIwVK7vYatdxpB2l2x2kAIP+hzPj6GHor5qgtAczSRoa66eBXA8CKdvFQxMbSxQ5AADWM/8kd5B00wz/crq7I7LPvxiR6XiXGpJP0zaf6HFce2LslZMrLIlWgkjXw/UWGPBiivuYi1RXJQuc58PAni+la2N08mGOJ8CPHWNrfgsmdqDNQdE12BdBZf3CacrJiy3LsImDbU8JVW46InSDR7QsOBobUpm4+c7xRgiGBk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81fd0b94-e9d5-49e5-40eb-08df0ccde5a5 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:57.2800 (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: IYoqdaluSjNCYOORzO5dsAbXDri8cGFlt/Yb9ptEEmeVtEzr0y/y6THE/YnbOyg3eOLRnZcxoDQa6VRdcdH/Ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: eEYM5aEgTuguJL-D7ho09ZFGihym4FvS X-Proofpoint-ORIG-GUID: eEYM5aEgTuguJL-D7ho09ZFGihym4FvS X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e9726 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=pCOl5fTshOrEa-n2-VQA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX4puzIgAg35Of 6df0FGAilna0jPvw2BEMXHxzREqEJJMhSlWYXbp8XCaILqe8pWO9fReMhCt7ldQKA5n2+NtZbC/ iNpg96yVMBLY4c3LgFT8sbyWTu7EQKNc3qpDf6TI5hwUXY+zh6aTlpJ5dkEUz4og9JM5JbbzYGD UXYS01BMpj3oCWSrgWNinxLsZBAuxPpqUuPvnMLdUAm09E8Soi//PHtfLN+cxKULkp7EVLc5viD 3vfYoRz1YEcWNGPjx2zeyUKb1SbVtF/neiEc5Zttpvj63RXp6ArVLl97L7cBx0bU1JUd/GcJf46 dIAXAy9F48I4mCt3bWqcUqQW0ed+1Eou6aSdZ1yKVgzLDqkHnQRuZckre5mcy1ARKaPsrxIN78N b6Br9oQm3OjsH+oZLvtMQuqC06h0ivqG2b3+b2TvzBaJgXS8rmlgfyT2azhz5n8VY1qXtascIc9 oQ13dYH4+0QgWAnoEbg== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX5ekVHQPiX4Iz Gfr6bCi1VnkbUoijIo6ku6/Vin6wO0Z4bGERBZoAMQcxe23cM/veACPQz0vOGaQl1fTU8gfwygg p/WZF/BSi6lND+nnWEtdgVkyejEB6V/X1/Zj5fI4b+GTd4Nds7NE Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 148 ++++++++++++++++++++++++++++++++++ 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, 229 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 4a2af0f702e1b..ffb7d12664b09 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 533623382eca4..8bf4e548b395e 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile @@ -192,6 +192,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 4e7e7a6b7315b..8cc33348a3637 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..5559e2e8d64a8 --- /dev/null +++ b/drivers/scsi/scsi_multipath.c @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: 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; + else if (ret =3D=3D 0) + return -EINVAL; + + 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 96e4065ae8b55..f7a782568faac 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 fe54792ed69e4..6a68da42df913 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" @@ -456,6 +457,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 8694eeadd753e..1d1356a21c3a5 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 Sep 25 23:50:57 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 9A57446EF6B; Mon, 7 Sep 2026 10:51:55 +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=1788778319; cv=fail; b=JsNC1OqWlpna1k4vr/aob3arHHa0cM9kLS8uppWZ+/yS9NYzF+aQBzhdO0NASJx0ldRgAuSCzWHoTpQayYoRLMnpCyL/AigCT7ItpHhB8KAaOVBysRYz4JTEGXRlu6286mE05RBT+lisgMq/v2KOchfAAeQj9YkJASIwlu/zwHc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778319; c=relaxed/simple; bh=twGP650+YHsC+Dcih/43ibN0FPFGglKDDGTJ1GNhIKg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fZF+vOgKTukBbhtuMmg+cWqEHjx7Wi1MelK/E+mzyzD80Qy/b3OEJUXBibDptJhBXgv+lIIUG4wr1PhGlJretmEKYsc9UK3NRYb+pOBLV04U7BmPhQ0o1VNosTHvhir9/jJIQ7qJX/TGB46fe+daLskls/JoX52LJC0DSnfn4Ok= 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=YRXKl/nY; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=C6XinO1V; 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="YRXKl/nY"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="C6XinO1V" 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 6870l44i227842; Mon, 7 Sep 2026 10:51: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=mwvaCKUdLCs8zXtLJUiB9uuEy9GPlbWo/GdGpb4ehRg=; b= YRXKl/nYKgqqQyDp1qqByp+OPe0W2hvvEN6HLlGnu0YaqORYiwpVEt4V+wdG2aOj IxjT95ddt7etQ1szmUhIZvqax25N/k4oDRcTiCRGgEWkjcdrTC7Alq58f9iR258R HAXHswdRTFtnJjijydUUP74mWYKUb3agR/L/UUXViAqf8Kuh6XdR1bvH6niiMabD 4PzidLN7/AGO6KyALTS3SSqbWvZYar9HPO+Dq6BIlqQyhqGEwN6572g+j2vHSsZn tDh4MHUeGVfCXNp8IzTShUMCMO+jufuWBg9vczEvjszRQGE4TILl1fOm1AzCvNRB mHBlPJWgY9Sc77EqS9FglQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessgc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:18 +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 687AopfE019106; Mon, 7 Sep 2026 10:51:17 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:17 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A9q269SizMq8nOBkFVFrU8ZJFkPzdfsU6aYH1sYTGKOZ2fmO24/jtpS/OwWXjBh2WRwpmD3AmnIPssBOdsTw/Znjw0qie+tZnTo2+LZgB+OI+DbifQI+ipVxPtj7aJQbiunx5Imf6opFdJcOyLJI28vFRFwEFmmTdCCa0zPx4otzbJpBGvjNc4C0AAdvbpfsxnXDU+q8MFILaozWWeJjJQ2Zc6ftcEYKezUJzrL6XiQbuD8lR8I2ZSJNr82cA5iZRewWagZttGMGgs+uvqkNpx5PfIUyXr5MmzqYWS1yDxxtNYZWZ6u1p+x3+7u4LINN+VSldUjKsHUk2AbimU1VNw== 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=mwvaCKUdLCs8zXtLJUiB9uuEy9GPlbWo/GdGpb4ehRg=; b=VOcA21CUQxEL8e6VIezyI1iFTQL/tiFch4cZSKG2fmnLO7xfHKszHsLUWHM6XxCW5bomzSbsW7R312dPJ+rqY6KPCORzNa3sNC264FTK9hcJk1d1UtW3VL7QkTaJ5Z8Rjp4DtcwkGIS4u6e3kwEUJh/jD7Ep83PAsYQmY8ssfs6oncX5NWL9qUc8m7fm3xQ82iIwa5UcGh5yPPO+RuY+1R2KglfR6Mf8t7bSWGHKhJ+UW/Q025VS5fTH2CbA/fDGEo/NcbFIhvZZ/jKctRS6pvYmadNSwoTwsTHmnKAWoVKwOYmuAl7oKO268G6Fz3nZIqGY2TZMMOMsR9cigF5KXw== 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=mwvaCKUdLCs8zXtLJUiB9uuEy9GPlbWo/GdGpb4ehRg=; b=C6XinO1VM+3eQcL3jO2nJhQc10NoERwJ1SQtECEu6KgkNX6BDQdfzttr0WslX/NxXU6+kP245sVaBLwldh8g7W+olDxVODf38SzI4vAqHglMCctQSwSL/T5/CxpLmGz1HEvtZysCoJR7ZEbNMMw2SdhaLwKJgVocTgDzNP+p+Gw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:50: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.0406.005; Mon, 7 Sep 2026 10:50:59 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 12/27] scsi-multipath: introduce scsi_device head structure Date: Mon, 7 Sep 2026 10:50:06 +0000 Message-ID: <20260907105021.1763236-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0010.namprd03.prod.outlook.com (2603:10b6:510:339::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c778bbb-e9af-46ed-b40b-08df0ccde6ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: oKRtrO2w5GfLzwzn6tpyHOxKrJ9nstc7Ub+xVZBnpTaRH/sQCcaaoxo71LY9pEaTbBl8Vx8/aza7NpsAYa1/xn+HcG0fVHg741uQ1cyZtTVKByUccOCkXF4xJAxklnjgzOt8y1ydDuz/L5o8uN1pCnj1/Wui1pA2TkghZFy9LWwNT0tOnh33ebLJIEZfAdWLtk1/I59tOxTr7RI8Uf6pZIogJkbg6B4sqiIfEnTa+Y3G31LD52QUpDYLKDvMYBkTKEVk7bmwL5z3T4AS4mJAq2BdHoO87roXIxaPd3MIjdnej+3dsKSe0EiPzsDvNZFOn1dFrHY4l87dCB1NTPk5SlL3iUs3lMQCj/Vsi3aUwg9ytgW1qcE2CWxBKqerkvvphss9HEtz0igBOHbtT+I8HmyyDJx766+QBDzgq7ymiPwKBygy4Rhhr0LihBjOtnnjCXFzKRfAdZyU8dBh25XUtDSi6Bkle0AD5OjSHQa65D2jZqL5nY83LdWxM5Z97Q/6QIBcTosX9+pPolzueI893Wn1RQfi6rT7rcYokV/L1BZrtnVtvY7B1kTkniQ8ue73OA7BC+KehPp2qOY+8wZaA4De1GMJl2HAFgxhuoOuy/uF5rkf+os1xJSlqWVz0lJWzCUlFzENFjqMf6EE+VzawIpyqo0b1IMSO33xI+M1FHQ= 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)(1800799024)(7416014)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KTafTxxpm+huUiAf8X8/AO7mZ0YPuRDwF8rJgSMGFe6ic8icmKjEI2IW0z/l?= =?us-ascii?Q?XgoQXbH0m57wfZgia9qwyPPmOJX+GKtJ6+1XovtIwqMhvK7xO1qZSLZ4cnJG?= =?us-ascii?Q?jJqQmED52fGE645+d+dO0hSD7NqcEcv67DJ4WxLv/cjUIoA28buuLU6lEhdK?= =?us-ascii?Q?ciPcP6sZ68ZOVeIZ8eDVqxTyh+jIGqab2fhNCjWfJ+mtYf53Qx9v3nVABXga?= =?us-ascii?Q?Dic/6AmNcIgAhH/EjNqoca6B8PnwoH0chj/IiqDxCUyUUJiEyFZEBWsN8pJw?= =?us-ascii?Q?b0bpQb8HGSspHaQqR2LatN0gl6XpSJTSQppwlwap2tGv4H3C0Jqo4JdRHzMC?= =?us-ascii?Q?p10AuQ+nnZu82Vv5C4Q7C3tgQZJFUHqqiOf6MQPoRz5OCr1sf/ooGGb/RHPQ?= =?us-ascii?Q?jHZNdgKJh2avqz4Nj7tINxvdOKOc8d5V289Q6wJ8noMALSrdntRjY7Ocuw7j?= =?us-ascii?Q?Tje+oB+zWGmaEgukXVC5Dcx8Gibq5eNXo4Fg2jtlXRzKNBQvZNinvJI/hTF/?= =?us-ascii?Q?MAoPRH/sXnHLLjbtHpePNEWG/si+Iv1srWagQAfb8MQ032sAZZHd5FaTV/fH?= =?us-ascii?Q?a5RaHR1NfE+3q/PuPf+v57aAE77RF5FPHuyUyFG7FjkJkwej9FaC+j1LLNBT?= =?us-ascii?Q?m/vU5M2hQ3uw80pYp3jO2KmfyXSc/LjnSuKXnrhiFA8jla88q6ZzWUSOREYE?= =?us-ascii?Q?Xci/FPUxZAYCZcDysDbGgJbzIiwrUvRER0NTNyHcQu+l8wno7vTkbyLEAvhc?= =?us-ascii?Q?6oQVeVD1pY1kNJXOr+qDHOB41p/09nb6nSF1aP+xZwAPYry4yBT49LyoJZ5y?= =?us-ascii?Q?HSXU9qtbxFA5jbU1oPu50PESJ1VMSBQ16TFffQkfuRCmerNoodAYQV+K+3Ef?= =?us-ascii?Q?KQbyMpPBgZ2C9wbunrVi0fHHORw0LMgSVn1Ukn5AfXBytoLT411Vuo+wHw/e?= =?us-ascii?Q?VytKQNyHErMq/TsUxbQf551eyv1U27rzCRuwLcQWMXBT02+KqoYJ53eFnk3w?= =?us-ascii?Q?BoWY2QTcmjswY8a/kG5ZBk7itI3NQkR1fUNdRGMOiM+jdSn7nwABexmskShX?= =?us-ascii?Q?20eOw4k+uI8zUZJLsoqNwlSZehv5ISOVW/l9rP0vNqj7p8YUYvfUruGWJbAA?= =?us-ascii?Q?pSLLdqkMxR/BSSsxsyryRkWf/Rsew+irlbrZxTirbZrdKZWChRenRg0SY1Ok?= =?us-ascii?Q?/UkGTvo4QsnKeibMFVmMTBbtzJstJ/Y2ye6zkT2laUOT366gBeg1utnlEi+b?= =?us-ascii?Q?pBfFwk46HYmIsz3jiAGkmZTqKz7pdl0/6vm8NC+tBtORpLswvSdz42sPfyWI?= =?us-ascii?Q?gtlN3HosoVffuxN5BVgmJ3lpr3YOEpMtFFHlu22yGINel8yPZUDu8RKXv6OG?= =?us-ascii?Q?js/kcT8r2F/+AFCsafWODruUHeesz5yC6A4golOSvnIVRu3UjIY6jmaF0j3f?= =?us-ascii?Q?uC4g8Vj3sW9Nltj7W8SfxKTnaZbbmUnUfS5bEcgZfEwJcVn6WyT6ykLuQhTi?= =?us-ascii?Q?oLgkbBCvbYIO1vyY8XbIv0kBd93Qt/q/NM66l/pY5w1cMySk5FYVksfYRo1E?= =?us-ascii?Q?Fa3A998YrF2ymaW5HqjsUK+l6QsDRB3dUgTIsUSVoRhSA22r76kUzebZmrLy?= =?us-ascii?Q?nDVnW9OUkzAf7tfXHd7VOUwhXJis76Ika6ghUBegalQvjt6VN5neGuQ6BJ5V?= =?us-ascii?Q?abuTtKsBy+RNt/8PsaW5kie85wdiH1u0VxD1fxCJbikpZ2ULWJz+Hgoi051q?= =?us-ascii?Q?8Ms3TyFl4Q=3D=3D?= X-Exchange-RoutingPolicyChecked: AOfDt5giauunXJvRiWwf4MPHy/a+hqDrYio/RehP6LFiiCXGva5GdGiGOm6PK5q8fOys3sZpdCNT+WYs+C72R6W9bFw9fsn0uYb4DHnhV2HgCfFBMm06aAxBqfPr9lEiDZM2Emeu8qbQHjQT996EkLaQmE4wjIzutKCbDDZO3v16cBbAgVt2Zs1dCxm7rgVGn1CO0fm7ZT3e1wwuq865yn4vbYT9rBXPjygZsB2cbIxi1RGSaokv0WFCXJ1uQ+BlMwSOwMrAqv1sWhuuY/AXVR59ZvsybWUhBmd1aCS2z3MUaSd8m6/BIXwjTFOzArmKlH0rNt95LZScpk0SVvKwAQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: OMJtjLBVLaSMxZfQDIN71Bsf6Oz2kfZpXzaeQxrCaKJknF7/gATSqCtaNXRvztFB5cJnQwwxe2+qNuJqKaaFAr++HGK2it1Ad5KDDGBeYg2Gc6ANnhYBXdDhmxptllLcuwbz+EGlk7xCAuuVkVWVMFFuBx1zMjGI9iiQ0mT+LEGf/vcB6SVA8/9X7jq7Gnyxf6yAvGdgouzJ2LUeX95lmHRQbR9jl/HcKcWhG7GL+18rljHj4vdAVSORp12khKQ2NI88WEjq/q9oLatVp0OGV4A73X6nzJIzul6dCJZs/1s5wsRoPfWexB6nK+GioUHuBz/NR6RAEuggP7e40QkYohEmuSluK+fcMiNqd8v70xxF3H/tZL+aMJe5n8ff/ttHY3uSBZgsJ6WtyhejTyYDgoQMKNhfjV9qoqYVvJZ4gjEN4SEQk5lkfW82csHYLSHbvajHSqHaeNEWrsfjHSHcQ3t2YiILcjW68B296THEnIzktxEupeeT4tTxR0Ym3wvaDUwWuTyL/OyryzcBTzqzg6FiFADBL6VkXJarFnCU/5UbKfEk9x9qKU/+qep8mxWQU5rHAi28RxUUMo019Rl/kms17sQIc2xfW25FZ6/0Ptk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c778bbb-e9af-46ed-b40b-08df0ccde6ea X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:50:59.4141 (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: mIIPnM2WrX710Imi4L7vavc+z2zastrkQcaJo6AsR+TKgDifW3ImHPUy/WF40wjAleJPrk3mpUM8kF05NTpcKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: _XH9MUjoYbEBmMMldxBS2p2Q6OWvNLsI X-Proofpoint-ORIG-GUID: _XH9MUjoYbEBmMMldxBS2p2Q6OWvNLsI X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e9726 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=rslDvqJ3sq2LG7fXSO4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX3nlqI8uLZePC zivwB5xsOSbiNWgIrOW7451QRupDKo/KLT+oIB6Jy3r4pRfHx+Hhbxxf+l5ofg/mG5xfWR307a3 qcdU+HmuuyXc61Od5UyMTN5NWWaSfokzXUY5MUMNNrKxdQZSr6z0SHu3lmn9d5xGDAs2QXsiF6J XEPSoXK1pkL5pDL/e+Cj+7AdeYa7WL6H6WBe5ZHg/l5gqhilCl1u7pvQzOu2CQfOKJs/XzmmBOz DWDk6yCR+ZgBxzvjz1lSAUcq/C82ITOmDIS0E1iOLS+1NkRcCCqtOU/gCEdve9ptOPmNJjCwibI 8Cx5GTbknET2s4l5t8CxnWmtOVPgv+Lqo2IE6xzCXXbcB8sVL11WVbjDID4stX+s5VdA43LwKCA 67nIzAInADrP/q7nDQmmCjuJWvuurO+tcYRkKh1QjYelTgAvHrqMGsdwVBlJu8eoKUo8EnfEGNN DVNZLvp8h2vNDqUEhbA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXw5MVlhWhuRkF 7IvnHBw7ThZJvqAHxJBypjVZwBlHGxIRq6CjsGIVhWV62ApnDgrRInujh0sYXrC+i4OM9ulg78s RjE6C9rgDN0g8FqleG8/nLXDXdwV0nkIkWuCBxXTQCRxRs5OiT1I 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 managed 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 | 205 +++++++++++++++++++++++++++++++++- drivers/scsi/scsi_sysfs.c | 3 + include/scsi/scsi_multipath.h | 36 ++++++ 3 files changed, 242 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 5559e2e8d64a8..0fd4347725134 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; @@ -72,6 +76,55 @@ 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); + ida_destroy(&scsi_mpath_head->ida); + 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; @@ -91,6 +144,74 @@ 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(char *vpd_id) +{ + 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; + + strscpy(scsi_mpath_head->vpd_id, vpd_id, + SCSI_MPATH_DEVICE_ID_LEN); + + 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_try_get_head(scsi_mpath_head)) + continue; + return scsi_mpath_head; + } + } + + return NULL; +} + static void scsi_multipath_sdev_uninit(struct scsi_device *sdev) { kfree(sdev->scsi_mpath_dev); @@ -99,6 +220,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) @@ -118,13 +240,51 @@ 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(sdev->scsi_mpath_dev->device_id_str); + 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; + } =20 + 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; + sdev->scsi_mpath_dev->scsi_mpath_head =3D scsi_mpath_head; + sdev->scsi_mpath_dev->mpath_device.mpath_head =3D + &scsi_mpath_head->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; @@ -135,13 +295,54 @@ void scsi_mpath_dev_release(struct scsi_device *sdev) scsi_multipath_sdev_uninit(sdev); } =20 -int __init scsi_multipath_init(void) +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) { + kref_get(&scsi_mpath_head->ref); +} +EXPORT_SYMBOL_GPL(scsi_mpath_get_head); + +int scsi_mpath_try_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_try_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) { + ida_destroy(&scsi_multipath_dev_ida); + 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 6a68da42df913..5b5de58063857 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1526,6 +1526,9 @@ void __scsi_remove_device(struct scsi_device *sdev) */ scsi_target_reap(scsi_target(sdev)); =20 + if (sdev->scsi_mpath_dev) + scsi_mpath_remove_device(sdev->scsi_mpath_dev); + put_device(dev); } =20 diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d3d410dafd17a..50d422798d835 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,14 @@ 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); +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); +int scsi_mpath_try_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 +70,22 @@ 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 +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) +{ +} +static inline +int scsi_mpath_try_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 Sep 25 23:50:57 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 6B21C479885; Mon, 7 Sep 2026 10:52:14 +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=1788778336; cv=fail; b=FapJ86kJpVpV5pHfDmtbQ/7fQzcEP3ku88UwY213AUjL65iIawaQyzWFlmIhh7kCFQPc9ZeJgA2v0HYRifP9KcfkuGQ+jtcIuo+RJ8H31iRCLIKNNGLVHBz7ZnooQ1UVFWIv5r9elyKqdPitg5rAnQWabkGLrCpTcqZ9spH5eEA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778336; c=relaxed/simple; bh=wwoKCJ9LRSf89BmrQmhRZbwGbyR6enO6v7oxz2XYei8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PCuEIOFBZ3aoJN8WboGeTBdPCFNotiUJRLmATMe5x+IxzrFUH5TSWDWjnPgHrU+5g2fPh8Hn+l09W2ErHhJfXhHBRrMU+GXl9fWGFedDgznCdWwf4eyjSbHbrpbcFPiLkoWCZFEK0GFJ8cGpp4QJEYF65alX3OPDzMUh9BLT0No= 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=dVDqmFTa; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ezc0OirR; 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="dVDqmFTa"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ezc0OirR" 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 686NcBq7770254; Mon, 7 Sep 2026 10:51: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=hUI8ygZGsNv/lAmmNKIrI995Hl00iMc6nJcndzX0TRo=; b= dVDqmFTa91qTngWeKVniX4uQLpNl0wM/Mggo96Lw1smP5TlDVmXtBTZTSVesSnbL O24tGm+hSdq08MbgOQIxF73BSKR8PO7Zqq2tB07FUqAR8v6phGsc+uNODAAzhwd3 g3bCCT+oGCzK6kHZHgJ95AkCoXGej7npBYjGVm06qvJB4I6ZvbfZEKsDzdlGbwu5 dA/oAuLJrnM9s23hOSj2ndA22rIuoHS6LrHCsxsa9KWqzbjwkLz6FDJeXIKx9fB0 K3ctdUJ62ovKnMZczQK1vwHByJKQLqjECd2vJUfA4TaMI1DeiF3Aq+IXSHhZYnAC R1zfNmlXT5JnklTzK8EaXw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbh09twx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:18 +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 687AopfF019106; Mon, 7 Sep 2026 10:51:18 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xNOlR9Nz5Ygufl7vGXJQcajQFRNZEtZP8AMHNDtoCaV3BtioHTd37B5HKutQi+HoHTOc3Tas4+QZYyQX/oaRqFeRoBWxrkeo8xMpsSbkVX2/3M500moz0wtaXQq9AMyZdaiwtow+PketygsbFzEyyfcPXlN6Q6LPfxRjaCg4l7H4+rYh36LbqwVdGQos4jmN/W0ddC8VVbOaiIyO2WhiCYX4B5nPoNc9WwWBA30br1kDctfujgxYEjL0yZf+Fs63c1gy/st0f3bJQpwn4pe6aNa1m+RhM7qWaTZoWzuz8zOjh6y879uB+uMsQ3j4hWXpxWwcGbRTlSYw/0yYXudVUA== 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=hUI8ygZGsNv/lAmmNKIrI995Hl00iMc6nJcndzX0TRo=; b=TP1kkVhu/Vb70zSgt/MhkvOc8TtzQNFqv9ZX9/LP0e3xSDquO1NrDV+K3u2dCKzT3hfsFfJ1dLCgagvL+82KZCg942DJzSwEzvvm0CUTW3adtFiVQvGmDtzI81o70+NL33/ilGlUjOMdDHa/E6B3clw/2ZnyWg9QwoizyIgxT6O9HTw3C7Nf/1zQqEklzy1e9Qa85QLXOxYFblY61vc8AbC1UYB/0CNDMef5Lg+Uhia0s/If2EK1JCT2uZJKLlT1ugC8CWxGMrkzu6m71wfgoTsS/s4WJoFQYVdYoA6+z5AQCKxH0c8BLhpgjyzkonRvuK1Ekvek9Ac+cPR8lp/bJg== 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=hUI8ygZGsNv/lAmmNKIrI995Hl00iMc6nJcndzX0TRo=; b=ezc0OirRQj6sPG6YASh0pragrne4e55r2lsDNowVf8iWuW1o1r3myZZKbmmzDVG4DFc+uet+3EHWefaqQ/djOm5X+86UgOAU6givt9OFiRpGvjMKaZCR4Sf4m1helqa9GIU4EC2lkLGSmOH76wnoM+yFwkLEsdYPP7YeGKa3BRM= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:01 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 13/27] scsi-multipath: provide sysfs link from to scsi_device Date: Mon, 7 Sep 2026 10:50:07 +0000 Message-ID: <20260907105021.1763236-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH5P220CA0011.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:34a::11) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 648a8909-cf1e-4365-7c7b-08df0ccde826 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: cbA6TtcosDjTItldWBfTv3aHFLAUAsgQ3WNPr8UYgv4n1T7Ou/S2skCs5OP71X5wiVCuqS3z/5Gndnk7XGX2frjQDY5aVed0li+U5P9eLsToQbTqKwsYl3ttGY5igHad9Dk6ithDsBXrAK7KCIsWfi/0EKWze+sZQTlfZu7RqxkNC60r1zMgUszViQyMMljq+WfKp8A9VXzYgjJB2KylApbFAcRyPsqgMxmUPvsyhQCl5KlixDklYVfDVF0ilykrIqxU4RyY/IU1ux6iJ0Ms5fijgkpX9JGal3hH0fVC3tQ2li4vrb1kRp049A4wHX/q772VVDAw61Fa/oUrM6IVLLck/tCTkdn8aX4pmbIIOlzwbqF76alNxeatXpqIbYkPulu5/wFdPtKAStkSvI8pzkkYLd4dThSu5t27lGK0AN4twDMn1xmBgPBX526KMlOSviATePGiuAV+LUhSSTJ3WPhtM8WNmKLv2LUiSfi1FufAGdUs8CvFmAmu0wGLbBqYTgtyouTBtt5u5cV+I0JbRUB7kOw4ERodleepLVeqAW+4DP5Y9WHBaFvvmfKtGv5eUZExHcJU9ZJVUWQRzyJmR1TL9/lt3lBzGTfL0gcQIV6tGeXTb9yU8w8ha8W7FsaWi5VK7+Qz4WRQyvGTir6dRrnzSpQatLj9XVlcX/Eg924= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hxLuPZY5cA1q/BgBRktvUyun4mZlw7q2uQ0aEwRvx3OZrM/v3AoF13eodwxd?= =?us-ascii?Q?FRdT8lEgcgVvAnLCmLhUcq411dVa9IcDkwFk4xpPOQMTw3mTOPQ2RWCn30Ww?= =?us-ascii?Q?/z5iF6ZlrsodcTT8KfEGvnXxxSDT8R3/O7uJI2+aj4Wk7xQGr7vmURWayqxP?= =?us-ascii?Q?Ig8GMYZ0MfQYSgAfuRoOHXBAXxIcmJ3rlxPI2zlDxJvZ1lqhNJLHhHouvUPF?= =?us-ascii?Q?3YVXcgfu1ALCI4uNLdYtxvPhTjj7gz2eOREVZ5snaujP5bCeYxosW3k/HqhF?= =?us-ascii?Q?EMfRQae62GPr4VmyZ7XYY2CfqJEqwy4KmNjh/nCgGH5DAP1vQtFlgdRFM5kG?= =?us-ascii?Q?2Gch+q701x/Qp0dAJ3QuHzfERpH1mm5kElpVKh3miiroY1jLra7AAPsp7Jep?= =?us-ascii?Q?fJqvtfR6CNMBTwlO9lm8efY9Jq1h8V45sA/bRhW8TgCKc4SGoAo8ta9m679t?= =?us-ascii?Q?wGZCJFqCGifpU2suvlfFxl5HhF66lEcjrJqrJTDTNJBt0Est9fgWPEt6dx6T?= =?us-ascii?Q?jfP+615G1KrNlwnNSvK36l4yKcTxNyZ7cRG1UXEau7euRHzbPYrqXyS0Hb62?= =?us-ascii?Q?xImh1uxYcmuhIOax5HAL8XnnV0LOmQzhdqdTSBbRf1uNXb0v5nx+e5nl5XAL?= =?us-ascii?Q?unhFxOdMJJOkuoyrm8iiSs4YMI2g9cdE2Uv7JdowgHm6V0RW7TC5tDneLRGA?= =?us-ascii?Q?ydxS9NVC29gUklH1rijiqoEFhuClkZVHPTpVmgmmbSXEX1poNzwdplXBpevw?= =?us-ascii?Q?ipaKE3DW15UGuBoMbi6zXRsooi6dgwF/Gcj4CJVzNF3acCF2bZqwvSxVfC0t?= =?us-ascii?Q?Otg8dXmVIHHMGxQbFcQ899r5GrIMkn3UaZh9Ruly7uR8PltJ0O7brpIlni9C?= =?us-ascii?Q?HcRoDpVGy3t7ijyII0vT7pV/VK4m09liPzDPSbuu48iW2Bqx+AeHXffbvCIL?= =?us-ascii?Q?dMeJG4WNsmfbzi72wBVA1bfA9ErvshFnMtRYX116YeQsgq1ViurcoDmFbYso?= =?us-ascii?Q?qYeOYgmG7psBKvbYTaqxqPKVE+FntFR+j754k85hAwTWNHBTGT74Z7FPNyI2?= =?us-ascii?Q?lzPA0xI9pnEQWCTUsCbNKsRuHqbEE/RFYgsTmixV4Ai1EbWkOa6aYaEDxJRX?= =?us-ascii?Q?AKAelSyIqA7wL8K09IOespMtBxasy3ix9BeRK3BHQYij6lLCY5sBM6AP5pxi?= =?us-ascii?Q?XYrmqdMOgZEbb4BQHmV9HAKGzE163W+Rn45QBUB171lI8s5oxnGJb2E848vI?= =?us-ascii?Q?sHsr0MHQPg5ZJYXpliC/EKf5mGUySxPT5dQ3if10bar6Du4bw43Ocmnj32Dc?= =?us-ascii?Q?p9chOpz+/LGN91IophCCuE/Vl3oii8dsWoQW87ikGPYqpA61yem4aPHO5jYB?= =?us-ascii?Q?glU/kDA8sXWznacGGDvwGiq2L05eQ8LXqdvZoJfEWrnYSNj/q9LOjEHhD3LM?= =?us-ascii?Q?WyNqbRvDcFDyneNRZDa+SGvNPgvBIWZhxwHNW0ju0YHtrWU++enxpj28HcCL?= =?us-ascii?Q?YO27UVQow5S8sZaIl01iXwVPoi0JSQISOEnlIPCrKMMFzEjJmQN5F5TigjJY?= =?us-ascii?Q?tXUQ8z7tnAqBkVi4MKeULkf9Ys9V6I9nybX26TUSJ6H3roa+x7OCmAtby3GM?= =?us-ascii?Q?6t5LWpOjUClW5CC0/KuRkWSrcKj68FoPwR0Igeiocx1TCyVa+AxETEtIAvBj?= =?us-ascii?Q?oFfDXQpG5Fj9FvePjnXK2CbxVscVioFhyHXeGTQ5YIrp30Mv0+v1QvtFNkOm?= =?us-ascii?Q?ZCgo152m/Q=3D=3D?= X-Exchange-RoutingPolicyChecked: qsLFE6Z4UEZIgTNU4/gbhSbiO4MdrFmVqPST0Svmpzt8TlyK5A8/8FJ0/4fvZUZUfe1iNLasnra3yBa8A7cwu+noqoSJ13IEYGRSYsGN+VwphOBnLeMzLiXpvoNqqa1wa4i9iTDKgVF2Va9RsAnVTfW1X9WKIROCSlnRLMHwn2BayLvB7fk0QAJY19nuCb/IdjHMDtTxUEXnZOS7Zbk+B1inA59XzhmxyjI1l4/mD3vPm9oyYYCnZZI+uxLEp3ZG7KxUsxrJjRcCRDsqPy/wH40emwLDrLkMfyDKeisC2tvjAaQxumbXPE+eYJktjzO3h9km6JgOu/+mxMSkxR1zlA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: m/ngLBTBn7Pd7tE7rva5sFZC5HSEhVuhY1UcslHU+RR7GpbwZUVtIjp+moTrmq/iHaVbiouFZv8Jg6COi1f2SQmpbXPKadNZmBVb5Z2FHEMYUdOANJOZ5lOo06P/opc1gCPDPKrkg4AZF2qXnIqfFYna8kUePV1jLMC8rBrAKqIdNIMLqcjrfiBBbz1pi1bpb1FNWg+X4AHF9ynxyCxoeOnzyHmcY9kPEuatRKRHdFHsX0oWlEdTCKmJzO4P5fNX63ipgUcQTB1V/FWpgYLOb6VdjBR3ANx4HFlWOClybwePxXdwOK+CFmuwujuEho4ysT+JBPPGs/8yu1GlZ7NLgoBXAXc4hYVq9KxJGH9vESUKoggy2tnEs7O3gaeq/Fr3Ot9eHZXKxmD0KQ+gb/HLYbYs+/77iYyu5iGiDemYbWRshpzx5+P334XDdAe9oWh97HpW0Gg5LTMF3NJo7ZnsQU2ihpiacTmVkfneTUD4v3uw0mvl0rZud8y2a5a3c4sYI0Tsgo0tLkiulh+TMn2TL4bINkkqkrjsNoVADwD3DPOlHEsfi3Uxqol+3hbqo0qUicylaJ7cyT75+bYpcbUb1D8NtqtJVsQ0it0/+d2djPk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 648a8909-cf1e-4365-7c7b-08df0ccde826 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:01.4286 (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: 8SC+9DrrB81SP9NpKnDUzI4qtqrg1Zov20qewX2368onv0SREDF6xc1U5v234u18KcC0ZBBrNg+lmWjldDaYng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-ORIG-GUID: nTg-_y_J3kwgosF1DBcZ-br8HIptADpN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXzjAUpN9zMTJx AZufuJA6/06E78Hu+RjPtYENDAcl/ZlwJ+5CYOFzfAonWpUW8vkofDwxQhaIi5/dKGvnlOj+Iv6 0i32rflIpmIOuU1KRMdItiWCO5SRpZlICL2v+qA00AbXMfMiErJt+CokZAl5V42EQ9SEisBYpJa 8HmM1GBIogmXyUIBfSnnEToDV5hyB2aHDGuNsSnGGISZxzIqwH845Rgnsp8BN6VTzrDhJP4Vhs+ 5rSdIGTPIajcVqmRQgA9i97n8n7kbRJe3uaXBis9rOmYZ/CDZe+MeBscDZAPPz7LtQ8OHxxps18 FHA8BUAyCep69k1eVPLgosmEd0iMf6NKZePkwhTTth1sr35R2hibS4fPhRbU/ELlArQYZ/ji2Ob v63StPFeHoseOxjzZTfvz5aOoNbSDtfleOpyJdt30gnblqTTSfBZqZIsF3jY6VV0kd9oYB8MBKx CCKIG2hnYgrXmtchd0w== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX08xK0asaGvae UDAS4rIsRv9p1zqdL0ZFLDcPG7S4CfWinIlabtzwfgHpZ/r2eFflW67PmeuUVSBd/m1TKrKWrOo Yl9Kwl1z4+26BVSFwVtLT4JJOy8ufGTCrQLuEZYa9xtIAkcRpQJm X-Authority-Analysis: v=2.4 cv=GKE41ONK c=1 sm=1 tr=0 ts=6a9e9726 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=ZbQ-JUxe3OK3M8wTWUQA:9 X-Proofpoint-GUID: nTg-_y_J3kwgosF1DBcZ-br8HIptADpN 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 0fd4347725134..1c04947d906ea 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -114,11 +114,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 5b5de58063857..b5d12b6943968 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1444,6 +1444,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)) { @@ -1496,6 +1499,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 50d422798d835..d224a15ce9c2a 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -49,6 +49,8 @@ void scsi_mpath_remove_device(struct scsi_mpath_device *s= csi_mpath_dev); void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); +void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); +void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -87,5 +89,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 Sep 25 23:50:57 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 B63B9483814; Mon, 7 Sep 2026 10:52:02 +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=1788778326; cv=fail; b=kZQMbhl8Po7sU5J5UxkpUW9C2u1pZLluEhix25ogg7EH/ggcfuaMfj0y+As+PpyTzSju/vFH9jKGqi1gXraIPclD09FAo0SI8lhJx2vixk8foH0HiMAsphDwqOhe3Fi1R5VhrTR46By4F36YVpLI8eBAjQmf8QozpyUZRXDczZA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778326; c=relaxed/simple; bh=2Ik7erG8b3f+M+YthkR8zBsM239sa/PicPIbV344Ub4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tLEI1u+448tpl/8CR6RwyqpFBDSahu8NL8kSuUMR/0v0gR2M0OOn+01qD68ptBEgqwooEhQi3cGNMf73kjxOj7fPphW5NTXgIhMoQvx61VHfXkKaln903OfNxN/ZgL+fRtEmf31BQjZftvpRUZrCwWb83KHsD4Osmdzuoh3wdM8= 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=Govs/ATX; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=i82LHCPe; 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="Govs/ATX"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="i82LHCPe" 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 6870UZ3L186187; Mon, 7 Sep 2026 10:51: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=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b= Govs/ATXbwldXKldFFHUI4pBjOun8S2Z+AERYxgm+WdrRCvlhvH8VVZINj9Em4Gu ji4WAYFHpLDoQMgqp6BqLuVqGO96nGwJC9o7zjHs+D17cXWc4JC7jcgwe6fmFRyO UwZ6+BtIkgMqhcLBw0qzZMNLnamgn/jc0y7kugKpB4fIbn1ckPGUSGogQ0UYtNmf lzzMitZ/PWD57lwd6r+Z9r/0DAsssB3ArNrhiXyFdd172vl3aL2UGKNHxwQZEKtv LWvNNfElMEkcGME/nYGlprz+nHw9GE+HJDXxyZH7XykMvWAPuvIoa8BCcm1nmZz1 uL9rZ9k/nL5FFE1W2ZByCw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbmq9t41-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51: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 687AopfG019106; Mon, 7 Sep 2026 10:51:18 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qfjO3m3KVczDK+bb8eWnPpeytikhCxavMOodZcqKuo7P65RfOHWf05C1dl3Qz+L+YXOH6s90fxIOu2Coztlz2Z2WbJxfKRxB2rgw91dmk14yU4lwMgwg0iIq/Ga2shbLrKUJgBywst25O+wNcKdnxHyaj+xG6+9k7PYD//Ns6deafLRgP6PjzWCJmsiF7WWTU2YrEOrSWNAjk25fI2N4Ehs3Ig7Qv0eEKDdf4GJYEA/r/xVpb07ri9FXVNB8aLD2r1J+NsnE3mFdpdu18ZIYIqodc3x0+VAN/IB/rUbDuLRlSfqdmq9exd/XDCRu822GHrlFmKzmio7g8PrEWKq4zg== 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=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b=LYysRlf+FevLXfMRL9zhS2nVO0vXcV8ucIihTLwwhxAUMZ94i9gGzYEip77vijIB4i1m/hGF4YjzBRUrCC2uwmSPS3eQOMcElp11/dSoz5Ykxh/Py90fKbnIlulJxTEdfyghcC/4L2e81/fbe/6eVzCtPlAbOCffz2555s1hM+61sOc1G445OouXE7Jh55ZIggVOjehnH9FW3jflL5fm853e5u9T10WlzdyzWStac472fSjJMl5zQdv6QBCBYngcNKRBHKU/LFi4QIdFcBAgicOddzSXz/Ne/E7kCDin1K4YkAoRfLwPtMI8i0krp2lv/ZavgIY9qk2yU1S+tGSGnw== 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=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b=i82LHCPeDuka3VoadLrDf/G505nioQdpz5YrCLZIWOIwWRaZn81j+fjVIuDOaU8saRgfKmCzHfTa/w2kv35PEyz4149PJLm3kqQGSNvfiq7P+qU12bsDskcFBr2p0qdx+IecVnJyVqCpHlcpUvnA8A++kqepifgyzLY7Z7pjEYM= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:03 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 14/27] scsi-multipath: support iopolicy Date: Mon, 7 Sep 2026 10:50:08 +0000 Message-ID: <20260907105021.1763236-15-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH5P220CA0010.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:34a::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 536ad148-b397-4735-5f13-08df0ccde95a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: wL4JpiPpkRwVfSFdSgJvBgeTaFziM4RLiYOtjUCMyn0E0meiz0lJBFmq/sR0j8ZDLknDg+u+o7FmX8IIpOjYzFfj+/hRFrN7GwbZdnZ/HurlYr+Kz1I2qMQBtdMWr9lqp9U2S3v2/WFy8DVSqxpNOSKX5RiyrgqtI/C3tHynoQuWo2oQpFjo5Qg6m7i+OTtGG+cIOAkt+AcLUUSmjnR2k+Unark8E/MRFG09w4LRJAS5lknHn8tMVQTpnkwGzp6Wg3K2BMNMwHNs+2oSrtjsvcuv8vhxx46xbc0GRjDSRbyXmOvIUp0rgVCtIkethGfZwvQh0kb5fqc8VXiz5j3TIKQ8c33byIy2Yq76fplmsRUdG8/3q9h+cOG/LSVuHA4dHT5mcomLoATaJElqhjkZqy/YLQeQViMGtZEl6WLzmLo7rfBJpH2Z2AGF1qHz/D5yUVC3dpyCPVOclP3n+yN6QY2j0cl6WbsLWF3HxkN8+89JtO7mEapHSDFgPTRvJOPGJKnaTdBY2ROsa5GoIOMtoJfil9BW656vXHJGjDSG3Oxg+xRkTd+y1hTYU7ya/SGaK+LOqzyg+py9d790aVS63XHlebVPC9DuAyBr992kFKlSWWAJuRpketpldgI20oMCYtnxbWS8T5gjLUSQPTh7wJ4nLkAKK58yS32uuw4SNNE= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9PplvjxlhCVmR4gFVSujCZkzdHw6FOOBPCvwzH6q62VS7dviQbVJcuv6/RdU?= =?us-ascii?Q?bixm5Qo9lIVgjutvfTn9d/ZQsuY0jCw65M3zEVKp/QoTemS6pTPIDoyS6j0Z?= =?us-ascii?Q?SD9KQ5OwnDt2din0JH3dAfEuVpA61auUKZNPiscfGZP2FZgHiuqLC4KmQg0o?= =?us-ascii?Q?sHAcVHM0/BE4ihYLK8s/nrDKKWCcQNkM8+80vK/f7TvDKPfYHqLI3wF7punO?= =?us-ascii?Q?CHgboFsr/7svpMj9vUTEvKB1Fvox6oTs95bPifxKDWPgktG5jhaMBDxC5HjL?= =?us-ascii?Q?BJcyrbSSvs2SAMQJYOLZGFI9SoScMXoEq5qCzlBm61mwOTLADgzhUVDU46fi?= =?us-ascii?Q?VRm0JruhxY4py68Wn02OEImRxK5Gf7apJ32zmUTwzis3od6b5FcNFK1kiWHe?= =?us-ascii?Q?hY2Z+a1CPXFYKyuMv3Dj0NXBfHbs79TkfYKWJLNwvEfRpeRn9MAjWwvw/gFT?= =?us-ascii?Q?paH/EzeXg8rM9HFHcsAeHVuZ6UudUuWr1xGJaELpIQ0xhnat27sQKvVMBrve?= =?us-ascii?Q?uCwaYcYh2evpvYIulxScvUPnB7VszFZa7Zd7RNd3jnJ98GBTkTnUClfrPkrt?= =?us-ascii?Q?qb7z0ECVCKqZMsH+cBPtyKP3YjKMW2RHiNnaDXZXPAAdQ5ChoMYjW1yxkLzX?= =?us-ascii?Q?eFEzxJgaNRLJuYpZw/c5KsrGs4fT26jv17AkAuZtwt6gHusjWTF9QhpuZx52?= =?us-ascii?Q?6NllgRH5XB0iyS+gOh3wUUCHxyF6uUAXIS1wxQNGaIAkaZ1uFvAKj6tj8hII?= =?us-ascii?Q?Qc9up0VkdlVZgSdoVCqdzmkl5cgd+FoSRhrAreeTdqLJv9F8/fYK2QorbDvp?= =?us-ascii?Q?RguEcz2RBdATPyuGzBmgzJCZb6PDxjh6NXo62s7YCgmFgW7gE8m5ST1xS5BZ?= =?us-ascii?Q?BXeRiFgRja3nN9tqwXwPb5ThhZ/mcGG6aivxfQlBAN5wGm2JYwdeTnnHBvoj?= =?us-ascii?Q?q4XKUwpV4PAP4Oa4gK0qrLZbrhZdgj4z8IZFBq1MZ+NBzD/l9cFlvnJ8J+SE?= =?us-ascii?Q?gbmaFRBvZAWNayM9rRzUpMj54uHO/Ttka8N70qvMcHgPDhTiPJdlX+6yBvoB?= =?us-ascii?Q?WLO0jpKH9lTPVGqA93FNJiGkKkS89D5anK5xoLt2qJZ4eZ2GPL6Ri2QCMrLB?= =?us-ascii?Q?g+c5YPaTej5gSSt4AvUeIaaKP7tHfFhbVzfJEuQ6K8ZuziamqMPR8R0WrUlw?= =?us-ascii?Q?WsMjcSdpKZdEl6+/xeAzi6h/JXRnlZcbok3tdX/+LIi5X+bo4i2pTa+t2ZSI?= =?us-ascii?Q?GZthZd5NizIkNcHBHWG+/MLsj8IW5GSy+nxtIeJIWOo+uRJk6R77VL3nzpKF?= =?us-ascii?Q?iAOkB9aj3FgffRNZId1tgdgToF4BCJzRk35RbUq7vQLNR8j6vMnaOUIEzqeB?= =?us-ascii?Q?pHQG+Y7l7uYHFLxI6pAmO3oXazHvviZDXQuYRbTo4OT8GxEn+zQyBjwAI6OB?= =?us-ascii?Q?IpQcNaAc+cbBm8iPi6IIwUqsMcITw/nqqXg201V+eeFnlsWjc1kAN3sY7Jxj?= =?us-ascii?Q?T+GUIYctOw3Ipk7vgwCk3skGYFEDK0vkXVNt70W1SMS7qPJylbW0Gik7ReU7?= =?us-ascii?Q?5Fc8y9wvmxCG4uBtBA9+MEXaDe2F2gLT5SQ5qKdO2CiLAYMzTlwNWTGz0FAf?= =?us-ascii?Q?7m6NiiAOMyCv18yRDwAOdcXqBSlKQPjk/PYQi9kI8wT49MzbYXOfEwT1ZM+6?= =?us-ascii?Q?d2CILPtJ+9/HdvObH0HU27sVq3pdOEJlr7dyRiWN8Xt8jqFlujRdysABmt9r?= =?us-ascii?Q?u8/skrMLuQ=3D=3D?= X-Exchange-RoutingPolicyChecked: rQYY7PwvInLR5xR7MTXaV2Olw5bHYvauCjaShfiPEvH6DUa7tQLTXRxpecV7jh206tYccsMjQCdjCOdEUCLcH+Fo7aravVRiqJKNH4Iq+o8xv85xA/4GmX2LAnc6pp7s22kJCaNZ+krQBmkKN9cjTcLXBrEzdo7GWkSYYlNoFG9A0D/6xgWuqjakt8d/rjeehrp4/H+ZzqACrgkKncmfAmoc3qE3Mwr26piwfGb/s8zNUNfvsrlFjUXkxZw9GqOP3obH+UM9OW/7vMD8GSAJ9CwBFM6B+apsOXncgh7Ck1ra3QyRcUjkUaUJUvMhm125VqcOPsayXDsemmjngs/Olg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: WxYL4Aadjs02TsxUi7vwtuLVCOK2z1pcgSTy9EQXze/ljfpaLlMBL3SAEq5GBvKY56/bBLgMUb4oinMb48xoAz/cYt/4I6eZYnVcyVohMfydDmQR4qWu8jXA1rXpkBIGWj9l6yMllyTenKClZPwHFueb8sdoBEpbwEUry3esrumqfZX8Vj8OxWtDBntGTjJDYEXeo/u4dHUOWEAzSU7Ub6pIeixyPsHXGYFhj00tQeEldKZW0jhpwV3b/rKzGH3Ef4A3iLQj6Dn8I1H4dDr84INW2WGtVAU2rsGLqYzYkzIlGFvhzktYSclwHm9l7qs8fHGE6obfXdvpdy9QWxu2aiqXbvrwBrytt1x41CgDqDZPn4fIeQDP+DFwssCW74ouDfm1SnbQ4Ll311YsuxRoBZw4pCP6d/XrygIwEGvmtTO8Ey2QLcDYXsIxxNdl50QfMjIOYYXrf9iOEpZipyikLs1Qke0JlufdhA+lNB9hCxwytPBt+eLWmeO3lxE3f0abOrns62feMNcYjxLnznPIMyiV7i0MynFjS1PfHs+xkUUj1W+BM3N6j/sM9D6oh5cJD/3Y2/FL3gU9nv2kgHxh/KccD30isrPowGiCqgVmpr0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 536ad148-b397-4735-5f13-08df0ccde95a X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:03.4283 (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: djjNMG/yqZ5Y3R8p9Ic3djhEGzjaADGJF++vTSS5xVPNm3GSG9fQYrC+8i9Zb43dI0TjITE82VApZRTYF3uK4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=JYiMa0KV c=1 sm=1 tr=0 ts=6a9e9727 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=YKYambv--S9dnOAEj4gA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXyJUop+BbaY2u 2femwLDEvuP1ja7uNZLj1V7PzOVqFJEgCxGwZHDuDZw6ROS6dTLHfSFYJWGaADq2F9k9h5UA1WA 6KTk1a6A7/Y6WczPH3YQt66OjsYsplMKTVMTjKsjvzARklhwcwODd5DsXgNsoQvHvUqBWfSlodJ mzY8dy4Wr/4Y0EPaVnh98VBFVzWTnvv8xCrCGXm9go6J21czPuoUm8Eb/yrZUXMAAGhB3yirknM eUrGg4qSXaGR/aWlNoiYBz2lBEzZsjeCLNwGl/S3hmF8I7kOaE14a1SRxsubN7ltp5b7eH25jzQ xZeEZqykgfOccFxiYFPDvIIHuYlFpq4kGNGhishLGGQEElt9X+VAUSSuFeP7QiWn7TktWFBFyP6 EBmzscTdyhEc788IPCD1RFyNDVC5j9kHt7sjF3XCP3dFfbPNomx58xUQIR2rdyfP1EmvOEuDcOB ZJ5e7IiEnWlBcxtJCbA== X-Proofpoint-ORIG-GUID: yXt9zYJEflqg4U4ktUO66RFOHw8npTOP X-Proofpoint-GUID: yXt9zYJEflqg4U4ktUO66RFOHw8npTOP X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXznRI7Se9maA6 VF3YtiGbd7tsAQkmJ1x3AG8fD/2g3MkHnQMV++JjC0mpwK27p0ElWepP2EBlRxS9Ntxnj99P7i5 m1VtPRaw/bIsQfA3BAN86I6vgGxXN5n/v6Prog4rIB/IBP4s6rEA Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 52 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_multipath.h | 3 ++ 2 files changed, 55 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 1c04947d906ea..7164bc61e65e1 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; @@ -99,8 +116,41 @@ 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); + /* + * Ensure requeue work completes, as this work could run later when + * the mpath_head is gone. + */ + flush_work(&mpath_head->requeue_work); + 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 @@ -204,6 +254,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_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 strscpy(scsi_mpath_head->vpd_id, vpd_id, SCSI_MPATH_DEVICE_ID_LEN); diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d224a15ce9c2a..d6f290b84f7f5 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 Sep 25 23:50:57 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 94A3447A884; Mon, 7 Sep 2026 10:51:54 +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=1788778317; cv=fail; b=KxwguxgkRzy6FlriaTeq3PyXpFrCkkN4xYM38ZKrjxtpxtfawze0rfv/yGMe921QI4uTKJ5NAbZWUDPGWKkSGk66G6yoC/I2Ks8TXsgdXA/ucl/ZvzeQea0SlSvM6e83mPoWrkNDjdBnJQRo0/JMewlZ/27BSXFjMOJccIbEPdw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778317; c=relaxed/simple; bh=B5XC+D/K7eecREwi47Ova7lBvJ7BYgJLxt2VaUTRJ5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=G3e49cC7ROJ2OF8kiDWc0sKuXtG9eVOd296BkJPw80Tyf8SOyKmsHQgKA1062/cj+HeyRfcifpwlYnzZh9eXgWl7aC4kYdgQXhwqh7TMheSdvY/DUq3gltsNNcCx7/eARjJJtYo6SMiAy7NE6J9vmk/HGp/DQBBcVtXpsGt54Xk= 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=T+3+P3On; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=TCWKdjKW; 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="T+3+P3On"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="TCWKdjKW" 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 686NSBAX1534288; Mon, 7 Sep 2026 10:51:20 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=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b= T+3+P3OnQOTwCMWJswX8X1sAJytsCQ5jFPV9IR0FtTCyuGjDfgX5NBdIg+QtDsIZ BqfQQZkJhNEJkn094BfSHBMGdQpgadjLxzFgekAFfjSU8hzYQWKTYQfPFLxwrYVj 891ovPwNHM5pgFnLzWeEovzLU6pYl+R9EK7D4PU1VqPMjuOOQg1ulzqRkjt7zXUn Bv1Q0tA/oE+56F3h2DvBKRxKOa001LXMiTEn78G6vQJ8qqKTyb5IL9lZt6Dp5/t2 QdLaiB1iri4miz9C+phJYlo8pq9p/RdDSVHKNr3LlINKZD+XLZIxNxcAVjKmOz7T i+yQS42ecqa1kXFgR7hfAA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdmhttp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:20 +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 687AopfH019106; Mon, 7 Sep 2026 10:51:19 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:19 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y6ZQSDs/+lGc7uIZnADd4lMa+7kd+a7WNsQDgT40kETGDdrXDBqR9iMh0/WXsJaV7gQPwiBgapx+JKmkrQTLA8u19U6YuxlVmlcDmMGRBX4GJ29GB53nXooIdiHSfzUNlrlU9rhcc2qrm42KmUe+KgZCYidm4F/AThJuEp2WLi47l+EwpRTzA9NdzYx06sswSao+6WTE24ef34Kt7zTESBksTKvDZie8Ke2Jc7VXZD5fqddMbCXg3NPO21Qt9CsDYj3MPoRupzBIqkAy+46NeygWHeEQKcE/tRLqd0/WjtcI6rNM9iCJx+xITEEVnuH89jSu+l1MMcauN4bufs1lvg== 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=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b=d4lxaKK0whKu3m2RTEwF3WPXpT9vVRMVOsc9wcoMkv6cTZ0e+0I1ShNWqpbIITpnEO1v8YW0HzpB4BC09ADYDJcvjF/sT2S+emg7llvam5DCanx0o1KbMX7YjrMG2TKwRRMjzCagcTyVTbqzW2Q+iufnqYTmPVa1OAdFllhTrxYtaboHHS3qt0CPAa3rWedvfaChwcSuK+mTetmTxfFSsx3MmbF5HDNBHYZan9xdRXMXqCyvGU0mg04C327hUh4lSIvie5zMAA+bM3KYZbFll20vlRUjNcL1b665GQP1vwp6Bq+AgtI8yuXK3rCd/DsVNP0w1qviGeCoRh3V2gZf9A== 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=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b=TCWKdjKW2G7m8NVZK7Q57joc5LNa9wk1LSSX1AcHJ8PRTZI+xXL/dlWYK55/BNXdW7bLr84/Wdg2mcoz63OaS02Zr8T7tGa0pPuH5BjA45sDiU7RdPL7OT/AuBxUklIFNjoIf8D3f6iu36gCABcYe43j4AoL8Ew9wSvtaBuyR1s= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:05 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 15/27] scsi-multipath: clone each bio Date: Mon, 7 Sep 2026 10:50:09 +0000 Message-ID: <20260907105021.1763236-16-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P222CA0026.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:33a::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a3beff2-5bd9-4ef7-8498-08df0ccdea82 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: VxHDGiFRzPX02tNP040WV9Wl8DGJitRxmhIfzVOPugkSfcGmy8iKkYqq1x6jaiR3wiFM6Mv8wOsVu/4sXfnRVoQw/K5vEJ7z9rfGHhrPLXlWb5NSinevNyXzR7PCk+FRDxwFpz9vij76W97zyYQZZiBoZQoTa7+c1icCPK6yRQ1eFzlgk4F9lcEk8+qYJtkaI6Of/vTdhav95KL00ii3/meLOWzNf6YR3pvJotvg16ul/St6yakTnAi4tfNOZmv2EWlRs2rfk7MHBviWoFn4hnIoWtpEPyll1Vk1CBB06qPfZ1e6HtE4aBkl+17/ILtQDWy1a9aNQpxOile/jRZeaoN6K/QmyZTyr9DjvqyIUYZlTLho99LMMWbAzLBKbbtZy9a1Cy2BgODzyKoTPRFmoBnq1mlFpg+2zd47TpQWC5gQTfk23wvwFQ3Lsk+WCWQgt/dErhrZRxgYLwZVITfK39o0YYPtWMNe32cK/F5WO88GQOCPo2Tc/gNrKZEvroLEPtu2H1W9rsyMo4JUjN1eUzzcWNVPoR9/vMdZMRWyf46Vlkk8FD4+gydRSfthl1GhLNVpA3GXlvBxrSQqFHnvgx0/XvbNtYS4dlZYC5zUxhj0Vbj7g+/0jvB5bcKUAtlan/3S5HLE2Mw6yk8lYj6w2gGVWWOlVaXCxDKKWR2HDRA= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pwYaGpB2M395RF8MrhEn/4ikXTE6fZHCIwhomnvyILfPVXhllQz9dJnt4+EX?= =?us-ascii?Q?WM6KegeIWOZRY1epBiouF4VL/awPVRpbfOS+3Fg9LsvjbDhvCp0SHU477YpP?= =?us-ascii?Q?zqcjzaiTE9/I2lsr6ivAG40pl2ShCQJwcVYFA95LXMXu43U4ODV39+rfmKuO?= =?us-ascii?Q?+nkdf516lAFSiJZzUNOhFGFBwAHQj92RIlR1JSvrCXDOPmuS5etKwDFCTg+O?= =?us-ascii?Q?tYnw9MX3R9A91gQIeZ59wiAnfKKi4hT1CQZWO3puffcdKjMHcEUaseEuYsg+?= =?us-ascii?Q?SJOh0v7cR7LHpIVZuudPvpbpOsmlLPrRRQ4kwZZCmNLxw2HKHgDXW0Kwtbmg?= =?us-ascii?Q?im22+jLNlMDtVuom69PeoKEoDGmfAMaZZxMqpFxqdXTl0lv1MwkQXGv9QD8N?= =?us-ascii?Q?zHhX5eMNSa4VShaLruqpWS0hSfW4bt5UDvIAld8bTw1+7iXQAEP9E8pbUs8Q?= =?us-ascii?Q?rKq/BFn+7pzhiTcRFr78criCmQSaqFOCQ6cdxbZ2OYjMO9QERuCgeOGRbYjE?= =?us-ascii?Q?/Ly4jEEoLbwTELyCVbw+1um9qnvtoF9GeA67sR+2WJ20b8EaYtGnVLZx20ZX?= =?us-ascii?Q?TF20VX6Q3lXu/imqRrpgV+9ccgBmha5/Dmq/I00Pn99VIbf9mpguBaeta8Sz?= =?us-ascii?Q?K8tdEezkUY4lBXx0J5758bLy+2gbiC4kqAoRmmSkSWLX95Weup81l14QBNSV?= =?us-ascii?Q?nXm0+GdkUgkK2lN8cIOZAM5XJhZbkgR1LEAqJcO6xalbpyaGuWRwDFT97x4L?= =?us-ascii?Q?EhaVCvDE9Vc18ZtODkG+CfxWB5wJkJRiegbKrkvEd/Iq989lQbLVat2VRy1u?= =?us-ascii?Q?WBcmRcd8PhpwpXxDzudUKmblHzUhFt2H4r1i0lfWlA5s7u1Je/VzSGO3d3m4?= =?us-ascii?Q?TPVd0qlweyn0joxFJb9eOLtn+EPU7/IpvAf9bI0UlXrLkEMYMGB7UzRKcii1?= =?us-ascii?Q?vyyL5220vQzuQxclaKfGkzXpoq5GRqiZ9NxuZ8+vx91uXux0FbY6Vq5u41Ne?= =?us-ascii?Q?FGUAMGexcLMp90WjRY53uml8GNAbDRXdSrJRFiicfSVwkpHf52XrwtMIO4AR?= =?us-ascii?Q?5YKutSiF+2fcQ7jTfNfn/jCRCh47/O3KCxRWltBqRJ5J9K+sJXlizTzCglSD?= =?us-ascii?Q?M+b3FRDYKrMF9tn4+mfI9kF+aJZt/hZKjK4rG5QNz7gOn7CM1kmZ945wnM+J?= =?us-ascii?Q?hjeVhZ35Xsln+rr8LLrqaXFwxlQ2mwpkLWbfu5po0+gH6j8OBl/oeu0N/Hxe?= =?us-ascii?Q?jF0zmCSdd2X5HnY8f4nRr9vGwEz5AHyejsETJnao2chZDc6zLbWZx5CwTPxJ?= =?us-ascii?Q?2fJ3Nlif2L3rrURY0ECyI1SnMYMGXTnPJDfu0knMtJ8LnXsg+He9yk8Ov7xI?= =?us-ascii?Q?G7VyW8uVvwu1R+ObbmFvW6X+eIqmUTCULP7YFHSva9A/B7VI6OEQn/F2zmi6?= =?us-ascii?Q?AdPSjQelUJrSadGsBYw5lNksr3IYT8c6UZ3++ElakO9tuIIuOH7XlgGk4vtB?= =?us-ascii?Q?smZYc8oCIbfnmvUWDt1Ty7H+7nUCb+I9bxe0Jv6Wi1I27WDinz6H5txyvZot?= =?us-ascii?Q?QuhMQ7TcB5DkQ8chIjxwFiCJNq4F+UKw5yeLNFAnuQczax/LGLmEMEgXIC1h?= =?us-ascii?Q?YDtVyz1iIYcgiRMIkCkJeQ4zyT26v2QWghX9V58NNStgN5m+y42n6A9uKQWp?= =?us-ascii?Q?BpmDU76SzNJ0vCGNJ39EaAihLnci8UoRVLnaJd4ZXVrQu6sjJTYLij529ujn?= =?us-ascii?Q?v65Mf42ucg=3D=3D?= X-Exchange-RoutingPolicyChecked: bSo0A3n5eTzUyncNamP/zVP4AQ+T5yQO4lN4yusHtj5BkP6fyfuslz9SmT4d27H+QK0f8xZX7/+HPcijN6Xf85kTVobzumZ+aEcnZcOJ7Mrq6J886plqW1Qz3x1N1UG5TzERtuxs7BDkHL+j5oukoKaGMDNCT9YOZZo1BqHvC1fV2bG2/u+NCgdZ06cGG6HYeH7YZp0aR9bcIayh/EIelK+nVoZz14BLEdhFEh16KViW9dKtMSG/jSrtvzhWt3RjjipNtsnwPGUB7+gwEKYTusVKKC2PZjS+8699iy5K8BzoliY7yt00mp4iDRUE+zrxZY+jKGt1Uuq3UlKY0EuBLw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: u5poJM1XOoGJFYPCCfPYvyT3YNdkBbwVA2+5S4dZk8LJac8tNQKj86zac8siNVjAehSDg4Cflxc6yTqpHt+Dk6GzSEQaY5op00KvvdoigDtRq5QZuqah0YfTiq+sj1GiBRwMXFsMWmbZC0gKcd9F84tIfd2UPOleuR4o3EglbR2ib4XiTHRbAywIUJ9Ikb0EMhVO0aLF/+l7YUq2Yj3lGZj83gzPiYG76apXCCa8zmqA05VVImAL1Dx1zWwpd8hT2YAE1oeBAjHcFzh7Onb4EQpgdm5RQmTIqJqDG5/qO/rgaLgVreIyMznmyzoaqC7TLFYfIe5YPDGksPeoR0hVFYkJoaGl4YA83aorI1xQVbUrSbFxrQJ7eZT8VqCUaL2w4ebKnul8V1QK9lyQD9Wcwk8X7NB223Ce7V1I8HrBU2H0OtjkuwjIvUB+raDFO52Lr3GKX+0+BGODFWDy/VyaMJk8AILMKoi0nQdt88uvlHTFe3a/WReqCZ535LdK2wRc+9a/Quv0/mcAGqxXVHSDlvDlXIojz4opGGnr9ES1TPI/t+TSAfkU7fzyQO8JcKc/CiP0R+kPELumS9MSuyXKJBofvCGRLExtov+0/jGYTBs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a3beff2-5bd9-4ef7-8498-08df0ccdea82 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:05.3884 (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: KQOvDc9hdU+z4Z+pP6nL1cGmXPb7cRLqFK7aSWdSDG9D3AegecXX7CdwxdVp1jpm+uGWsM+JQO3cIXN80/4BJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX1vQazTxgzXj/ zLDigRsPFMBFf0g5BBGl4+uHGtXKsqy7KvElCwefiuebZaw1neq26RwWQAh4e3wXhU8ejx6n66B lH9emlUP3VrnMr1+cUx1QKNiPauIh9i33sClQPOC78MYeq+BK7UM/KcFI9W/GxNShtGzFmhohx8 6OGpxp4BBr8PrL87LdCP56yjgvw12T0xUvcFyofCeMc26bVgCM69UEps5aCyFoRPrDDIbvhI6qP C+Bkv9OBmBCDIzy9uw8bULKYfwrsycikKHqKuOdZMDnVELz6bDpZMHGiU/jhHxyd7VsKVs8LYcZ Ia7Co0OWG+FqfE2dNrEta7H3j0YSvubO7mbTlGYgaaQpT0yJcJ9dZa+ywqxRv5GApwE87FU3nUS aJgZNuDZishaCtBeKyCGMFWNyQJNs987+dWQZSNck6vCXu+Bh2T0jSEeFMDucqoZJrlte2029+i hLQ9w/dR2Jd4dirE0pQ== X-Proofpoint-ORIG-GUID: 34DN7MsLSelLvoCQZHg9yq8aG2WocwZs X-Authority-Analysis: v=2.4 cv=d/DFDxjE c=1 sm=1 tr=0 ts=6a9e9728 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=BqU2WV_vvsyTyxaotp0D:22 a=PbwEKb89bYuBhGpDIggA:9 X-Proofpoint-GUID: 34DN7MsLSelLvoCQZHg9yq8aG2WocwZs X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXwZ2sySRO8AfD Z8rFBQhdoWG1wS76Oy5fL7upBMhfe3QSmrCDPPje7c+hGaJ6ocRweFguqBH2T4pcJRJBffsn+Kq VxOTIyLG6O2G9Jx1yih/zr6NQn4HR/T7KjB9D22P3sTZvbdClf81 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 7164bc61e65e1..68fe50f62158c 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -99,6 +99,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); ida_destroy(&scsi_mpath_head->ida); mpath_head_uninit(mpath_head); @@ -237,7 +238,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(char *vpd_id) @@ -263,6 +291,9 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_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); @@ -282,6 +313,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_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 d6f290b84f7f5..d2ef94ebd29af 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 Sep 25 23:50:57 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 C9A52471D14; Mon, 7 Sep 2026 10:52:03 +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=1788778328; cv=fail; b=rLhr1egCD75QXm6KCq+rA9+5OKeZC+AopSO5bwR3gbjU/NMtHAg3+a5AeGhh+ERnqljviwE4wrR5pdP6gq4wvIFL6cgJ6SKp9o6TrC0Hg3V/qhkGv1MpfbdPR4aWHhBL+EBWOoT2kbSmXPt3W7/edlfztDyji7tTR6znv4621wY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778328; c=relaxed/simple; bh=VrWyFA0ezpBF8OUbwISN6vP09cuyyb+Pp97YX/ONFgM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PvY+eImD7g24o9M8nS86B50K7QpQnNbos949J9QW7X91OTVJf2vC4tAYSr16oqg7eC5poz1XX7Gfe9WKI6zzDBjfIkmu5YnaK6PxPHVfMKNIN8t+L1LMwfUhdnElOiF35xa6ZEajdJIwJyByS8O78LXLsnlSgwEEzFfTbOYL5Og= 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=FCiL9FUi; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=y34MTKDn; 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="FCiL9FUi"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="y34MTKDn" 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 6872hQQ9474184; Mon, 7 Sep 2026 10:51:20 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=ny0BNd2Hakio3U8vUiUCEaAg3K4HmbzrQRuJLK/o+Nw=; b= FCiL9FUi5leX6hf4gGDJUeXGS7QYjLNVm8/hsEZY+FApxAOfq2A/AFvlYnbBM0uE pUqkyUxmvSdqmDe8Dgjd5gmgB9cyfk/XSsSNVY7ko6kZ/EDhq1m/w2Oh0lk7UuzE RtgVjAko3SHLEXi65b2IPnTJgJVsawTkSGwAAuHFV8frTwHgZ6KRHtqFF3T8evte RB4PkxSG8nLk6PyJiEgRzMpiOwF5LGNxRK3s+9d7fhc4Keo8XGxpFgolR4gWOZUC Ajqp5rpc61W9hO3+nq1nFmwlfoBsq6k9OQcajumi4BPUcdtQK48O3wpHjxVXfZxO ypa2ldgDL9hMy6YjSL604w== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbhuht0s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:20 +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 687AopfI019106; Mon, 7 Sep 2026 10:51:19 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-12 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:19 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yi4xccNciL2EefP7PePfu7mQdnIzA7STE0jJRrThjGO5CsHc1Z0+SvxaNEz63lm5dYfHDzSdNxxXC+VivEcxmGPuN4/MPCOm17jwCIzbjC7HK1jLTz3odbhGoQ5XwlB+xiqRJyKUXdxqAXHglIGW8Vao3b9GwikhfF3TDNIbKqi/TlrgCCF/LVeUMINzCrYSGV2bjshKK39tKjnqSfsMp71xw4JLCo9jWRmdBz/HlnNsRZvHI1h9t+//cMDoNI2KExzrHJy2KL6V2B21zHet3OfTJ4LIoyebD7639SsbQdhXNzCZBrBd3aBDUVMTQNjdTqsXoMPRnBVXIKBJfBrN+A== 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=ny0BNd2Hakio3U8vUiUCEaAg3K4HmbzrQRuJLK/o+Nw=; b=mGQT6TyAxrAzFl2b49lx8MmR6h7aecrWyq49ueG+H/spEv5gw4ZQQi9/OgCUJCWkcytJm97rYGQJxiXRUE2hHhBdIg2KdI5B/UEByTIMvK4LL84IeOaJ9O1RR4gRhLYj/oLmbGrMAQTggkyhoVEnTNugaViwY0Y2zyI2JwezEslafDCGhRaOlSvcF+mPAyke78rI7B9vx+Q/WmQ6lgBg42my++BdyTd5SIpdhOYTu4tbfcN4VEn2VdMR9t6ZyAh6Mn84WeAfXp9wWFhwA5PS6GmPqmVNuh139UswLiHauMRDUoYA4T2IgiAWT21cLTAQuLJL+iDUqdwdWX4FPbNQog== 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=ny0BNd2Hakio3U8vUiUCEaAg3K4HmbzrQRuJLK/o+Nw=; b=y34MTKDnq+C5+13/g8BENfxf5gFPr387vFhNHUxcuJmyB+92yl6OowA4haKDbS2+p+k8HFrj2hYsrqCW+w1FIOd6Up5FF8ZDQlqmcfBWQ4VYhQ+e4FHD2DCYZGCXtFOH59jWmxk6vq3N7brNjuqqsYDW3stnE+B1AP55l0SSLRU= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:07 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 16/27] scsi-multipath: clear path when device is blocked Date: Mon, 7 Sep 2026 10:50:10 +0000 Message-ID: <20260907105021.1763236-17-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR05CA0001.namprd05.prod.outlook.com (2603:10b6:510:2cc::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 22336eb2-4c69-4b3f-9322-08df0ccdebae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: iqaPixgFO6qtqJUpxIeUCM/nl0XbnPQJu+rc8sx447W8WbEWy+fbOsgOScPWJ94C3eDT0fzFKxW3gUyO2iFHherkrPQzpA4MxN4xcwNiH2UTfCb073Ah5YR1DgOqRa4J/sq2jB1FyDXnYcuwYU535vrZV1GcQKLfpX4NtC3jDw4u3952KZqfGWf+SsIWgFaUZ7XnXBugd7PylkIKnUy9lYeTxMMg8Tqg9aIjvEUiK8O0IzlLrITsaYuSrapCB7W3Y6v4juXP6iOQFeHLqvIo45Hy/2gU0DjhUMGHB+567zHpyDyR6K/EDv7OfT8nQp6k4sWrN2x4SpMaWAm5lK5m4laMCDlMR8weRErSpUxARpbLSFYhmXdxPqO7taDhXG3Dnkvqw/dQMA9DTLPg507KGdevd+uw+2docpO+JbBdLsrJAK6bLDvKa3dR+TGxhrCYXDxukkrX5bXR8v4nvDtgKcOdb6kMOD4y6LxSx9WKF2ztM7ENJYCPfYPEiWUwm6kYgkqRLr2Z6mvrIOscxDkUjfjAoH2zHvyJ1cXvKb+gZW6/a9fTDX19xcAvSHGN4J3HHNcxNgt6QLITI+1JHHAWoIkDDbzpRtMGdEmscTFwPdrJcMk9JxoPdVnXF3JnU9NrKKrzl+mDmg/0/4GPr+oqA3cLHZWf4ksXOICaA4eLuF4= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Lp03bO8WlExAh20XVk6658T/drmBlYRRmvNZ74xfgorFWSzjWHe29FhnT+td?= =?us-ascii?Q?6dzJ4xlqwxTxngeIF7AvyJx4Eripggbr8fg4HkOU+umYnPOCOv70cfPWk5yg?= =?us-ascii?Q?dQisFttHeEfYExPwZ4wdndlc/Dd1LiBJGRI1QHO8/hS4iL6zpM8fFT3YcVzF?= =?us-ascii?Q?3KxeGfXQCMpUmkiUX6dfT3gjEzpzRq4NoZkHFACR20VqtCPIykbLJaaqcR0z?= =?us-ascii?Q?aD4fM4e8YRNnVfDuHIqZ7ghSCg0X6NCEVl4qvD9Pq4sTEBRerr6m39UH5nM6?= =?us-ascii?Q?SILY2UgAuoD6oH3Ylh6HCqLJ5lJoT4Es3Uhr0F7gUf0I+FGLzStQ8zOslCqb?= =?us-ascii?Q?00WbZmCotS9TU9+Ud1GAQjUWzDKbLkpsjvSmXDK5c/xJJHq0ajkW85Bi/Ynw?= =?us-ascii?Q?b6QjbZSkVdcXsKy3sDRyQRIvr6znBtxLyJhk0+o68etawIGdWNlra7y0IMh0?= =?us-ascii?Q?/dpjG6QW1K/ZzAFq3Q+1iR8zIk4F44t6OYtgY5A5HjxfKsoGc5WCrcZ3B9i+?= =?us-ascii?Q?WnRLsZerN1Bgw/IMBEMTgaCYSgznIe+L1O87wuVUrkYcuyJ+oRkYCZe57nmA?= =?us-ascii?Q?6QnBdVbAaPrg3UoIOsX3Y81VOGi7uAhbw92V0UrkrqmJCJu71NBFYgwKIjz4?= =?us-ascii?Q?u+983DBO/IEE2ehxlwbJ7DYJYOiYousTXrJk08gy8jYfMqc00k2L813DKSoN?= =?us-ascii?Q?qZP4NGJXH9YaBfwKn2C1fs7KeOfHj8z9x5d30C+5EtLF+uewiBPzPu8fCNxi?= =?us-ascii?Q?RPrgf6NLttpltGUZOo2eT8zkynPJlCjuRddgNILdfa8eMS2Zh/5QTaKCSqW6?= =?us-ascii?Q?CIkRd2KcH6HO1F0vAOf5cYfafyxtuLUHwaqOpoRgBIcvT6ciSCpcp5Ejej5k?= =?us-ascii?Q?Q9qYJkEpoGtBHI5tZAwTqftkAu5na+gTsu0LaU8YNBlEXNhpm6FpuroHE4xD?= =?us-ascii?Q?HoUbeVGOr8THoVL0NDxIzWCKribt/kR5Dd4QwHZejzGbLEns1FoBZDHRIJOQ?= =?us-ascii?Q?+F3rPZoIfw/yxstDSxxINoys2PT4h6z5SJJnrzq9sqt93hZlLy8hXe89Z28l?= =?us-ascii?Q?8rgw0Nz660STQ5qi/J2zS9wPotyrZuIarl78xBQwcrYmZ7B4f7UlwaEqjN4S?= =?us-ascii?Q?b5n17Ed6wGxNxbMxu3rfWLPDLGu0YhVUpV4ExwpQ1JT4JXz2iDCTwiS+Q7bn?= =?us-ascii?Q?k8kdCCWde8WrqbivkVHuKniqPjHOJYoEjxEYfS5du06+de2hRNF5XGkTNAnP?= =?us-ascii?Q?hXPu8j9xOPlWq4CV/g2zJ53JFsXIMwpkk11MuNW4yUQkWy8e0Vumf3UKL24w?= =?us-ascii?Q?wRcw7F4FFCr/NxPZE6u3pn065VKPeKp6vYado3fSaUHjrLIhQWfOy7duCj38?= =?us-ascii?Q?Ly+WZbxUxY+VnR1tMEMBbUTngz0A8VmevXEkPkJ2BX7L6zJLZl1V7/Ii323t?= =?us-ascii?Q?v1/DQO1mhVb4id6du0E4vpQlmbxTldARKK0XetOkGZCxGHDu4Mno6Wqq0VPc?= =?us-ascii?Q?ygRUbmKWNzGtFKXPWMbsFGi0aqmO9WzmGNMtR2lWbv+y9ZDYoN+AMdrBWEfF?= =?us-ascii?Q?zD9DbG2nGDZ8z/WEfVSPrJquXCb0t0Q8iJmVlBUgoOaTOh9MD/QoUQraw8KN?= =?us-ascii?Q?W2Jkilp3N18Xb5K117DvckYm4vg/JCHGXzkmdeKYlnseABTK78Yt/dUDUbEB?= =?us-ascii?Q?8R+CPXufukDa/VGSI3MwxhgrmVldRg2QaNbDnel+XC+GZ+mkpkkHBmNj49Eq?= =?us-ascii?Q?5SGKUURusA=3D=3D?= X-Exchange-RoutingPolicyChecked: iroNbptE1P57UKxhFCl3jn2V1vyYi2utbmclYAwbHwLbnlQULKnACq5XxGJSKIlSEeGQQAyi32QEXRUedlhF68kzE8Ru/Rc1WfSnslXxmQtV8bxmIfqYyEBvWbCw3jAA+gZa3I+CToHeYhuo3zRQgwdJmjjvvXJGwvPpYI2Yt+xngcRRPWd7kl8YKzv+OEvx6kHFxCKnaIcVduvRgyMkUvonwY0ZSeeFQ3VwDYEG8SM3h04RmfbqlNDCdQdndHhbsBcUDqgJiHszI0mSQ64z24uLRJWFB/KGxTEAziHcjFFJGYjFvyoVM1Ua+QQbQJe2ygCINsIiew6XeWhJkxIstQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: FR8hmJ83AykQ5uub/bkUQT/eMRcHiWVBEXCVmhyCz5FOQsCaOvfES/AVbukt6UOSfKK3OGixwMAJsygQnT7uzcjDz5o/EGVbwfGEd+NfMunlsmEQySWP1ciA2uGp8FzttIBWVJQmgtqk9owJmm/2Pvc25PqhSMC7FFnalgSDTrLtSFlEkPvxhR053fc/CPjSgUnUCPgSuA5XLKiXQ8VTWvyqDh2BXlZxTz5Xb+9q3B0+SDPOgErQHu3FFM801b4vy/29WteYixpG93553f9Ey9B+ovQ02f0VENeIL4siH7KQcvQJpMmwI858LNfPd8+MFi87HPOx640k67g59DIJtQWyCca2GJ7a+eagg0IsU/SCXGffKFBk4BViVBFcKnpyqa4nibsYwRr/pKMEn8kITeIhAb3XSAoJqFKSqoYeliOzYNuiUVf6/kCwzkOTBvxkmeSUxM5d61zrew1hKQPdGEnJTO2YcSH4o/rJozsvkCP3QKBrnh5mGVUDj5H0TbKNbPmGXbjg0RrRKzTAS5nLC1uUNCDdkQouhSSzwvqe17aVYzoN6sii0GkeSyeauopw6496ZoZq/XCth1ZTCER/FmaEEPjxkPdoJDU6kOfjXuE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22336eb2-4c69-4b3f-9322-08df0ccdebae X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:07.3568 (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: MFNTShgTeI4t//XL8BYxv6Uj8qj8XojHq4BnTYqX/VmBfmsCM5VloN2m2YnqB4CkpxA1PTO7vMn687suprK09Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: X4D69Pk38fS1dYVaf1zQE_Ya_3r-IOjD X-Proofpoint-ORIG-GUID: X4D69Pk38fS1dYVaf1zQE_Ya_3r-IOjD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX7bRUPSkd33Gr NNzQ4uf6kQlj7+aUkmxv9eaEfUEB38R+xYhhUgYN94XlvyLfMbxC2qboxGlPGdZjB8Bkl19NgZP Vvn3c557ct+e3NuHPHmwpNp9wieHl4Uo6L/QdqSQxXh2j8AaPsxwnWJ8mPbpN5AlOxxXl/dUOjL OpmNEhYWtektZ1lDqk/UfeW2omqNXIp6YWT7/dQMkX9dKJsSZ74DGORz1FAUPFMy3PhrICBNvIz ahv4FS8YRpqjiMooJ3Rz1j/Y72u3uJ+jIpj10Kb4CboXIX9nQQMorBPayT8ezUEOFxwMxptSsot ySsIb1iIgnFm6GBOURkpYWuJ9RwIIZIYVZ2Ud11av5G//9v2aBsz8qfS0OVtyZkx74LqrPVzXdi ARdUMyVp++u0Ewlna1bMrgtnlqDZxPiBUzyPSt/uSmkVGe9a4lsOQaEqNIjNRC74y4WMExW84BP 1K4emNj00MfuYn+5vSQ== X-Authority-Analysis: v=2.4 cv=S4HpBosP c=1 sm=1 tr=0 ts=6a9e9728 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=dGdLxrnxUM9qrin9hOsA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX/zaYNquKeCTR q+qXteG4E2yBtdbRtCspM2pppGzsDpxb163vXK25NMYoKGgwgA6MncSIkpAoMlVGeroI61iPnzV mQTrxwcVEk/zaMKa4/3QesP7t9oKarCISP/KFBobkm5SDoOc/3FH 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 | 3 +++ drivers/scsi/scsi_multipath.c | 10 ++++++++++ include/scsi/scsi_multipath.h | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 48aab0df30b76..56200a7f5c748 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 @@ -3009,6 +3010,8 @@ static void scsi_device_block(struct scsi_device *sde= v, void *data) scsi_stop_queue(sdev); =20 mutex_unlock(&sdev->state_mutex); + if ((err =3D=3D 0) && sdev->scsi_mpath_dev) + scsi_mpath_dev_clear_path(sdev->scsi_mpath_dev); =20 WARN_ONCE(err, "%s: failed to block %s in state %d\n", __func__, dev_name(&sdev->sdev_gendev), state); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 68fe50f62158c..b16fe6a55fa73 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -238,6 +238,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 d2ef94ebd29af..2064a3e922748 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -55,6 +55,7 @@ int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_= mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -99,5 +100,9 @@ static inline void scsi_mpath_add_sysfs_link(struct scsi= _device *sdev) static inline void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) { } +static inline +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 42224479875; Mon, 7 Sep 2026 10:51:52 +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=1788778314; cv=fail; b=YqSBOb/SNToWQjHyKoVnlj4t6jTgTecQvBaabW6GW7c6YT02I6FTgGHN3ZY8z+Gk7hb2HfBqv5qzk59tN88TeQbnCiFdyKrRoPsE1qw3vuwdKeXNuc8M/BBJrCqw7J2l5MQhu02IVM3BsdInnWSuHqxhKYHYK/JNZ9anFRyosh0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778314; c=relaxed/simple; bh=xWVzKMoCXic7ZyE7Ybw80e0bY7GYGYOkCGTmWHw/UR0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JpkjGB5AqDxg7oQCvoQpRkHmTUxQpzcZBLPI7qAbgMM7I7+jI2gmbhe9crNvlLJys/pG/L2WLRneGqZCdhDXDTBxQo9WVqmOUW1fy+IR5yt6EtrOeZzVip3QWtc3a84VRWsBbItDZ9iJqI0eqBv0K0E64ISVO2EFis67LP0fknA= 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=cqU7edZ5; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=qjsoe1cy; 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="cqU7edZ5"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="qjsoe1cy" 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 686Ng5HN187870; Mon, 7 Sep 2026 10:51: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=gx0Nwrq8SF+b8bDDMAsIxDoC5NfsOaqt5sGZDxeXuyU=; b= cqU7edZ5s4ezk8LB/YwttKxac24seJWQbCDwjAUil/eZV2DQA3UaOcCy9J+uRWBD GnplrK4++wkdCNLBMKR0JlGvcN8XTfytvf3sUkPU3Cc16ZpF/Vm1b3T7idRKpTWm HgYuPssrqsDy3h95ewXmkZK6jYZCRXKD2KugAdFBlJlWK/BcoiuXnygO1coE5LE9 0hPwYd5gkwAxycILZ0aZnXanZhu+y2yijSoLZcdYSW6iBrzKBJrliUJxyU8MIQtm Qn49N8N7IMTY5Pe69LKSudV5ogRWgEO/jME7Da0IFzoxSX39T7zYb3zQQYrSO+wy ssUmXZEcMF3ORZY5D1cMVg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbgvssfr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:21 +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 687AopfJ019106; Mon, 7 Sep 2026 10:51:20 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-13 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:20 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MQEdh73apjHur+3UbsAaijPV22mtNDyKT9p+WiG3+a74CaxDWVctcJec+QRpXxaDLcuF8nsq0GknaqMcivd0msfkg60fxNVUj0z9Grw0PsKvLsbyIQaAnzY4pYzlJwU5z1McveGrDkl/kS/N8qp+TWdINIyizRxoy1uKWtd2EAZaCEdjmA2Sc2fYSU8fHUpj4s+Rq0/a1cHDnCrOYE8Nq5HY0F414gea1NEteYdlPCwB2qXToLLhnta6dcvMbpcKZp0obB/PP0pjzZK09MCGMsV7BcrJrzr85FGyKc8zDCXocOwrCxvpThHxwFNBvRuNZlk+RSzABEq8MoXIKH0sEQ== 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=gx0Nwrq8SF+b8bDDMAsIxDoC5NfsOaqt5sGZDxeXuyU=; b=gVio98tkTEo+jh5eLZGC0oT25vpAli5lmVFfdrqDuzSCdq0FvgBQOOezGFFoKrpr1PAmhw2qzdve8VvxJbZw41CWDWzUp/5tChQxgg5BAzeqkhVihzmnFnsIOyQadScStvGR7MYmF7a9faevODqHz72dKmkyKWgCIttUO+NN1pwpq3cQG6K9O5/+uC4mlqDpsQj695ups8mSTvTINqkweS28u6gric4WqjWSxi2icRDlkOuIngX9viI7vEcjCq64/KeRZHZT+UrIg03AhyXFN2obGcGe+P0EeRqGzXFKDjz4BRp6FtXEIr3y0sPGR4lHAoGlnOkP9uYp0vQd65wtag== 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=gx0Nwrq8SF+b8bDDMAsIxDoC5NfsOaqt5sGZDxeXuyU=; b=qjsoe1cyztMXSL6tM2fJm4xuW2SA8tUEwpkz0DmKyfsGRHbl/N/xYKDAW5c9rjkdNx7JOy+p8Z/Sw9Zvnf/MM7wT2iscQl2+UalhM0gVSo8waLz4M3BumdPGRhhgGbftRo2rxRIcrweLFEkem9wDcgnElkS1PKcBOrLZQtM7v5A= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51:09 +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.0406.005; Mon, 7 Sep 2026 10:51:09 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 17/27] scsi-multipath: revalidate paths upon device unblock Date: Mon, 7 Sep 2026 10:50:11 +0000 Message-ID: <20260907105021.1763236-18-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH5P220CA0004.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:34a::16) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 8cde276d-1c12-40de-aa39-08df0ccdecef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: tUo8PxdJv9rOlU6hnk4OIycbGIgb23o/2rEmfC3uvyYsB8BvLIJfQk3pWjDIumDiJDd6EHkwWdXiOPC43daVZc52I/TDjdmG3bScvp0+NjUniNRWKCXmdYFI1Ehv1hW6r9u+vlP08z2HTpBgQmsp9hEhLGr8WKEr9tihBA0BJPbP1qOeKBiZktN24PJu5VUkWl4fpIu4UicGen6x4XLgchawUa5QQl1frcu44/X7iVsi8nWF/QtSTy98Di5OYKEq3NVzg5/mZf7Kx1wxg6HN3NdxCKD2HYcIFbEWwCA9b9CzV9wdg1Qh9QByR1qrHT3JJQ8+JToMFtCCZ3gisSISadfkpVBWeX2HWWh9JaDZ0IO0CaeElMMIn+rPFfbS8OR8WOoVtNB92+5CpAKJ0F+mg0dHhN5rrPDX0MuT3/Am4dijqPpn4fv0b9Ajg/dqcdfPjJjvL7WSVdKbXQ0AJTDZ0S4FUzofVHcjcI4y9CtCu1qXMhqGertKesgLwhmiWlm3QYd2jbib6PqGaJj4Sxp5rWLovSpO2CxPZXSSmQVuKhbt4TbiBSuXZ2XFSh3wSEMxpi/IX6DsHRdd3rbMYEJYqeDjZdbfXIjNjY/Fi4ozxRFph4jo58NlOvsKD7q8HOg4K3wlAsKiDgn5nn3/57ccGHPe1w5bKlRuR8GuOIV4/cs= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QbktVUCO3UrunGK+4QMK8iiP0VdpNDBjKsvQJCEzUayCsuaepJCwVTkjn3Dl?= =?us-ascii?Q?YvtOlwhYRL/b2WcOMYJyHGjp3JFZe0or1B3zNwk8uqN794jb5Ha/750a2m9h?= =?us-ascii?Q?DqH8HsQOAvwshYi+yuWW4KUdJYJTCljuB32G4rfCoPWn/5lrgvgFENmJM+dF?= =?us-ascii?Q?HVHdNEKj6hfppVXs4akJcppnsfuYaaG4eO5bbagbOnGkBHbm7bZBZ17ByYOL?= =?us-ascii?Q?8TfDUJcZoafK/L9PpatbF8SHJ+nuKIQzx0RrsTkjc9j9DVzsyCfvrrfI+25n?= =?us-ascii?Q?4N7vl4fo+tyr/YJS9a6EXYUoF7TBvfFT+FarPx8UxAcc/BXL5f0pjlc9NOlQ?= =?us-ascii?Q?9lb80OqGls6M+z/S2X7ovjyXXtGjv/PguoSfuBmUJXUMGbr7nfxDeaF/V/mZ?= =?us-ascii?Q?kHgOMeT1Jjze5LXZ8dLTWDMabABT2bm1kkaSxlE6Gntu3K2f1ZyQxNboG/ur?= =?us-ascii?Q?p5Fdwl3mPPzTDEn7s/4DbcPsi1F7u5e0e9caiFWaLJTXDV/o2B/TgQMmwddN?= =?us-ascii?Q?XOspmDvQVVSqU1Tj0h/ay5gMuHu4fPk7zoiadU1M+eFcpfIMdk5wfOex7f+e?= =?us-ascii?Q?F/UV/EhBSvDO7kICifrP3X9CVY0joqBVDM34uMek9fUgNT/+CQXDMj8FKqt5?= =?us-ascii?Q?3chMUl1/so/ZmJL/ECSTBrRhYVPaiGt30A01UZKzkA7PrzUli331bJuJiW3l?= =?us-ascii?Q?KuUlud21PLOTb/Qfe6os9oeSstl34Fj/f5DlrbmuneuiRzs1V6iAVE8ci+L1?= =?us-ascii?Q?GYOkGyLJAGDDjujfpNFZ7evSY0gJPe7YEwZ370FGwqPGSjopVEBVGP03QJMV?= =?us-ascii?Q?0LjS1ZhzC42UazYorIk5LSLlp5btyBJMrJEjf+p9zAh3WOIpv8BVa/eIXbVm?= =?us-ascii?Q?VZFR6vBPHPVXGyECxFnqMND+UEhEOkv5Ah0uiYUXSAjsklSig1hUhyxNQ/d8?= =?us-ascii?Q?MqMe8+7HWEvaa5sXAQ1/oregTQYcf/ktlMwsVSdHiiw6BdiVk+F613LAXaQv?= =?us-ascii?Q?+1yjuJ8AhiFQ4HgSYkLHjz7KDkbT+R3Jj/ksd5wfyDAqDwIKhza4/j7gvdqk?= =?us-ascii?Q?UYlXFeHalP7GivKvSJkYw4KZf/0XSx0mlDANKm+W9tnCcdAPNOeWjtVuVqAz?= =?us-ascii?Q?V96lGNZEryOC8EEoMFyMwbHSfEtzdu0/fPvx7nEXo9+soQBiu04Cp0AIAG3R?= =?us-ascii?Q?NhTXYIUvaata3zptYc+ThojR09143xPagbGLVIaZbEOp3CJUEXV4+hO2c0Ge?= =?us-ascii?Q?ZwfImECl43Ae9JfW/+/KJy9iKv4YXXAwIBv9acXt5assh/PAApBirpqAxTg8?= =?us-ascii?Q?JsQ0cdVnZio0hJ89pCR7TdEuHB46jJ2RO0Gq1HHqO2dg3ZX59eiEbdGeSNZB?= =?us-ascii?Q?3LZ3S/u6WAe/putoqEvYTtCjOO2kTRfHJSOQyVGm5FNv9FSKOJdOUj75zEDD?= =?us-ascii?Q?3s2ovHcRgwoaiZpVjFaxH7uLHJ4fByNt5+G+L2LuDouVEqd3FC89LIO5Barl?= =?us-ascii?Q?DhOLrrs3JqXZPJW+2v0/P6kH7n1hvDZFwn+LR4QwUtcWXtympjxK/+0/U9fs?= =?us-ascii?Q?8/ZP3+89Dqw495fenV8U071pz/Jv8O8rg5LBKiecaiE7ekfJtd0aPjNPkFUa?= =?us-ascii?Q?MJEQKBWXGCUIzKtm+8A7qpxzScD4CpzT7VaHHJiAHH/N7vkiN1/virv5YdDF?= =?us-ascii?Q?NEQX2Sj2n/hn+WH1asWh/wSJmBhQVD/otiyJhWzt+HMxHD90lLV61x8GmQP1?= =?us-ascii?Q?qif+bqQvrg=3D=3D?= X-Exchange-RoutingPolicyChecked: rxFQvIReAI0O0L8vP2OU0CoSetwNfrc/izx9IQDobjGEX70q/Qh/r/47hFNKcVXqJrWZrlp+bDSX+L+qgSTVMaz/olg/tP6cFQz8IWGSI3krplNFAtDWo8jPALKEjc3cUjTKPg/WXjKJ4C4plQx5vvG24Bhzco4N3BsKrx07Y3im1qV60d68rv0hwYApTT3xkO2FPsOf0y3dh8e1vGNWJ2CFfE6qZ0n9D7MwYV82wFXUgU47azr375gcQu3hK/FU4qwkH0x1NZjx1oz0Gixhx/Hxn6y0UvsF0bp9FyrpzqijbnB/JIMCGph5lQm25YFI+INhBL26y+P2/SbpkX4NZA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lc1VfLrVVUlJFz18F0i/kYKH+hn3t+ZOQIgjAmSQiNi4JpSlFxaSAVdweY1NWCnLzSe5yzFbuFDdvn5INpIwjsiWr8ZUfJucFLll/fA4MXmrYp/DdTuJcW9W0bJbWCWiJZCQfUi0iGdJl/E2ZVCuc4JZ26p13AnWrX0rIhuKiKpdMfaSuwMBsne6uJcEaEeGEWyH5Fi758l0ANYp0XOXKWesiJKhfTppZZFajbFjXFAZ3b2K2iq0ptIRitBXz89MSZceaYUtgjHTY49P6OfcvV+YPOlvNTOdOBNdQFD0ajb/5sTtEylVNtJqxzGphzaET1sU4rsqfKiXd4JhQen0iKoQhgWBWDv5gve4aj7zAZaDlVsCD6pbKpv9sp2j3SQlpS1VL+DprB47MgiYVRymbJxZ4+rwr8gf32SpUeXn5JmejqDWgPzpwzbQXAFBPPpCbe6p0aPtGgTpNcaeIVScg4YnNe7C9VG54Te68nU+d3mS0V80dgRkltuZnTUQNZSjdcbDwtdnYaJzEBOCDYhicuiXjA5B9rOuPe0HBqDo4LRERNXJ3sbFn/qzgcDIdNSxk5wycOdvwu53sl+ePJJzdC4jePGOeUIyPyZNBVzqVpQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8cde276d-1c12-40de-aa39-08df0ccdecef X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:09.4288 (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: fqLEaPsC19g8FDGh2iMrYDQXvj4AaQOl/5yg9p7LzyMJOgqp3wDuBh2btmFLaIiPhCfxUOqDe6bcvNBLPXZlJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=921 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-ORIG-GUID: S4A8AGwpOS0OJHzqssYSZ_ql2VOga2Cp X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX8saCp7M+dmR2 H99xqxp+5+IrFI5aeDfljbt4Kn1JE6HQ5HvC0jkKhgEJDkxbo5eP3pocMctv8m6DzAJc9x6QGo8 U7yshKcR9kjMH+YsDuOXhOhCU0Tw9IxZH2Xjco6e2GmvQFR0Y58S X-Proofpoint-GUID: S4A8AGwpOS0OJHzqssYSZ_ql2VOga2Cp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX8C0yxIshyYpm XIWF7OvHNZ6KFM47tbskry/GiuR1wDuAyzV4xchSdJ0kTH9E9m6J2+vmZ8vxpVJBf5vIKjdUeLB vL+Mo/M3bY61Dg3ZxJjy2yCybHO2Uzxo6I4o+5oiIGRac0evDFNFCHa3lH6d/SE7M+bTm9GNdLz WLYxnmfAt/toLa3+ltr6P7Q4S6UkIGME+ndjBEQCC1tZYdUNpCDu/hEkuJsLEmcZ+S+w4ow7mW+ x/35Y2UVtIr1I3Ayxjh/Bg7IDPzKwAWLOliu228ozLGorx5oSZvyAOM/5+dID4n6fxgOPUBUIFm Bjl4OgUx6ipjrFLoSb+Ht7XMGfkfOJaZUUjgfX9oHM1ckfTzA72BK44zsRkbQzZhucOnKN9IPJ0 V2Mm+0s49dLHgsxiPYHoAwLQNJ4bA8ed5/NLqXEbBzXP8xs47rC0rJ8kRT4sSJCsm7Niw1IaVLf sq7U9edEBahThzB8O6A== X-Authority-Analysis: v=2.4 cv=Td6mcxQh c=1 sm=1 tr=0 ts=6a9e9729 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=dGdLxrnxUM9qrin9hOsA:9 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 56200a7f5c748..1a6f5e1fd80cb 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -3093,6 +3093,8 @@ static int scsi_internal_device_unblock(struct scsi_d= evice *sdev, mutex_lock(&sdev->state_mutex); ret =3D scsi_internal_device_unblock_nowait(sdev, new_state); mutex_unlock(&sdev->state_mutex); + if ((ret =3D=3D 0) && sdev->scsi_mpath_dev) + scsi_mpath_revalidate_paths(sdev->scsi_mpath_dev); =20 return ret; } diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index b16fe6a55fa73..456351fee4b98 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -238,6 +238,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 2064a3e922748..6e50da94fc5dd 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -56,6 +56,7 @@ void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpa= th_head); void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); 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 { @@ -104,5 +105,9 @@ 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) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 9ED0F483BDB; Mon, 7 Sep 2026 10:52:04 +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=1788778329; cv=fail; b=rdRWxitoBcR2W99mwQ/FJDfmb/WBhZiIGWRxAd0LeQ9zus628tZihDl5D5Ziu3PRNpSg+wL7VSgvQM6N6aD8VrW7EEtuCmJl/49VydjMdAJRsEOq3cHSGMq7WvjyC8e3RZcndx+BCb2jFA+2vvQVUi88kNFThujxpT+1GvBJv90= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778329; c=relaxed/simple; bh=OFVKOe+lsmHmuCq0omcn3uxsuRZP87isof0hIZ5sXoA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rxOQVLFFQoriYhvdm55jiQqMXRa4WkcNjsmYyu96+SZY6LYZw5XxNPMX1yrgJEP9fUTPXl7aT1ZP3IQ4IJWLUSvNAG+ZM1FXjx9hPPW4et4sMNVS23THnelQipqSNvBX9WHScvtAQjXtQjvGamSTvP0fEjUnNPU4LHAlNqeZFmE= 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=rVEdKXaR; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=J8NhpCTo; 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="rVEdKXaR"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="J8NhpCTo" 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 68700hK2137039; Mon, 7 Sep 2026 10:51: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=hSi7NiA0l4fTaLtYpqS6Rx+TIcgVNszoNjieFIW5moU=; b= rVEdKXaRKGkXXlxRgPCOVDUGtRBtwTQi1C4vRVMVAJBQGhZMgXE7ptmKTLRabnNx tsAXX7gFhACow9HbW7kFHf8eDZKrXp85eiASb+PVIE/SlQIrWHV1hY0a4lvRHlZ7 poHzNQ00zVWgy139E66sWleCwwipfcvzj+LQqKzQAOQNaX+klimNxAfyhXgk4C8o PKzqi8eYGKKBzVPjVzqe2koRnf7yAItMTOpzwV4yWwDS6Nylpc6bLi7tVAst/h/h 9ENRdjrVy+bLsyhDdAutiQw0M+IAY61HuMs0S5aAcB8aErS/z9S3T+bYRASPXXhq jfgl+xSUN05R5J08FK+gDQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbmq9t42-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:21 +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 687AopfK019106; Mon, 7 Sep 2026 10:51:21 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-14 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:20 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UzyWN098yE6nqcJI26j2PzWqdIPgh2l5msdI8oWdJKKSCiZxBf3iVNOyaDMubYp4KJwQEyv68DQGrP13A9RotQ5K3K1g3VTioj71iTsKPlxqh4GlLKkPikB+NQVGeZS8svE/03GZHZfTz0cmmKQ98Jy0sx2UiNdO1dvY5VZCuVjzvCByijolEFl80zB8C+lhTrLI7ueKcNwlqG14Vpp/itOHLzGhZZu/IuWbqwQ1+NLPQhyKRhs/u4TS/8zcem/43e+SgIjVI3VctABb8n2WvGQGEFPCNsevJwZGujeRSIM998uMrBYRN5prbXQEWiccL/ORw3iym9yIiYQ1vSITPA== 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=hSi7NiA0l4fTaLtYpqS6Rx+TIcgVNszoNjieFIW5moU=; b=CvB81SSvruaHEYoAYoZrT/F5qrW1z96nlSNXsjJXMuml+jwN6C5m7mceyWr2E9n5zSB/DK8j5i1DCgy70ytXOOaIFZZsHc7j5z8cgovzQ7aD6MG7kZhyjfkJ8xuahW5uc1KRkdBK3xCut3XAb5bRWENdypva5hL8K7Hy7TDFjdYo77MqEbW1/i0oEYPeo6oQr6sai7cpvJ8YpHMoVJOPBY7I2PLVlP6g3RxSghYrq0FoNdAjBovPBFpB2CxJ57l8EhW5dP9PLHZWoiBTuzMP3gN8FYhWno7KW6GrsgwsnNcoD8E0Dh70wsVyt0UDV0B0BLPyBUi3qxc5ANBkT3yytA== 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=hSi7NiA0l4fTaLtYpqS6Rx+TIcgVNszoNjieFIW5moU=; b=J8NhpCToJIDhTEC8FcG/Xu2YzOdlTP/9O53BZbllJHWGQcFzYB7nDpF0r3VZF8Rl8oTXjbAvz7B1z62XPMqOdHtmLgb2Ww1dnNggiBI3ehUfYad232T6ZVeTW47utv0DlZjP8wA+vkTeEqKyltT7VFiI3wH1zt5QjnQFzhSShVc= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:11 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 18/27] scsi-multipath: failover handling Date: Mon, 7 Sep 2026 10:50:12 +0000 Message-ID: <20260907105021.1763236-19-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P223CA0025.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:338::33) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 99cc62e2-0602-469a-165c-08df0ccdee0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: dca5NJttUaAzn8F43O7xsDAJecalcJD9KS8ppWQgqQluMbO0nqWjVAu6whkWDnq6HVagP6Sv7ijdIEUSy2DcsCDz1Hn9trcVfHwaidFMC26WNNqGJ+f/YaxWXHQEgtCnz5NfOEdVRhLVtTYaiRI+YcF6wuWs8MQYikLM45YM5/boejSJvmucZhFKx4twbVtpKfdfnnEj4N7EH07WvzFvRMOtzv3v3JjSZk1zmWhfXqcdaMDbGvdJlvo6btCtv+MV5K4gHsCACLlpcZofWQ6XMJNa/RxL8l7+6r5NJ9dfFv5gigrX+TOYplTnch0orNB5H/3yk4HGWGhYvpfpbG9k2rlnbw36DmFcWzurXeUP6A3UpUvU+fj/J7XLZUdb2vy2slnhDyoNChqIe5YO5b+LXSrUh3rPOb/546ijwULvdwDDulMHX2GZRIZoo36abq7SRpkgn3eyj48x06mrx4hL8369B5y8KO2XN5jtU7YJ9kOB+MkZ5NEuw0WpD/uGXeG/8BaI3Tyfl4ldCUpJb8rOKQbmejegRPoVXEmieXy6er/1wbN8jL82OIlGFbYIYy7GVQbSm2R0diMbOVe/yUWTAO78liNCkAzR6Vx/vb2aUsIlh6FRw+4oUASNTKCP0qThLNgVAE7DcMA1pUGO61SX3i2D432M/OS0DOVmr0NSWFQ= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QtsJbzm/8TGTwgPXO6rzrrmMHm3WQUW8jaKpkPk99b6qxHm3QvH2PenPEpMa?= =?us-ascii?Q?Rns+DQb1B6YL0bfPUCwVye8KSmu5X2tzmXPh2mAcGWRMb3B8cAZ32EBJCoGA?= =?us-ascii?Q?uk4/mdXX5XnQN8vhGA8OR4Ug3mp2ZroAWrTvbQqouDFLoKE9FPlDrI3UA+ZV?= =?us-ascii?Q?mWJE/O8IjAMJjSegjtY2VLsjdTdPuTZnQtn6jELdb1oTcylK6gPpeCCV6xys?= =?us-ascii?Q?lW4P5u2O4v3wbeRKHZ96z3e3O9XLqjJ5KouShrITC2YGr0GXr711fzB8Ifny?= =?us-ascii?Q?eI95n3CjCzHa0Onb7z/vlV5yn4LGg+LtwqlvMqsrx3OYJVwWeNGz3I0MfrMi?= =?us-ascii?Q?zW16+2Tku95QftVL4x9t+u59uUmad4lePUJk8rswJ40alIB1xahN0nDkCJDe?= =?us-ascii?Q?NB0kPRs9rozaW8rY8tcuKax4QRmoZvAvmxkYiWgF2KDsMiS/ihWvDosu9n6Y?= =?us-ascii?Q?AH+LNTHT+Fi05yR+0i0uPKn6yfjbYg+AcAaRXrP1qwn7f2sacY0yN+lIl+d9?= =?us-ascii?Q?fodMpzjwdrNN8jZz/F6CX7Pgtm+lYFxl1903vDG+UBTQ2BRDcUGpmJEzJNzG?= =?us-ascii?Q?pVyScNTT9zHMTWTnbQPe49t9yF7p15R8np4iZb1Z8i7OQ9hdhqsAOJXNFBJU?= =?us-ascii?Q?p0DeidhsANj3Ahcy6EI89cKRqzd96i8n04BNM8NTH1jPW5LEzHcbzWr7OnsK?= =?us-ascii?Q?zgk8kk45puhaVkU3RDQlzcoNZe+F4+VXovGk9l2AbmqBELhOOVXzgbZaqPKY?= =?us-ascii?Q?MnwT114Yp59L/XHqKt8kdM2r1b0ovRk8K0aY0zoqMsGFgLVdJ0uxFPrSyIH7?= =?us-ascii?Q?2vuRa702gf6KOzg/ffjW2OAfdJ/BD6za6/UDhudINx6q3mX3AgB4vz1zNqBj?= =?us-ascii?Q?owD9vRqWa8DMG2CbDEEfneFtwACZKVe785tQZPUkzFQSd8BQBFXGsasLxY9v?= =?us-ascii?Q?ugeJrhZTloEcQ3gaZXpGZ0wpDNtQvP1Bxv/ARJpTshAOKgZ1jggDYqCMjO3B?= =?us-ascii?Q?TX0Scm0P/ZovE/K8IsDyvTmJ0/B98qQIwnd08wDpO86FYw56oST7CVWOXUN6?= =?us-ascii?Q?NGxaSfdPeHYaTROiXP6HYoWlkpK6ujIb4XcFrQcQgrTAtvyYr7C4ki8k7QlE?= =?us-ascii?Q?5BgBNd7HtsGHyud2kpw/CFJthXGMIReIzy8nAtRR7hKjwQajfUbcCeQVRl4a?= =?us-ascii?Q?EbDDThlShRrJsaD1xHmb96DXfDn6f5o58c4Ykppew78+Rh0XnX2XErQBxbT3?= =?us-ascii?Q?x8sqSnfA0LvtnOI7oW48aUVYtWESh7IYiERB5iVdJi2uFuCHJaswSyjRUJ3O?= =?us-ascii?Q?knKHHnpoxgF9/e2BY5eYDTwq5XZbY6DmOo5V6cgsK8njIC91a1tDqbzt48X1?= =?us-ascii?Q?6HGxmk0W86yVuhguxq1bhv0NjwN8iZqoDX02zTvbgL7KIXIOAAQJtxT2btOo?= =?us-ascii?Q?bgTBQrQui91tc3WblbP+duI3lwX8mQbjMJ6UrkLNR9lYMRWTxDB8JgjfNThj?= =?us-ascii?Q?yGWKCGDzFINwayoxQWOrcqIOiCQdDhXr2eKOhDUsNGKbCch29o8pPhSywQsK?= =?us-ascii?Q?mlAdVlC1PAWgll/SnAbUbMI8VOGMpNrEaJQY7E7PwG1wFBolWYLWiNhNOP8N?= =?us-ascii?Q?etgAEs1UrlhisdmSyU3iqUe24x+8M2FhzxR4ul9qUz3FRostsLnczyZ3A94n?= =?us-ascii?Q?rzMp/20CO9nsXAs0F/36T31MsyUYoc5bWicfCbaL+gZlDuZUhflhP4XnT5pK?= =?us-ascii?Q?6hAn5p92hg=3D=3D?= X-Exchange-RoutingPolicyChecked: nOdT+lBniicVxDZ+6qejmJxQuhzxpsJv08lxXRiW1BPnmQ5oFJsoJdahaJFwpKuUksgYqQTcMuJQYnPH/3rIsY04r5IZcJaoumoH72QDIQmcYbNct2litPzBjlB6wlk245ODPXE/wWyN6kuFzQiyqTmcfB23om1keFDbjuaUGkL2XROAhKX2SHl1c5O5WbwzEcAGJnxGtV5gEi7L7B8VXbW4cKh/gVlFdq17vfvthDebf0yFxAIoDQJoENWyAt1JjGegl7+fMUrvwup7bKRlI3T/jn4NCXBt8BlLeR0nPGBZNEz37N1s+WdAcAgd8x00wJQCqufMC/Uf8sNumeM7+g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: M9KCCbY0JPzz0xJMAUeVOgptySBxDkABlFO8HqV3F11pGld7CPdCJwwW5Z9LhTEveXzngz2huzzzpYJa0vQBjTba32hlL6fn7yn3dO5xXp60/WU3vHgO0ESQxNtshMGQa2AiBFmkI3+vxHWlMDFi1JaNlSuuL2hDl9HC5pNfTJkgD0378Irvc8H/wWSC/FTjs74r+g8cYaXAr0Gup5TPKVBZvaNoe1Cwa0Yco6bW3JtvXryBjhEzWmAPnwq3xg1b8so6FFUrV1lNB1SzrpAdEYx6GwW8RHFLtD/7jnLBz8344kwH2m7BGf5oavO//nnh1kQUKNDxAR8wMOY8bHkmT+HgGSzVoysp4PZZtOlbwvJ3C6P7T5e34mu8UVTxzWJnM+5SK7fZg2KKS/lGKbdF2yMDA1rx8+SBkGokWKxxaPxXSGqevu8F04vYk/6uxuCkl5sVHs811HsIn9W2or7RCsQhd/ZNWSb++0jYsEbVsOdzufqvV+T0AePIaxstczDQ4l+V1eSrtc2m2tjvGqYWSNzf7Oo4UesOP3iyz+IX/F8UUhVV95aA6Vo3n0GQj0BVEq8yW42b4PHXHm008iUgT0O6ng+sN6usJ9b1dkhafcE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99cc62e2-0602-469a-165c-08df0ccdee0c X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:11.3484 (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: fRtZOEqIO2jYXF3yc691PdlfMm+SvuV1SiUd40ze/vWD4cMw14+LONNoGZd60rrwCoRa4GEmS2zTXaF1hbh50g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=JYiMa0KV c=1 sm=1 tr=0 ts=6a9e9729 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=MDoXrTVN0QxiaFRtCNIA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX+eRo3+GdainY lBF2cHYl61PNENWSNFjTy/bVDo+5vwNaD9L9QDmIPKW7VH+ta3ZgYRjMX4bJDafs9Cn4mP9Lct/ JeDRr1GPu527PO/o+lHSI5LF7mzt4DZa+WIWrGYehpvPrZm5HtzY+WRImwYNrcEu1TehRmKnNma AS4Z+MYK4z7X2AVUG/0L7kvIgcX1bOOBXI+5J+NR25XdM56/dyvG6/jrZS+3ntFHf4Eav+8ySDP kwuYVoH1TBPapBzB7+/A37uepsFPgFNcg5BDpYk5GO1cShDcONJJBzLs+Woajrz/2rfD+uBVfYF Itzpcn4NGr3de9U/ng35Ie+dGxIhMGl0wKWBDaANuAvOZuryPx1fTHYTg91JFRcYJ1wjM0Lxub4 NU5TMD9lBYXWjBr0/2U2XyMFNlHcaqBhOMar5qtfPbPp8fLajezS+gWPpzzb2YaXykLLEvFIIsA 3o18eK18v4ttgZyHnFQ== X-Proofpoint-ORIG-GUID: HvuzPnq08YhsA7I9k21GhLAF0v41JoXs X-Proofpoint-GUID: HvuzPnq08YhsA7I9k21GhLAF0v41JoXs X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX4XKfIv/VYsRY hFLX8+WXf1sDTHhlPqDrM8RrFBR08MoYgu/zmeiGle59Vu52mH04ZuVhkDu5TviLJlILbgpzC+t 8SrxTWJPj2eFq/HhYDdA+nxVFSacUAJaDzmIiTJHdEhnJxJ51Uwc 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 | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 456351fee4b98..12200664ed676 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -256,10 +256,34 @@ 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_master(struct bio_list *bl, + struct bio *master_bio) +{ + if (bl->tail) + bl->tail->bi_next =3D master_bio; + else + bl->head =3D master_bio; + bl->tail =3D master_bio; +} + static void scsi_mpath_clone_end_io(struct bio *clone) { struct bio *master_bio =3D clone->bi_private; =20 + if (clone->bi_status && blk_path_error(clone->bi_status)) { + struct mpath_head *mpath_head =3D + master_bio->bi_bdev->bd_disk->private_data; + unsigned long flags; + + spin_lock_irqsave(&mpath_head->requeue_lock, flags); + bio_list_add_master(&mpath_head->requeue_list, master_bio); + spin_unlock_irqrestore(&mpath_head->requeue_lock, flags); + bio_put(clone); + + mpath_schedule_requeue_work(mpath_head); + return; + } + master_bio->bi_status =3D clone->bi_status; bio_put(clone); bio_endio(master_bio); --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 E0B52479883; Mon, 7 Sep 2026 10:51:52 +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=1788778315; cv=fail; b=GuIb9BiOPGUoG1iNpboLmn/XpCuveAtGPkJculeIADuby0GnOP7dolIzTE2+ky+DZS4pOtwDgu/mH9IHYtmHRzF37Jauss0wAfCmMUS96O1LpTnz9wp0oxLWwi/dckjIN5II4DzhWJst9H58b35H64P5rI6CznOy+4RC5XA1NLA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778315; c=relaxed/simple; bh=/a2yLf4VBqousiE8vOzP0ziG1hShZTCR3ae3nt0Yc3M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mSlCkhnhN07rc7/mwjfegQFRNhk6jDV23tDqj1WU40kWxJW8utL1yIjDp5ZLL4AfgGNk2+3yA+7kyUc0XRP5v4IP6m9l7ezK5jQcO5o5wR+XgbuF6QFm3LG82KaQCOBmoIdCtVoJ702UyfTOW6iyU9KnIWTstrGsdX603H25HJA= 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=PHppOQPH; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=EdJnm+SV; 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="PHppOQPH"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="EdJnm+SV" 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 6870ocJs289152; Mon, 7 Sep 2026 10:51: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=aHmVfLBj465DRwXL3wgNa/r4s+3paS/tfbwtuKSqN70=; b= PHppOQPHSNxMIEh2fI6hVtpOr4h3iQPpD+rGAgh8lQuYlRV/P63V8MWUkTvg5x9M LklUj7AwtxQ3XwhLWsdJRhYW79+f8msAr8dC8/t6amveRbflSO9LIMuHRkTV+T0Q 6MXNoYWqaD5suRmANtI4wj+90qB1y/wEQueH4+LOgP0l9D3K4qnT2y+e8aFEeWb4 hD/oeOS9lXgjuqgKY1Q9wfbNXL5NpYu46r1dc/WIiRiyqeuSxTZJ2AnvXWavwoTO Gw5TUCf1vR0LsvvLXA8CbqhtqAysXA+8qLWgWqIaILw81JAfvCv96xSHvahE0Osj Fjn1cwO70Eh2FFi3SKyXTQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbhuht0t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:22 +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 687AopfL019106; Mon, 7 Sep 2026 10:51:21 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-15 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:21 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kJd3pg06yflSL64+5IV5CvoLC7esBnMp67cw+jJJ7ETjHYggeW7CGOF2JFsKBGTPjLLgfsWYmff/vQr33CysiZ91f7JsC7tuRwGH3w7z/AW7dcOb0kPlugH8q4H6f34k2ND4ilnYCJNgJUr4M2yua923JgVNOTd4BZntSA815Id1uPouHYEuiiFsul2Vsi9O11hzGwy04jE/FhIFTYr8NWfNtUub0tYyaE6MP+EECDXGlU1vqqZoqId0bM+LhJ4OQEhj8oKFhgHF1IYrOJ5t1Q1zBDfWRyXrHhf7LFbKWHIczHkKMuhGzjPPPJnEHznY44IxKB++uUu9EcFQkugU5Q== 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=aHmVfLBj465DRwXL3wgNa/r4s+3paS/tfbwtuKSqN70=; b=AdpmkFL63S1FFJzSKU3FSLJzS3off6x1Rbo0G8mXQaiS7Qx9O1zYnsAcG2Fww9BcUxvpP1WeNafZcAjZ6JXF1X+wGQo2y2h2Bqc9nGXORatGXEsSutZIARPPUgTuvV9KviOTZ12V2zECssXOE7QN2TYjCGed5+bxw6DmomybZGbSgmZGE7m92r8i7SEFjUN2OBUTGaK2AV3rwIpLVvZgUpVQa1w4BYI6pa768YhVE8eOG288CxWH06oPz2/lKq112/cUmUwkx/J2CMtBBndJWUskS/6Yq6ZVTtHGvoec4ZqVUwZmmXcfMmZ1fbyA3k/2l2oee3swGKIm4wv1VG+0Ag== 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=aHmVfLBj465DRwXL3wgNa/r4s+3paS/tfbwtuKSqN70=; b=EdJnm+SV7yqBVmFUI8HenLL+W6kvvi5WMTNGdKNudXh5Vw6Xcw2nah5XCSpeiqg7SAOgUQ6mXb73zXGzPEIkQWcyhdkUQGmQwLis+ApX2plNwNQoD6WQfGKwtPfeW3oOq4t3PiZWgJDxTipjJt8YG4VvaiN7j0gLq+RxYEO6J0E= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:13 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 19/27] scsi-multipath: provide callbacks for path state Date: Mon, 7 Sep 2026 10:50:13 +0000 Message-ID: <20260907105021.1763236-20-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH3PEPF000040A4.namprd05.prod.outlook.com (2603:10b6:518:1::53) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: acfe45bb-34c8-418e-996c-08df0ccdef49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: x6fTBY2+yH3OyAu2MsLHuUWC+7lgLVcc7apiiBPit1SkjT/1RdpWZ/1hlqcyLSdsTFpKghS2ltx9sS/QTMLpwm5TaX9j6gxAkucjNLK9aKTV0+mV0ocXmWdrGoDrML1RAl3qW26cyiq91cglQkm5EeEjwQtrWG/dMG4DMrcCL8QEz3CIX9wHK9NKcWoC1M9yI2+OsMJtCvcFNJTDcLqYg24vHigal/al9+rjHsDg1eKd1PxO86BHS+5EEmpLWKhOXs9Yo5cx/YAaNT5ig4+24YzLjM7F99Skz6BehJbK9p9+pwIR99cWuk63iYOQMKcp60l8ZZUy0MZaltz2Zi4P4twHDaLpo7M0hcRJlXKZRyp63OxWvIMjPCIy8V1fTyX/i1Bo0pxstkHX8Zihuolh6/x1fnJWnu56CFs5GKI+I3v+xs1YVotXLfxNzPo86pCsf5iGzmFKO0w6yg5JYaFr0J5Ky4BLAwB/bWke48exwVFev9TdFoNh2DVun92eGXI42Nbm9b6oTkS286rNRuCAHA6ThVJiv3GOnxPEY1464XwannU4DW35VMe2yEeGZcJz+IMb4qkiGtSTKSxjwAN/xl7xnLJtUIP3yZmOBzifGcbNm+v7DBwytNqkjfJb81QJ6FescENMuCGOaDqKUhCNSrPYdMlJKloMxYSOU6U9BLs= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6QnDiCEmQ4h1ntK0bqaF+2OUaYebYRCDllzDO/+GSYWSfqtz5vEi+Caa9lhp?= =?us-ascii?Q?bBVfdnkvLqWHx08AM/2UnU7Ta8E1Yp6hIFrlKKi78xsNnonNxFMS5zznI5ZV?= =?us-ascii?Q?PX6swPjIw+jPaJTVpBKIu+x4NkOFpXRjkCebccHZ+aWoSLjdF++VP2vBtBWo?= =?us-ascii?Q?auTb/h4qpjYcpld3PvLL0/VyWDJwzh25CTgcM8Sgzhy291nzIRpKN027XyRs?= =?us-ascii?Q?uMOmpVuEvKGFQ0tt+rDk77TZU4887nNoYHtoQziFn/q5txwXXwuDb6i2tONR?= =?us-ascii?Q?BvvvaEsCpXd5xwIqJ0uAYS2aFlHmxv7AULWpF5ZSwsui4kNLUlToS8SLK09z?= =?us-ascii?Q?ljQGe6Y+JwZIc7pLyOYF6mhowLFllw3N0M2NOz6Cvyz+hgnGgYJVY2sRtdFv?= =?us-ascii?Q?4foOemi12/3YRwJPg6//jAf9JzeA7d8jqz8CJ4mtW1rox5n0rDJ2ClsJZbLt?= =?us-ascii?Q?inx9AVEXh4snW+VlvAOzG+6Ttzh1NDGD+P+iBMPufxac9/yozaG2hFxQ9AMi?= =?us-ascii?Q?X3eR2naiCYtwG9pnBblqUd5Nd2ULXr0KVPA8g7MUVgq8/uDpxza6pz1CJ+a2?= =?us-ascii?Q?GZ7oAGM3bIWxT/1tsZIu1YMFn1yMqnOs2aGo9NbngaUISH+LeOoreDQjt6FR?= =?us-ascii?Q?jh3RWzy7n7Gm3c75fJoZ4RqzwZawLUxIzpCP8w+hf6ODikH4u1+EA16OmnQL?= =?us-ascii?Q?9/zQkb6Or1feUSLFB8hall/53XMTRMTyOKJwJany88+w3cH1LKKVgY4nHRdN?= =?us-ascii?Q?jMOAgN9MGJlC4UJvMwaBSaapx8pWdPEaa/CNjgWRrUi+QStjYJsD0siOJq+a?= =?us-ascii?Q?XnWq07mvkQeVIJC6VUHxBOAtEkZbA2ntJUuE2HrkWn8wWUHTL0eWYFdZ05e5?= =?us-ascii?Q?8i2Xn4WCBpYdRAno07FtSwTLhYY/ehajtOlLhHAGMmhfFTgI0YukmWwozW3m?= =?us-ascii?Q?m0PBRhZp4HngRP5KbiJbcydpiU8UoDxyylIKNISgZHt+tDdniXvuzSGaSxV9?= =?us-ascii?Q?M5l2YPgcEJmaGe4WFW+Zjm8vmn62zlrP6JNez/r69cR1s5lxO6OH336FFoQL?= =?us-ascii?Q?I9v7idUufhz03feFYq7Wzp92Q6xrZKPfgcZAga5iUcg5q6w0L4lIZcppWVVi?= =?us-ascii?Q?cYZ9eo/wAeYBRQ6FtG+zxO26gP/Q5NCBIpfX8r41VfKnCnkjoKvy1tV0JGQL?= =?us-ascii?Q?saI8V/UCvlqqld8BKN7njoVs1AQls7ywTLWSaEREuIsr+D8S9CmJGrAhqVe8?= =?us-ascii?Q?Gx9ajKkSwco+y3mYa3zWBYa8JC2eEAOE+eR3aTmTLhdIu4qerOHIb8ZmQxJI?= =?us-ascii?Q?bYR69d0deVhdqQk1B6RU4uAWaTtmcxFkghEziHhROi+lrPe+OCO9tOdgg29S?= =?us-ascii?Q?fAas+B7/58Izv7lVpKd469ScXr08Fg9y8KetO4UUxu9Qz0066PEOQ+ejyGf6?= =?us-ascii?Q?UOVanMgL72tbckC05oGs7hmUOFzzS6WHsQZG4nJmbdOWT+YAE0cZ40B8zaoX?= =?us-ascii?Q?DTTfIEUtjTP/I+YKpkyt7zVgmhJ1JmM0Qw6f5EIWlW1G4Y3gQPh5wsgo6W58?= =?us-ascii?Q?ejEzGSMPto7veGOIQt7fNml7HNFaJZFHzQE547YVzKZ9X7IuBqcGfvAGpTUi?= =?us-ascii?Q?Xio5VVwLi1VVzuiPa20YlEtG+xke6AJYALBJyf7/D+6MMjUC9lQHdGsfVM6F?= =?us-ascii?Q?jkBgcdDP/4pQ3uBEL7pldj62KuX8fbzXQvaJCutTnb6tBXJKNDc1dCPdNXI7?= =?us-ascii?Q?v0zRB5kkwQ=3D=3D?= X-Exchange-RoutingPolicyChecked: MBm/BoO5XyGbeddFsEm19m/54RTFyRqLs3QprRHHWwTQT9MyQJVqgf6v+6r6p3n1hfoPSi1W60Uw2rq7manzr1lv0r/j3foNDV6l3hNkECENUfxFByHEh39QLDZkAysYQy4MjSKyH60tBKO6E/DYLWstjHvUg29YhYJ57TutQREjKw5WkyGuLqnw1rJpgXkMb5sWFDh6PzErWY/HRNuGTBqm6pvKnfr9XXKZQJxe12ABVGNwrhqEdbkBvlDt3/MoXqiKW/mn42ois5obPJ6JaGimmLNCmefDgyGvhf4u6m/espe5or79cItfLmSaW0vRscG63GoHqjjaOWpAnoTjPw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ndI/kI2MB/HfHRvayCs17e+nBhJEC5uOR26swJIHneOv3ucd2ZwsXonIQFzP0bGtsrjx08XWTcoKJX9wDpq4sQPW1H4qRKNEk6YzdW1klZj7ezs8FB9c+FCrI9+7pL9/Gi3wRGu73OEK5hlrCUMqcjZndtBZPs9joV+BUGS2VZ1SWpNtbh86lk3wsOQ73t4cU3Zjn9yHfTHjTPN4wz+OIdfhwIEGlk6fhovQpZgQHsFWp08W5sf/awYqlM3Ux3JN2kQMS+AfGMXhvjXa8SjxMkPIa4IqmVtqsC3qB6Q6F3+Nva/UP7BgdIb/fq8fVDHYUDoKWeXksiBiL8CG5uKR3Ku6UPvIls4DmWcKiUYkYKzVJGH+IYYccdGEHbTKINWJD62t0PQKRFldI9pJZ9tlF/5gvCa68KTjMJB2UaV9544h/+haEx3BDl48sZmMHUGhKp4eRn194D5B7VJV82BwFq5nYJriXZUINk365FZNBmoxu2/741vpDUT0qRRpLJUO80XpPHg13vNv9sd9AssIdW8UvgtQ9n9MeMrxDGuDAjgDuiZLzVHZfPWl4QlfDUvbNGDCGkuWWUVuV/VH9Ml5VVS4klw1dm/jr9zdr2QHaxc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: acfe45bb-34c8-418e-996c-08df0ccdef49 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:13.4203 (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: Yvq5ra92D6f3JWrJoixJWhYRU/I1XEJbga4eHkrGx/a2HIpUQvL1SiW9WQgR+x8d0+y/tBoHlBG3i2qs319/ww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: L45k0U5TobFcfBf97aV4tuHE9QtYKskh X-Proofpoint-ORIG-GUID: L45k0U5TobFcfBf97aV4tuHE9QtYKskh X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX+iG0NECKPw3R w3Nl8u9bazXh7VANv99jTR4fLZqHsfhf1Gr0jaC1DjW6AmwjyTaOnb6uEzOwV+kyRvPHEGsGlbA Sw+hqw/a1RyI2Sm5vAA49KyTb5QOho73AtKEpRC/Cbdz1Z4WoLKz1nKgiGzxuuiHe1AdCiePw9p v9ZlE0ixa0ummR+G5M9TTd7iXXC3HVwMZSfsY9V5jKI2D5NAeKvDLMfGrTph8MpoGlYP87FEb9U 7CaCh7oN1vnnSnvtymN2880sMxzpF2wwtsnWPWqzaUjvTGxDkgev0/SVjznVp2gjM0WwL0IJE7G aZvH1cli2QjFmmMwX8a8ZTAB94iWvOVdjWBFcEDBhAhK35PrEsckaO70TuKeeWbTfbl2sv4l+Zs CphlOwifMdgVbeZFd8tynCqfAgGrmmBTk2DuRX5klsaou6VNAlcHECp1jktgvyKA1vJyS7pBCOT 5bMn6IbiNCC4KQhDrhQ== X-Authority-Analysis: v=2.4 cv=S4HpBosP c=1 sm=1 tr=0 ts=6a9e972a 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=DHJJM_rHgSnfI6yttmIA:9 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX0rkr+oc20nMl WafM2AXnFXbOGPpEP/YX18RtUKAkyTDNItNVz3D4ba9t2FunKOZTN/iDMfCgIOHgp41rA6Y8lww iiHUAd8D6rWlF/2CGarO6GnuDILAcpWBRrMD2yoVh91IgnVRVARW Content-Type: text/plain; charset="utf-8" From: John Garry 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 12200664ed676..4055b86c83a03 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -306,7 +306,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 (READ_ONCE(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 (READ_ONCE(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 READ_ONCE(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 Sep 25 23:50:57 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 7D9F246C854; Mon, 7 Sep 2026 10:52: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=1788778341; cv=fail; b=WAqMOqYwhL+kYDEIbE8wPLw/EQ/YKO4c8+FVGSmo9QgZ1xnKp5YZY3WE7wkdktszfC3KqnU84qGkU8W7hUsznptEP9k6uZ6QNPRtnplo4TkSofyw0O+/UMRIFbMqQo2Rv07V3Uqds27ShfUlxHg+FxL6JseX/XUJTZ0+5nuXod8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778341; c=relaxed/simple; bh=xnJzHKGg1a3/UPptc7giCrc3td51YdUZ/awXPrfcyxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Gdskyh6/ZZ70JRyWuWUFm1mSQa2OLEAgexc1S4qo0wNAkI8xhMWJqr/tQOAChK90gwvYZ+NjxN4+4xmmg/3stKuOuy1Vm5Sl6adqOG78N5zlFvtiYa7Z4Zu3PFNE/vZC5qVvtp00by0wTuE9VEhl5tg8zz9G6wwySH0+quWOd8o= 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=HsRmPaDP; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=qNcN3bC9; 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="HsRmPaDP"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="qNcN3bC9" 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 686N2xZr058527; Mon, 7 Sep 2026 10:51:23 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=hrLhLip921MlwAwYuG8xs1XDMN6IDNDhXfmFkF9+3FI=; b= HsRmPaDPcz2gtEYmwTO6jYbCZuyE/xtNAeKwJoxXiArKcTyLmvihvXvlj015ANam IfECUcgyWpsUa69K9olZjvir60e4p54eoArmoskDAT5W11tJazZa/RZZf7yv9eV4 Odfn4GFE72hA9w+b0SkqBAumztDdjwxUBwxQdjbwchE6sxZcAiCaphrqXohICwGq Hj0G+3lx4RmmhQcs7acIXCGBWY2Q8D7iPKF+K/wScvrMA5JnPCI59ArFAmBklCZ8 Py3CB1S/ZvPeFHxpfjIiJHnLL75c/OWM1fCv7gbw3+Io+Yl8Gjcgpwfy14AAwUbl uivoYaV+HeoI1yERwIdbuQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessgd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:23 +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 687AopfN019106; Mon, 7 Sep 2026 10:51:22 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-16 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:22 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=q/lM7QgcSE07cnURJZXWiK/yJkV04cM5oCWJthyrrLDwvZ+NJKC6MsLPJBG3RO1ibglFtIf4uzxlvKDl7oFTLN7AJEru7OiJw3LHYZ0OYhQEJVUZqObuhWAZXsCJuM6xk9zsz4LyDV6OFiKIud2KTgwr8KDssEwnK2b9kLCWcJJX/wY4OXQ5iTQmBlXIe2T7KBBTykJY/JJpn9k1AogvrRKznkTO7S4ulNjTT7tNTEOF6UQCy0ahU00LDMmPYlImvQvRkRIBqw3S+xjlo/c/c/WGgqOL/xHw25vAeGqKanq5Cnq0O/73PiSGpBbgzlCwKLotr/lj9GqNEzpaZH8/rQ== 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=hrLhLip921MlwAwYuG8xs1XDMN6IDNDhXfmFkF9+3FI=; b=QjmeiaQ1dFQwQZTSR4xYDjZcOmQXMoDJjeEvLjalBMMxgnw1wejDEBmpglkXqsSO/a8g18oGeDJ9QwH+AdiMxmlppGFoKqYkYheuiSbP3iP7M9XpcCdz6vBUM8sLx/Xud0wEC7OkgwlPEja/B1Hr8Pwt6ILfwzNTF1tgy4bhnrE6Urpfy7z4fDalBwRZX8wc0jaFuvlCoVaS6ctButUDYwDQ+LZxRpe2d3wcKHYJUo+D0IOqp5lDFt4tuCMyCowDw9PZtvVCVmItycKo+Y9qidvLaZ/5aq3D9CzsHcKXwJ8aTuCkCdJjrdcqtVuPdzvQR4H9NSnUM6U851l55QvTug== 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=hrLhLip921MlwAwYuG8xs1XDMN6IDNDhXfmFkF9+3FI=; b=qNcN3bC9Hx6l0MFBSDlEQBMEUZCO3dqINHsZjX3RZQLJYeuNfByBvXisdi2wmu5W66mbVOOreaWj1f7W0rm0V5ysldw3Wj9/teJwfYGgVfZKPHCHTBPwYclwCoY39IPk1g5LFK1mlmH7/2NlV7EB19LwZDkx2sImb3xO3bPM3SQ= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51:15 +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.0406.005; Mon, 7 Sep 2026 10:51:15 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 20/27] scsi-multipath: add scsi_mpath_{start,end}_request() Date: Mon, 7 Sep 2026 10:50:14 +0000 Message-ID: <20260907105021.1763236-21-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P222CA0015.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:2d7::19) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 436410d1-2998-4b2c-058e-08df0ccdf078 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003|10063799003; X-Microsoft-Antispam-Message-Info: ZuYuHuW3tG6lNPVGPO45dz5ZDH5kenPTGCmqXgCskbuLOUC/VFN8ePBfHg/1mt6k4OnyGkMczGWvrpA0ZQsT1BDP8PcfiXlwcL6pfseKhIlIjGLKpsB5o/C2sn6qTa3btkHvE+VSRu5Updc9olz+drX4QumvTxmONHoKQd5VDnThIy5is4x+CqlcM+kP2c5lEmFbKRhxBz0MLnHmytHBpcKulp/2aTPJswNQq+a/eEqC4s74tv9V+3qE8wPczPlMKMdlwKqfz/oj/5piZZKCTCE4Aeu4A6mul63yWP3D7yLt0+67gs/QyQBCBlf79VdIYIVtLmhU6qQKZQtXUSkTx+rNXaRf/DsUrkQAYXS26WHWeyp3kwoFvewk3tGUxUkKIzWUPy8ZiYNAEIm4P/rLbuN5J+Gums+KMG1IcDK637bgIxUk07kyTIaeG2D1xYGzS7Ruv/8mnvfNJA9GPgbseD0zR9jXqALgJApL65jEMg4NsrRpu4zvUFe9mRQmxTKcxT1pI/V45aGr0HKidYF4Pt1MrD5/c6xKptVIleM35+WVvNnLblRlZOieMJ8dspjk5QT47pbTUuYLfzQFBrXhd4o5MF/dOvqqaYNOA+2ZZCMMoVgNEEROsH+Ipo+aEygxDbgD5sEBx4l5Vaz7TWrCbpUv1Vn+YsKbm5JjteqDpVc= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003)(10063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aib9DDRU46ioKuxL01y7fNVVFmd2WyrRBnn5StlPYmstDFPyibqilcve8GR/?= =?us-ascii?Q?fjYBNhaCnu1zIFhpsjZ/eS5Hf8nLUBNDLvpVv4BMPzVUvVFM0pcBfOXTAZ+Y?= =?us-ascii?Q?sbMVyb9ID5N9iY3E7k6ydQbcj7jWdXv1vRBNFSI+1jYhWnQTit16pnwhr2a/?= =?us-ascii?Q?ouiXJ9rEJ1veh1SutRIePfskabeNduomGAx3nrXQNxUcgo/P14A+ZT/EVJff?= =?us-ascii?Q?M7Z6ciUieXMl/r9bgtak47wtfhqPitKXSjXM5EIX37LUHkWCEJ7IYTzXmh2n?= =?us-ascii?Q?be0NfFWpsH6V/gMH0ZMD7vOOu/j09bgsgxZDFZ+NtrrcLwnwIZCFBajrZ/5S?= =?us-ascii?Q?WIhAaRjjoo9zMn7qwjL4RpWl4SF/T2OLlaaRXQwulu0FsdHrpOj5iv0cqbzS?= =?us-ascii?Q?Ed70w5qwJPt4L0mGHRxh6fC+kMsENalq7srw4Gx49+sgXT2c70I4OKbzjvsI?= =?us-ascii?Q?ez8HiYpWhSpFsvHbRFpXFpbTr0zSIT0xsXuiZKaCb6a+5EWkQZpbRixMnJ6V?= =?us-ascii?Q?nJgEBmjiaO0w/YZ1z+JzW+GGaeVF099JPgETi0p/CRyE1PjR2CvDOThs44bj?= =?us-ascii?Q?x4PPTWCQesvJgvaIHJgtmtjbVEG+rVOALV3bF2plAezkvvrbrTGNIWjcUGnk?= =?us-ascii?Q?YSaGzKoFMoNBUkvPi2d4S6H1iZhNPchLaEpVpQuq/o5WGlzp4htQyTCgRsMI?= =?us-ascii?Q?CCaapwf4F0Jdb4TfJ80Hgf9Eqnc6ZDjV5PHav2efIkor/Qr6r4Wf4a5cBQKT?= =?us-ascii?Q?T6VaKxx76TBr0zUC262Ny0tzFGJh07Wq9x+cj/gk8kpA/4CgzvXo+SMMlFNh?= =?us-ascii?Q?BvqDhOse24e4FpzLj2lcYSke53y9/16ckzDbj1HOrLqormlUwGt56jUMf2V7?= =?us-ascii?Q?2dN4ewTsn5qxJNyvFVw5iCJjoBMMIMEwfyTkuGnsiTQuLhq8veBIilI5ZI1y?= =?us-ascii?Q?wGxASx94KplQWsijPMtMT1kuuoLyo+Zm5LmPqm0DoY2xP/ZbGTHh923Z8MmV?= =?us-ascii?Q?T60yR9LKO7Q+IKdlDVv23jEvyyut4aQA2AFMN0SrA7/DdlzmSjutpHfbkBu6?= =?us-ascii?Q?ZjyTDVjH0YXH3yJd4I00XbV5PPSoQX4fn8FoM0vu5vzrKGAHka1MjY2AsoK9?= =?us-ascii?Q?uOXIvNHbPe/fULAFEZgJWw/J4pC/nM8Mj87rou8+1vOcPm0Vzz8vnewvXUtm?= =?us-ascii?Q?VwvE4a+AZfYl3gnLVeZFcNFpjbWx8CLDM+KEgRFFd4p+CBhHE1hGW6Vwcdw7?= =?us-ascii?Q?2SN1Al17NfUKcLTICDZdOpYgLPfYAfabVc8xkHbjP93PUQUXOkFRJ7/3XC5A?= =?us-ascii?Q?CNQGCtzVCJixMdgGT+NzQVG1bfQBTDRSre5I1u6pvbDmA2+Ycs5Y8bxoMGrD?= =?us-ascii?Q?wP0R4rDi5A/od0cUZBywtaQgTdssBbI+pOhIVI2tCccEQxG6hzhQq7tQJJ2K?= =?us-ascii?Q?CaO+dEaifBMgW36vF9LH16to9BHkoJ7L5cYQk1g0F/fNofAD8E/FlKtFmuWx?= =?us-ascii?Q?euoLTKCugbC4F8RwCFj/clatZbiQmydpiqliawO+KT8hnnJl5oOYG9arLqGC?= =?us-ascii?Q?wPZkR9wZPE9+TWOi8kuDrQN8GeFtZRAQ838nYRMPIkVwXmUijflHwAhD19Gd?= =?us-ascii?Q?scQBfeLL3lF9t0wX5bScfXrtRgrkR8+v2LBMD0C9tB1Uusw04ztR2TL8yCk4?= =?us-ascii?Q?Gu7dJQvYOqugedTFCWmJLkEsAUwuGgHQt4NUVF35Qk37GP4gpZM97fgaZbAR?= =?us-ascii?Q?zimvVAexNA=3D=3D?= X-Exchange-RoutingPolicyChecked: pSgagBQjupUgZ61ED3CfcsDebbI4/CUByeRkZ7nFTWSNO0ASIzBQDpsuAijTxLBVpC2WcR6UhQXVNEm8NjQFiYGRpcMLMWjCCKM7iFxlrRKmgdpZa1TAOEKABnnL2ZgveuLlJRbLg4Ws9cH+Cjf94mHuvImeJLeGIOPM2uBQA6Nbp7nckOXZJ/NVo2eBiwRMa5ThpGr4O4x4VasQVe1OFlIvkkNuFEd1fdVvVq1qIIEwXEDVKkRydbfRiu2cm7uxR+gccZS80oXPvEa9gmwXp1MmCSvdqc48mkksJjuy+W3p/dbd15xNZYfg0jhlZNNyza/id4PKzrqz/dIR1gAj3g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bnv28VloBNbDfi99gsny2W9zrQbWJbccZr0Ang3Jrat1Ur3hjLchoR6G2k+k6mQoXWk4vi3IDo8LXlpQGxIHA1wp97lhwYtD93cjQK0MSMBW5PO2C5MUgIAENDZMKknVmTjXQvjqzc15SpYNi9qYW20IB13WgI6oxDvJp5qKqWd/a92FCYQuqgtcrf1N20S+C9PIp3THGfWRuyiTIGfUFzbUPFzPVpkCps4xCFEJrLwq9ckyf3sbSxrsyW7prPkrn0E+oruwyB7QGQQZu8se913Vk0ou56/w6A9KMzBdk74MhbQnR1ZwCaRU7jc+yl+Iit0MZmrW8Ppdot5inPom9Z+anFj1IW3UN8gElSQakpABngP9l3bKYOH+SpfPdtQGTOtN7o0bYa9d9Px8NqsGY6qcixp0fOn772k0oOu73BHCYzTtC4Iild3N32+y7bqPf5XhLtU6HwYRySpJvPy21HOqtFuWofmh3tv13OyE3UdEy2k+kxJLux2hjrN+GMUUhkljT73ywcbZnLjgt7+fdaXGM1wSjZLpwZ8uN8EzkQXHTiJr/VxEyyChj1qRNX7rlQ7MX0nxg5v0NCqjkNdAOYWupW7W/qdAzqwhxN0YVc4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 436410d1-2998-4b2c-058e-08df0ccdf078 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:15.4318 (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: 8CeG78rdJOge5SHBUDnUKkHswdCRz79+/Nfh2z9x+2aPY0GeeuGGsAGpMQVi/RwfXKS9JFgCSrjERX6BiT5GXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: xwloqidu9DsEI1qgAvP9aO-daqSCUTLO X-Proofpoint-ORIG-GUID: xwloqidu9DsEI1qgAvP9aO-daqSCUTLO X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e972b 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=e6BYPIScm8OiYhIHgSgA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX37DhvojA+ERv zynoa154SVF1Av6dpBL8OvFcbXJwGorlh99lrVbdgGWF1ALVIcCMGuRHB4plc98+VUrIeMfqxyc k+AT+5K0232MzeODpCy64PEPOrXV7bdmEiFWRJ2yIhzDnFEuzg5aD/H6rglXeSmdFiX7vDbb9NF 6tkbjq1aUFaxssyKp1gaDMGG5RID6HQcTilwX0XP1OHb1dQ8597i4SqOA4uZI9tUs5tjPueiFvU e4e9K5coieK46vmuZcu9TvkioB+6TjfrorJywwqKIchoeKqlzfZVWptz0OwG7la7I8FTzGofYws oOW/WcK9VhxYBXipqXaqy4Ph4Fb9d07tQ3JXkTxznuyM4i2WgEUVN8eLYj7Aqg9LRVyAdFo8636 rklkFX+oq4WUW4DDcdFNulSvNptviHB6qOUVSP8QF7XBXoSbI0ipzm2K07XEr9buU7ls+UicrBu RoX/PFhEoXdmwTfT3/A== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX4LbQwmt4YdJe wZlD0vuSdGoJI/mGmzEt1SrkmWMNn7SjRFS+FUtUiue9ije+VPrtiyC+k2qceN2DPbQTYotw+Oc HQdXkN0/TB5xrZrnGHAZwd5VmagJsD543HE7bkXtZfEtgvYymCvg 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 | 69 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_cmnd.h | 9 ++++- include/scsi/scsi_host.h | 4 ++ include/scsi/scsi_multipath.h | 11 ++++++ 5 files changed, 99 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 1a6f5e1fd80cb..193e7e9a2d30b 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 (sdev->scsi_mpath_dev && 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) @@ -1918,6 +1921,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 (sdev->scsi_mpath_dev && 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 4055b86c83a03..5faa06b5e8770 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -553,6 +553,75 @@ 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, *master; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct gendisk *disk =3D mpath_head->disk; + + 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_rq_is_passthrough(req) || !blk_queue_io_stat(disk->queue)) + return; + + if (!clone) { + scmd->flags &=3D ~SCMD_MPATH_IO_STATS; + return; + } + + if (scmd->flags & SCMD_MPATH_IO_STATS) + return; + + master =3D clone->bi_private; + + 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 block_device *bi_bdev =3D NULL; + + if (scmd->flags & SCMD_MPATH_IO_STATS) { + struct bio *clone =3D req->bio, *master =3D clone->bi_private; + + bi_bdev =3D master->bi_bdev; + } + + 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(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..52227e2cd9749 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h @@ -58,8 +58,11 @@ struct scsi_pointer { */ #define SCMD_FORCE_EH_SUCCESS (1 << 3) #define SCMD_FAIL_IF_RECOVERING (1 << 4) +#define SCMD_MPATH_IO_STATS (1 << 5) +#define SCMD_MPATH_CNT_ACTIVE (1 << 6) /* flags preserved across unprep / reprep */ -#define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING) +#define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING |= \ + SCMD_MPATH_IO_STATS | SCMD_MPATH_CNT_ACTIVE) =20 /* for scmd->state */ #define SCMD_STATE_COMPLETE 0 @@ -139,6 +142,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 daaf1247673ff..8cbca6b75732f 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -756,6 +756,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 6e50da94fc5dd..dca1307c9fa46 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -57,6 +57,9 @@ void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); 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 { @@ -109,5 +112,13 @@ 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; +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Fri Sep 25 23:50:57 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 331B8471255; Mon, 7 Sep 2026 10:53:05 +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=1788778387; cv=fail; b=LhH1hao0UqzOEoGPfh5QyBoNgDWHzKHwSPiSMXnIjm/aJU+Woyp5zymbrgp7xd/uthW+u0bdSc6PSaRLx0FyiFu/2/7ObdtIsUTxW0EKC50iWI/sgrhZ6hb+ncPh/WeOv8zjDv+09ZTlCvlwFx/7oJk+x9j/f6xu5RZcDpfjSyg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778387; c=relaxed/simple; bh=V8hOXtdjR7KIFxYD1BT+7+DOpvJH6BtkzdHlul8QcFA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=RanYPgH6hgNUOJd/dqNIqisLetDlxUe2Gi97O/XZf2j5AkwY6klh9ucSGdgzFJQM7XHdpN7GbNuZLDeWvGsXScRxJMSK/rdZTGUnxX4pWm3dg/CJPCO6hOGeZIvoQ1fuOcPtOHwDlb7Tf7VLVNdeaTmKyQUFsbkkBbfsOAvpmFg= 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=HGOISEEb; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=reQYP39F; 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="HGOISEEb"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="reQYP39F" 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 6870K7h8264221; Mon, 7 Sep 2026 10:51:24 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=OqSnADuxnPAqC8+Msp61yJyBNGZPnK1oCGlcQK/MApM=; b= HGOISEEbkUdpxU5VzK7sgsHIIchjzS3GjDBN2hktOqSXeXCuUTT666EzEQ9e023q DaYeDYSnqKQQrgKZLWfa8owefwC7fKtF6V9JEztDlZmxrnMfGGaaBj6yTE/1fC9T CZMXm7fdj7lCIEzLSadNb1W9pDAsrTjHUz7FOQq4Oq2r4KJqalg8DrifvcFhMt+F ejTFD0zLO5REKxTOZiqywbHgA49aVCODnhK/ytrmNVOxTy8BEUN/oguJi623hGkh LqMen7KEnadBMXtmoTDeFvglEkV/mrPshjGu31EZRlID01pPn1R5n6vvcLKGvezW ZJ3UUuds7FVNInsAvIAYRw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbg1sshd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:24 +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 687AopfP019106; Mon, 7 Sep 2026 10:51:23 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-17 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:22 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GP1nc/6HDkPNC8ZSJGnAAWjbglZUXT9AYIuWIPp1PkUo+/SyKvBIZ/LWcIIYuh/e/rupmCBR5hBBCkrAiZrSvcQcgYd0EYrc/ubVSiOG8wfbXhRzeiBGYfMBy/SPgc0VdAS1XkioAYTameaorR/pIQ/CzdJdbu+9FqSJb0wGq4ND6U0gzAhsa5PoeSKwAaPOCdqSAPuaB8MeEz7FTsjqAkDPCCLkpbWVl9J5B9BcVdDgqx9XQSJVkYwi71+QFA1/WFclrCs7O6F0+GEqXvGF7lGSBFIbHmSC2DG+9v8dbOAHh1V9iwHAaIkxDgsYhmBgZBVQT/epfEe0soHRTOy9Bw== 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=OqSnADuxnPAqC8+Msp61yJyBNGZPnK1oCGlcQK/MApM=; b=DeBBz948LvdvvEceKL0keEb2PjX/p2gica9HGeE0WKuNTd34uBCMOOeJxBYevWZpY8MFgw/bRSkEZlZqADfbj1D3RN6o5SA4RKpwZK0N0+/famO0z7cXco7LBe6r4gx3a8uYWHGXzm+tBzh8TLqymz+Avtww4bSt+hVxB2W4692TvtMs2YwvUnCUEHasAYS7pukrDIlqdlAA+33uhq4PfvKcSq+2e/3oBIIcELlyLBRkdE45gg7lHslovjn2Vh+uQjtDU9axfQ9BvRJl7E90NtRapcWXBBqeImIodZ4zsb2NasUocxFFAiDbFex3VGinJpYngevSUKKzldJTU+XK0g== 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=OqSnADuxnPAqC8+Msp61yJyBNGZPnK1oCGlcQK/MApM=; b=reQYP39FhnUY4YykiscjxsIBcYabBoc9fULUniCa/zn7mHH8lFWEvhdJqoVOvzW2lTQa197sWFlCyvUqq5uxSU1UIql7IMyrfSStfPDK47zgB6c9+wABNNQ69vOuW9Gc4CtB+5HIltAykL9xG3axiNDUs53uH7VImj8dhOXaTvY= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51:17 +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.0406.005; Mon, 7 Sep 2026 10:51:17 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 21/27] scsi-multipath: add delayed disk removal support Date: Mon, 7 Sep 2026 10:50:15 +0000 Message-ID: <20260907105021.1763236-22-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P222CA0004.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:2d7::34) 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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 937c75f8-2fa4-4cb8-1f8a-08df0ccdf1c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: EbLeZzLTougIf11qSCbBcQNYTOY5yzJUpmuW2A1DtLZ/dx0Bmlxhz9uT9acOpBtQWfVsIkjrmq0ddTT1M0sGsVaPcHJXJTykf7IUfAn07dgGbXwkHC/YJBTcSBpMNqysLxrdWnsP76VXvzD7MiDePI9quWP5QfrK5IE5fIrZUVeTmloviIdYpmcNKbQ/0pzVQ5+SkOpELi6p3LKfKfRmVkiyLA5UDCHeKMWQV3rBFxIU83sU4D2JoS4GRUkG5LGoaaJUzN8rb8SKrPfCLCJrINgggIH5dtfOcvrFhzl1b0yon0+beuSkY2XsCLLls4Rf3I59umvz/nxesA9H5kRS5bDg08FceT0yY7wGN6QSXEJC0acdSe0UoagGMbklGyOShWVEvecTYjzucPxl4nziJQVnr+T7b+2RIJ2PFC8MRnva20qti2DDLanPLM5qgMrncK4Akc0el5RNyGaCy0Kze8BFDoy2Goj82ayotj6RfTS552eN3lzjM5iuii0zQXisvORlpDwxcv5g9B6wGTMqP4eJ5il7J7cQV7c8KDj0whoyyMvI3MpXA4W+1sl/WLHq3csJhtYgJ6Tae2iuq1kV1yusPp6DOyHrXagx7Jz//NxD2p4dqSgdLj4v/XwGZGBQ4Wu1nmDzhcy1bWoEuGoh1bhuKbTMNj0zALDy6vuo4cs= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cYOx9ETN7rE6i6rKyp6B2bnKRrQe2b7BY2eG2Ilbk832CfNFbjFj2DW/R3GD?= =?us-ascii?Q?5B2T1k8eaF2k3jVacUIz3bh3tgRc3qEUUbbD215ffZSD9qCo7MROCaJMERRz?= =?us-ascii?Q?SikswxpWRrHtppBkZfLF87YX5XZtznSfvlvv2FhC2U+lSl1gU9QljvTDHhIF?= =?us-ascii?Q?FGZzDgszMOLedAcB5JGxbd7EpV6PtTRaXHkZpzY1WIWP3pDCAWxGUWRGgpQV?= =?us-ascii?Q?1Gi9u2Cf/fXYIi2P5t9p/f3PAeH3QD3gqMJNac8vAKaQVnbR8O/2LG9qXlT6?= =?us-ascii?Q?xKJQBhbL4ieb76Xoe0JfONEMoO4DTOl/SplYSaJ6NE6zWehJPqblKRyOQaQ9?= =?us-ascii?Q?C6SaLt5idhCjF40q8hvGSgktFEpYq2hxEza0KkoeVttPCydceUf3o/UG2+HO?= =?us-ascii?Q?SThaO7jVtF2QozVh3QqMar3Kn4lUa4ewNuilqbu4ve4oNAn8DUd8wYrFUKQE?= =?us-ascii?Q?5scAbzZ8y2NKx5vrtkp5FDflhVxo9ATQwOmruhHcDtuQaN5UzPDzeH2Kv7Do?= =?us-ascii?Q?Ym2RhEOW6jKKU/p2Yt1Cak0EiuVuo8F9biTnEfBl06QAmIXQPBZED87+pWxq?= =?us-ascii?Q?C604FTjmiknVq5edbsHABvtcBskj7kVeudWlS0SnF/ewdp7CNYh7nxGMQkHL?= =?us-ascii?Q?pc72n3bBaRzxLGsgps+Vni80IC9k8tdkC9jExipFKFt0RlVDQHePak77QTtw?= =?us-ascii?Q?nfnyoT7+e9Fu3iXCwBOh7Kqlwolvs+bkE3UMnc2/BEYf3Mnnk1JGN4TbILqC?= =?us-ascii?Q?mXIQ4LClqjGGdiXg9fLE2pphNd8wm21zpmkUsIz+J6KQEP1agwPe5QOnrEIi?= =?us-ascii?Q?mCJQDMlhSKsahWN2Nh5Jdb02vIT8539W7hKAoQaa8afa7ANvjBhn1KOFsLkP?= =?us-ascii?Q?MNQIwjOPgw9LxCnBRx7vsDduNLy5oobKr810DzBTcHn2ReSNj2Km1tmDA44d?= =?us-ascii?Q?i9cPrWGpeWM+CYD78gGObCe0akgCsxEFXMkqENk0I6KaykZEjme4sWeqOMmF?= =?us-ascii?Q?I8xEGZfSlJ1GMfu3ixaH+ceflGrCO+K/SClq34X9eevJ7tkZYqxPKIkzapcG?= =?us-ascii?Q?shCAgKMvXNIl7zo7ZSXNHXKueUG7Ws8FRdata9170HYNTjeCh8bB6W5XY7gV?= =?us-ascii?Q?uDAYN+OuzH6Urtkc6CcQes23/+F3gkMRrNJ8dx+wOyoIHwiKsbeD7Ek+G6Gy?= =?us-ascii?Q?r1EJmBy9qmJDXGvysuP4wbVDMl8Du241Gr5lmO1BzUfaQpoTyuw0Nnrvv/jh?= =?us-ascii?Q?aOQij1kX6FgqdooBX714d80Nv00XK0qctMCLupknWyMY8RDOWQO3sAdOtqwn?= =?us-ascii?Q?D4D1oJlr7GNzGNr4hq4/tNSYyadoc4UcwVb2Y/rTMHjcl2Msm+x6hjelyEAk?= =?us-ascii?Q?VDUDXs6+rKExeq1KhpIikxAwML3wkINKHugN01GxaW/Jo0nJQqHSJQY/+x2w?= =?us-ascii?Q?LvNblNv3rzaffCmpCanhbAoJ90JMEvFAIPhYWkl1jELaZvpHxVbQx76fA2eZ?= =?us-ascii?Q?jkdvf6Sc1RRvpPePcBpsbiq6AxGJ/zflxBp12SAS1jr4B4XvP//CqqAv20TH?= =?us-ascii?Q?JZG5ZYYako57HtsoJQO/GK3JQMOaTx+yJY/fxwP8mH8lYU5AHrhGybGFmfRS?= =?us-ascii?Q?eU1NsTJyXvnveuGbez/iNa6iRHox0mzG17EsJVICL0srha4JyraW9t4QVqrX?= =?us-ascii?Q?yDfSp+CtedkE5YLYzaDnjse4NHcGyddBwc1V1uEadrQq7gxoqZTfxabVmpYq?= =?us-ascii?Q?LV+Kl7N00w=3D=3D?= X-Exchange-RoutingPolicyChecked: zgfZLxU/escK5Kl4hwHL6cETzPRqv3l1lz0SxObIUkikFqzmGqBMGouhfoDm/A8L4u46cdmOyJF7gF1taMkUOU/RZ6PEhjVpsXknlsY6UpMuVVfM/OYkeA7aF++phYZ/Rzroh9d8DisVTG/CJl3O4dVrQpuXa2194GjNj6fjHpdHY/kJYrHKf5l7unnkuJcfcsdb6zvIdar/CUfkb8m+6tv3PU3DNJ5+1tbSQeZmkdu3aZ5/UFOk1orjTyH21IZ5/TYUCWUrv/qb5cmkLIPlyz035NkiYdPnzTcgBV3jyjgdSiZFK8l4F41fZ1ZHyeobGK8NZKFPUevlNogRh1eCBg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 2IHCRm6jt1Hv64KtUGOmyLiyjJZ9Rj8HW5HtX7zlaVW+FxwfCYKzBmUUTbcpFKDtm7js+8OklqlBAHCly1f2iGCk/ghIpAwL1d/rdzFtu8LdHgrY6YKmDSeAwS4drE7uaGUWRVGCDNYXs+f8j9NFKO6GzbJzhe3O5LoAXRFHfJ3eqYWQLjWkiHjMp23H8+NLcFVe3p60Ka7k63Iyq6a04jhALsYbj/gnkTVzv/ETO1MyCJuj/rxbKNqR5hg/Q73ZSKz02YN2sH2VJfOyf+ujLkVgJ0E2sCT15Y133qrjA+GthBv7P3Rbykz2o7KP5BBLdzlySP0rNBbKOUh5SS8RPI8+8DVD8CfaOVCuLV+D78a0/eSA0T81eXqi8TJ90y8JzbRaPB/IYQFNV2MQygu1pcTiV61bh/vrDiwswJfokOZZ5pKRtOac1p0dpKB+zZH+dpcDTOEtwk2yzmiNzqzX8c9wPTp7GWCpJKb/Iyaj/lZnCdg6zMz/eFt0ArO9x/2i/iQtyp8i1JePQWZTpZwXEWbnio3CDebt7NPXod8igOfSxSQdjwmkW1rLEPEJgCVz/Cu2hJb1xXVOZFKsUzwVcvGauOC0Z13425b+MZMs4n0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 937c75f8-2fa4-4cb8-1f8a-08df0ccdf1c0 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:17.5369 (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: F08HSq+jOatVukO+sFMrbQN1wfRWroa3evCkGpZNqsGJJJG4xlgvZdY7cAKP+KDZsw/9DGCFHKfptIFtH2BynA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=VpYTxe2n c=1 sm=1 tr=0 ts=6a9e972c 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=S0-NFRiyq58gb8qD-mcA:9 X-Proofpoint-ORIG-GUID: MBRJJgVfnUjYr29Fg-bI9lmHonLDeaZw X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX87awSHU436in gaG3em0FEY197uHJlxMKKmmjmNHluycCULuY2nmOIhAglj+vgj/L+4Pb82E/SrvaWjhiiLIdcry oudDy0popFYtrVbdp0g4OEyhGDP7KwvrVJigVjegzPiA0/CBaTfX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfXwLeXkdaV+cb5 SdC4Jkl26anpd3105xUAxFnoUVGhHrw0sEQx3hedbLRum9c7ceu6jcWCym08e/6lR8wVU0bmTcQ +ohmL2ekg3A5b9Ngzqwhbi7rxg2wsaTWUR95z+I4jVncRcyR6VR4U1idk6NaoN4rAEbu1106H6Q GDzneIUgRDt68fXMaC9MbxLh4NW2VkuftUe/PIcBsakLPU+FbxsW0o3oSkhRp7QIrG3pihynmdj ZU8GD7rVnJdqCcsq3cQl8kwVxZiLPKM4zP4aZCuRycHAjB2Z2BbXztSwklEu83xVB4AkEDWS8YU R2Y1wGZNOop/zms1kQ0YLKUziAqk2eky897haAoQ5EIIOwkH6tV2CLUHEpjd1brPVsX8Ko3g5NW XYFegWQsDgwyTvdcd7BT5QnVQ0ivPSmDfuDJvldazzfZhB5UiwfK74KpqY9yZbg64sM+4SpUUWY 0usiCl6o/3m7Mzjbycw== X-Proofpoint-GUID: MBRJJgVfnUjYr29Fg-bI9lmHonLDeaZw Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 27 +++++++++++++++++++++++++++ include/scsi/scsi_driver.h | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 5faa06b5e8770..e6b20f862c6a6 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -352,7 +352,34 @@ 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) +{ + struct scsi_mpath_head *scsi_mpath_head =3D to_scsi_mpath_head(mpath_head= ); + + /* + * scsi_mpath_remove_head_drv() could drop the final reference to + * scsi_mpath_head, meaning that we pass a free'd pointer further + * drivers - take a reference so that won't happen. + */ + scsi_mpath_get_head(scsi_mpath_head); + bus_for_each_drv(&scsi_bus_type, NULL, scsi_mpath_head, + scsi_mpath_remove_head_drv); + scsi_mpath_put_head(scsi_mpath_head); +} + 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 Sep 25 23:50:57 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 E381D46A60E; Mon, 7 Sep 2026 10:53:00 +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=1788778382; cv=fail; b=omI7gnRo8XJ5L+On9qCSCb/jZ3OEhB+iK2x+eOCeYQ7A73VIS/Qkc48mrzU9zKC2yMKW2+J4R2S9QEXBzbd5yh31ZzdnNmpGzRfpPW7catFY3KhmJIXeQzPy4/TaySfZBs/z+ZE8FWpI7lYqSdKRwCH1tZtJpxMArJoyOnQspPA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778382; c=relaxed/simple; bh=oH3j0HFYrkKLmTnusf8KVHEb8hWHPIfSLZRm9rltz8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nx759RD5R3qUcq9HfDNJpE39KifGwVZqAbVeXjAcYdGD9bn9npbOnnLJeNyghiuNqwHPqohDjXHIjiO6zU+M4QhqKrY7Rh9Su7wR+H+2sA5aEtKaoFOsLVne1WChtkzI3E7xwI3mzVGwsBGtNm7GrEtVIgRKwW2uYSGCxHb0S6w= 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=j9455ZGk; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=wN9uBfkn; 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="j9455ZGk"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="wN9uBfkn" 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 6870l44j227842; Mon, 7 Sep 2026 10:51:24 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=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b= j9455ZGkTLS2q6O16hApeazjndRZ7cnEpfDnzuJHNzU8d6AxoCN6o+7eBqOTxdbl 1xbXIosmHnkvzPP/FKz08yvc8avdNy9LqTniWgp/LuHCohHVbrzyAysgTf3klAMo YquihdG2mD7pAHRIainrS5wst6FYfh5JzJe6WQ4CGgpotH5nz/dZC/Dp5gcwT8Qt jHszROuXPHOIid9i0VgNeW7qvd1GB0wGz2+yYD9Qd08mxbObbn9WQmDeusUXubL8 TyDoZeYpA7djEH5ijL4B2bp4N6Xp8XTTvHInCPhZjehfCvgaCM++WDxe3uanPhQu KD3qtHq6G0MX8/IgarFGGw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessgf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:24 +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 687AopfQ019106; Mon, 7 Sep 2026 10:51:23 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012020.outbound.protection.outlook.com [52.101.43.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gh74q8rtr-18 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:23 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pX6pVv0WWI8DPw87lKur9ZnDqOrMYHwWya25XCrqJ7945OqQybSF+W0zgI+8COh99ich06F4YmNOCdubuQMsVC0Crq4l6MJWKAQRLa3qw+nvI5C/C4kG+WaB0594rFG7eIWz4uVNoWTVmldmrIhxD1ErJK/nOaCZiOva7lh7SU4oUoisp0TPjGL8csIACrDhTapNWYw/UF/er8eo2REZSr6OXvwEK95yZ2BPaxNbPpfQdKPbztML4j+26NhX/k+govcUoLoICNM+BlDo1gASXgFOKBdtyrpdSdnNmpdDqIvusO7SBdFirDFhzXkzM2WQbJ5EE/xixo3P2Zcf5p10YA== 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=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b=q1ldITp/f6i69Sf5jJ+R7SUve0WwFzZwsugIl22/mxbUSYTM10yZbnrgAnDXY1cIiFfhfnNUOTOTUtNY2fOqnx7rx9MhMYiF4YLcoWBFFq2t8VpGayxOHKwyCHtCjBYGFrvdFiHz5ZKUWTdc/i6oMqVX3kH1A5h8MYJvllSf5IswUysly7E9qKBa/LrzEXpqf8WvIdkcxGoMyBd54VkrTNNPxv+1VeiTmdIfTnov8e1No9NVYoB1bq8VvptT+RV2sUGBMVKBVpowDX/S1yzMp1FFm2dzODpvNq2dUaieC8rkpFtuzh7CiMqAU0MetOAMmcB8ehxTstNQWwSK/r44oA== 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=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b=wN9uBfknT8SzlAEQxnjc9ELHYqOX19uGrl2kZWwSD6HV1G+v7wf6jYv9jJkHYjzqIvECOdDO2Io8gv0tozp7jx62O0txb9OU530HOq9gkzYKt/XqZfAYA5Qvo0QK+BGBQ1M3Ej3+pJRqtvF2gWTk5zIdiIt+t8OkQys7+I2zmek= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SJ5PPFA7D84DD83.namprd10.prod.outlook.com (2603:10b6:a0f:fc02::7c0) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:19 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 22/27] scsi: sd: add multipath disk class Date: Mon, 7 Sep 2026 10:50:16 +0000 Message-ID: <20260907105021.1763236-23-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P220CA0132.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::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_|SJ5PPFA7D84DD83:EE_ X-MS-Office365-Filtering-Correlation-Id: 81837029-b704-4cf8-23cf-08df0ccdf308 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|7416014|23010399003|366016|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: EPYgmtoezN2Twy9arhjkW8AcujWvF0cZUygOmCa/2aOqQEAuMt4jQACcz59UOtZ+6GrMuxmuDODYJRbdAzAt/L7QUN9pf8/nDe+gPXg7R7IAtJnNE4M2t1qrjLdyC4s6MuandRLWdIVFc8U+6bAQFAPbChqIAK/l9Rh1/0kqI1ZmOWRaLjswaXYMyyLFx+FVlnt+0lyvYBhONUFU9QiUAouI68qXJVypshWXgCVRVQ4TzpZaqHOeFkw3WHL9oF7KQiWzn3VHz5Z0L6oqXDLvL24LsltSvrWfYzW36/+TcZVFl86gCiEPkIXpjp9QCLtLcs5Oqquhvtv+sA89Zj9WcRAAZVbLYXYb9prNEtODYo+x9jG3ZFMcZOF6uYy1EduY1xPkJv7rqAsElk2t1T9F2Gw62US/E1TIBlUj0jdsxVQx1UtKrjTXUqysR0eFsxmmG1TiTK2g1HZ+pXbSZa/nvnzOXv8Llgyh7+iTzbm9h3K9hTnmqSlEaOtiQX3vtXjVWloqD2PDtpbSwn9B5x8AGklMfa2L9CAtAWB0uTx+3vKNSghF67jZB27TBwdShwM0rp/VjOTbNl2egrPzc6Iiyk5yTN1Qf9vPHJEd5I/owWolPd5LdtQz3OkK0VoHBNDKJzgGtq8tgyAudEt/9+9e/d8tzRGoCr+faChNSuRajx8= 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)(1800799024)(7416014)(23010399003)(366016)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tmmVNNV1H7jXVuqjQ4RKstX/jtqt1jfuD2kXnMQz57I/srpKBTo459ZETpX7?= =?us-ascii?Q?lK0vyz1XSBb9hwJZokqidbZ8RKZBOKtrO0Kr0ivLbrtaXsd4U8cZPfGpdmnR?= =?us-ascii?Q?Rlu98BWO7WUMFQlOfzffZFtZP28uARATvhNgz0gzOG/PPbXCXbb5TT3uRIq4?= =?us-ascii?Q?oQkeeXvx+p0VN58qLVZaFqxYEww//oUx0TknlVWTXpO1RpoaPAPV/dUSD1lL?= =?us-ascii?Q?Q1IAtxiLrJCf3btqO6fA4Pc82T+ineYfwwECjx0QirIJPONDSMigEMp+rN3R?= =?us-ascii?Q?UEkbL3XQ3hG/XecHs34nCNbE15oeMD2C77VSU2t6fwu7+g8yvmZrpdqrXNzB?= =?us-ascii?Q?K80Q+7RX7gv27Yz28qw4anw5jBeBVzVs5brM6dUY4SyTiq3CdBuSPlJaHhnA?= =?us-ascii?Q?5iSaqmVDjl3QnU2sN4qt6Mpo5fxCy0QXyyyxOB4XTGjWW3rF/jI24cPw34Tj?= =?us-ascii?Q?bpj4LWqiG6qdk2ZbOrO/3RVunjjV8ltpHLhEGxbFZ1FXG97Z9CgHYIiXiCum?= =?us-ascii?Q?TretmOF/VVvwbXIMV79nP19Ypvx8SCLhPbacP79lchADk8KS9+dfGKcgnZU+?= =?us-ascii?Q?jxwpJLYbajMadyPZKQBSwedoHe8Xcol3UjIZqDcyzS6VrXn3SnK3b3DgQHFH?= =?us-ascii?Q?LZgtDGLP2R0+FFGWmyJ5ivzd5z4h3QWhTX0cE6x71RpMsGmnMrg88r13mJsn?= =?us-ascii?Q?sSvVV86RHp2TJt79eG/48IGwuRs0XchixNUXbDK756Z3+vfoehgat/Stnrhj?= =?us-ascii?Q?rdJjBl8/nI6hnNY2rbooulmn9k2QRxWHKzVFQiGNaNctwTp2y8qhXOA1VkNH?= =?us-ascii?Q?DjVJQkingsNmNCiXr6M0LFInWff710YmD/cT1lBmfD7Hsn7Sf3S45XGC7jzA?= =?us-ascii?Q?2zJNFwpes9182uNh85ikR8ozpgwx0slkftldh+t/8N8csssS6yW5oXyTUopG?= =?us-ascii?Q?PpkbL/TAYFdaX7PVzATyVZ0xGv5CMEIXFkcjCY09GtniKZbIMbWk00VZjUR2?= =?us-ascii?Q?kZb/O6jbGDDjwMCT/p3O6XAJNGMn++8/ejKNh2f7fyVat06vj4KXJPDlbgvQ?= =?us-ascii?Q?7771x0m/67B6wSB3SvD7o8O49iL/WkqjZGBxewD7X4wdr7oNpmk/A8e4svfd?= =?us-ascii?Q?v1EvfyOzl3nYFxblznpGDszg8hJroqwCPTKZo/4iYWQ3PiAF+FnvJiSYA5Dd?= =?us-ascii?Q?uYWSrfZuBwjhYCmsJdkRwWuRsUQqt2Xo3gMl9KqOcArGKxTbNIk66mUNjYl9?= =?us-ascii?Q?7MFujnqWr8lZZKzQYSF8I9iKwdX38vh6Cf/56HLHdR7DC4iTO/M2tEB3KNIO?= =?us-ascii?Q?U1lx5i+dqsA2+UN0XQlm+6LqygnYzDg8JKnvnZhMF17GFXe+Tai02hV1ahM7?= =?us-ascii?Q?Fc3QuE7HZ9zPjsvODWgnaX9IUQ2+w0y+OTHGqVxZ2tpSClNCvUPtOCWjfYRQ?= =?us-ascii?Q?JAYRJUnEeoOvBUfo87pyvxrbLHUeLi+iJcjjDiwyIAL7qGPLrlSvxWCbTE5/?= =?us-ascii?Q?ThGXohP0Mvx5YacrVup18Y6kOZiihn4yNKVK7Fk1lXHtjUjMyGiQBgdl1ZY1?= =?us-ascii?Q?RNkYQyU0i3hk3xUYJxuOPmHeuiGTcnPdnDmLam3Cd4e9mSXl1aCrz39bDqSD?= =?us-ascii?Q?WA5P6Wi6mgreEENZLlYd7u/uAmjPlPZI76cYSWwHBTHSvPagMuq0AX3lSAYn?= =?us-ascii?Q?bJCyL/NAHcNIb8Zo/1hgt+J05qQFUnOgcsercS/mhp5YbO5rk9cYh+9AjfBm?= =?us-ascii?Q?S3cqFfLEQw=3D=3D?= X-Exchange-RoutingPolicyChecked: keB/qBzxtD1YRHF6VCpXkBl88syxzUXC/zB4QOg71MLokcginFGsQiqgwTUmr9kKIsm+W2oB4/ORfj7iIY9eVojqL/OhLs+ivpmyOZ7cnUJuv5Ne05PLC7zUZUs16QMO6Fh2F4UplwVQPoAl2WfRzCkLVCYoUcfALz4Sougr9yJpk3uBc8p0A06feTpaEA9bG+7AcWRSUH5b3qpwV3ae7ROXp6/08yngFNLuBGQaW9bQ7dYMd/ZYe6W+kS//wUeYBsyrnbOZ5TvoLmD5tZmp+BrNLxLHV71kpQnMHgE/vlpBcfbw0EVg4OI1JqaHTnlThVnj54NAb5aXwsNZnBRbtA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: sAZ7YHi9uKDaBKPpYTybPZMsjAtcseWvGMtlB9MrXVfhtM34XUw/9fEHckoRo2m04Lk8qyMRPDSAvXB91KtTS3mWjrW4kptalMX0TKtsOyUExj+tPFKgyOmcNm1zFJBVTmrKTVttckY5GwGrdPaJfvhgPlrpwLMA/CEdHAYPICfptiL1Hy/H618exaFiqVIXkBeAKAvNxu057knbtiVX6x0jKIMF3tBCR/v8/9K6CiohrGailwXz6Z80t/cfwHesT+Q9vepX7C4KnwJvwn6/zoMxV6hWhvv4FVU+tXLlFpDLpimcT6M9qA2YRcqlescgLrFtMnB4bAbwraQk/qW0l2PFRqPPj7LlPcxxs7tSAa3Ilnqr4EuC3W9N/eKQK4sING+BXFmNc6Fyyppf36+bbd7A/DhvnuIHVf8iAsVCndXbSFFtSi+Pel4JOquC0bsBZsqoT/kQJR+thfLN/PuzlmHVxS+hQhZydRvtDGRcr0L+Ri4zBxjaA2ziWdL2/hOBwEKlEveX31uyq5DUEvdXkLXDHoktoHeZi2rdaLRfC7Z6Kxi1okI9lA0gYs86WQ6Dr/uCyD9eSpzma3oGLmw+NfKfq5wiLzpLfXR6b7TBDKI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81837029-b704-4cf8-23cf-08df0ccdf308 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:19.6304 (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: jUdcuLtfA/xDKWcRNaVnEew514hZFBtoypR3VDhnjrGaKH6YijCK6rU4OZr89nsq2goGsrJxynyJ5UE/SEdvgA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA7D84DD83 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: U3M6giGuQqn0cIG8ZdgW047rGbu6L71y X-Proofpoint-ORIG-GUID: U3M6giGuQqn0cIG8ZdgW047rGbu6L71y X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e972c 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=ecQ7zCoEdOpy3JLqRw8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX2Kku+Y9cIQxL siGB+lVc/0jcYFTE1Lujc2GQ/oJdLAm7Iy/vJ9U2ItMhUeK+Jdpkep1tlBS13xvoHOkLorPQHxN SLT3ew/f1w+QUR4IcX9vgkLZvDTYP6e9jkAVhbBsl9TG7K5cBfUWRiEBHYPhhAhu1VqAh4/OXPY 9fPScahk/uNmZgY6s4n8+RAJ/yJBeVMfKRDKo4uh1aGHoorUX8BpUcxohk1dZC7ffsGFr0cBl/f MUFmBz1sV/jlKglz9snthuNytOKKpw/iBXZ17rKGZye928gkBOJj7YyW3hAUkOw5Pbo8atQj2xB JwtE2uAWlSje/WkJtKc6E4QoLrIKPV9OYZbyc/NN/0xsd6RYIyRi3R/UbLKSHpji8+3HM8E4drN WXQi4Hkbdw0BrSAhs6kMAomehHxID7uztLGoouRLmY+l5GsOAUCiwGoTNgPm4V4SadqxQY38z+I Pm4Ceo7aWDi2Ik+xRvw== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX12f7nov9XRhz GvGhYDTHjDO57f04A9IYbuP8iiOop+DEF8aRcEcvLaF4IsPIQRuUnn1hgqDlUFNWdbH68UHkZiC FnUPkdajHhpCYGUTFnwfzUB1wpKXAxoxpLzskYZfjg5uT4cLCF8N Content-Type: text/plain; charset="utf-8" From: John Garry 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 a1b21ea14e549..6847805215bd7 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", @@ -4468,11 +4502,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); @@ -4483,6 +4521,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: @@ -4508,6 +4548,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..22438173ea2f8 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 Sep 25 23:50:57 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 BDEA349483D; Mon, 7 Sep 2026 10:52: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=1788778341; cv=fail; b=OM2amNM0DkA18W3ynj97oQuLMckPaFkh+U2fSwrGjBsXkOURhSeT2HfqdcSTzqnt5+TmnF/bLSey2CubcQgmcStHH+TR/OV496U4VRd6E8fEZAx0IKAAG4++FHmAbhCX9DimccLPGo8/eaH1iGArHdl8KMxt4mLBg/QxXCQapU0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778341; c=relaxed/simple; bh=0tHfHRxVgUg0g/f/dBdQLGON/+3npr1P/655VNCOZG0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AYAiuRQvarJI63cNAtwd4nbGQ/A9ZTZPLRh1Lj9iezO4dDVdjrDNnz410czOMIMmCv1Mu3peeiBMSRAfKm/gep4nzjwPev5xPNYVN/PpovluTCVhuLK9iLEdsWGSwJD7HAhX9H0CigKllvIbhBhDDoouNpG13WDfq9En0hcC5nM= 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=aKesivN/; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=uO9VA3sy; 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="aKesivN/"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="uO9VA3sy" 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 6870l44l227842; Mon, 7 Sep 2026 10:51: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=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b= aKesivN/4Wh+nAdQcTLahnV0m6iRL2wfrqyIqdbMRL/+Il4WVKtULGKY3Y/yCtFw /okX8zCLDYdtnjTz+O6maO1oDZmaT3+aS9PjpFNS7ws47UuOcnu/VMo35b7qk/Wt S9OsngEBrFyHzMy/QiKE40Zgwu3Eo/kb3i71xY2kcos93Vmfd8ZLOD4dbe8iZB6+ 8dqGP1GTjPzyw5tLDucddZuWBZy+Qm4ZG+ho+iTXr0sSCl/3M4UGtQ5iteb8Gb+k RzL5hJwtLow4tjEEA6TSMJLlyQoV0cZx4IDZpQvTEgwV6AI43bcd2zkcd5qe1ssx hs7WPIhCtXL6SvfwUJPExw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbdessgv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:55 +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 687ApfQa029304; Mon, 7 Sep 2026 10:51:54 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7aw8bdt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:54 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dg8DIxlpgVC9NOREDiDdzGuc9jmGKioU5Yu7cjdrpKFFozKaQjTjwzAWsxLIujJmJpjyiC15JHU4azaFzavDdkbzY3t0L+R+Ntn/gxXdq14V3jtSNuOM2oplgiEznowQH7bMFHVt1XPl1KfZdtXV8eGzHcfTtvuhVKZ5Ks+RW14cvlwpGs6tErhEMekLy643GBSp8yC+ddaKgOjFmfQ8rBzfFIaLzk/ChEPSjViJ2nquVYkWd/Bht94BdheAKFrRrDECPzsDJH6pcWAowYsX9EZ3UkcckevhWEoBNqDbW1RDb3vOGkr7x3OqgHGsVIOfqko77emXRd+Cyloxepa/CQ== 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=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b=q9QwU1eZS+rthjLd/FNNF0AKqb7DAiMqnCQZJOlkQMg/Zm8F9wbyGphaY7/CUWXlEFzytC59RgsceYrKurv+DrjIWRXDB0PH9vLPWqZPefkmk/Q9+yjTJA24XrwKILh3DxiZ0Ta6uHo1WJgxICv1oCEZHBqYHBgENYJUOEIflHcZqZR7lALVsrBp/zx/GCY+uSOU4X7TgdX+GG1IrKtMMhWwpuwkE2H5ed+fb0pnnd/ciRoNi8i86uJeB5hL/UHmyU9PjjhrAtXFDTQfsE6BHyBfXefKXNLMc0XmwMkxm3kJV8e2piBBQdUiVvPXLW5OCh9ocddH6pan7Qaw8CC4rA== 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=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b=uO9VA3syoIB5kF3CcDj4sANhm3vS/kS8VutHZev/ZW1CZMrYBwt0M60cPropYS6/8wGrlLFfK9JXxTuIgOGHPAyPCpkkG/YemgSOZZQCHxWn672PfeluC0p37FNMMrJbqPnQ/RvVX4KWNj4H2hz68E7yn7ceLaKEttw1WOgw+Ck= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH7PR10MB6276.namprd10.prod.outlook.com (2603:10b6:510:210::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:21 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 23/27] scsi: sd: add multipath disk attr groups Date: Mon, 7 Sep 2026 10:50:17 +0000 Message-ID: <20260907105021.1763236-24-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0345.namprd03.prod.outlook.com (2603:10b6:610:11a::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_|PH7PR10MB6276:EE_ X-MS-Office365-Filtering-Correlation-Id: d99411eb-72e9-4eaf-b721-08df0ccdf3dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|7416014|376014|10067099003|6133799003|18096099006|22082099003|20046099003|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: JFZepZ/72v6A8alkLS9mTyG+vjPD/ZmyjZNvfHogQ2QqAGbipInH/8vneFjZN3kGgKc9PDuDP+knwcOUkITuj3B2QICvmzsrIhpRUaiDlkxMMFP5cGA6okhdKQhqC6BqraHn2CeA/l6B+wMAydBA+wZWM5zrLk5W0oeX1Z9CEsobwQo/klHpp6OTy0MSuHnq2JJ6egHQC7GUsLJw7l9tc5fMqv+36SQK/IVEOz1glMWYJCJIZMZh7nJoy1H5OeoNAiRPrgbyQH7o13t6sNAtGrZU0KmtO9SzSVeCUJFobeYg1OCATAu1qC02tPIFT3Vu/AnjVv8HV9sn9BhWvnmYmjCCn8N8S5QiT2em83FJIEQ4oPpaLKLd4NPIZMayDI5FlmKOT73UxpEe7ltgI2QjeP7Sm+V9lNqc3UfTyvHdQmMAP8of8BU9GBtNRtpAbxQ8S3tIU8midPQYYfZhK2zm582JK/xRCklqom2iCnalmByftrCHSjM0be+bl7aj6pjs6VTyHzOcVK/k9WHQOEKufVUHtfoFVXuwdjEnyMIIWxxpOW11GBxXBnLiMQpGiVR7jK29vjq0y+P9vS9AYwzCRA3CkUVZmN4W4KGoHaFTkTdRKPa1WcDKf1KuuZpIJidEBUZ5pZnQsf3MauC5KEaPn60AySy1WRiBf2uFEPF0b7o= 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)(366016)(1800799024)(23010399003)(7416014)(376014)(10067099003)(6133799003)(18096099006)(22082099003)(20046099003)(56012099006)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?X800RqqqmsqxbcMfAY35uY3GX8p+Ub1lVdbB6qp0fruq0q0k/R7spc10bGfg?= =?us-ascii?Q?36JIBgO7PBULgUxgFYirjf4DkjRufmy3ogqz4znmMZuKoreyqdEs3yRGWZKA?= =?us-ascii?Q?WjYuVTQ5Vf0xgblW7Pd47zqDWFQ62GCPnxhHy0mjVDS5xkDuMUpr/T82uFc1?= =?us-ascii?Q?ffs/lJosphwx575LkxLGPFJ/DDGyNAMmin55imEibMUGUVgGfRg2d01VhvW4?= =?us-ascii?Q?pCUOrTVDsdBcpik+dhMOwP7YjCq2L6gjztF6W5mJQtF65cSRM97+G4VdCAan?= =?us-ascii?Q?Zo0ZHBFVyxJ8dPO/jC8ZHMhw1lu1CbbANPKmG9egULbLxCPo0nZ6tyYIRaSa?= =?us-ascii?Q?S7KXj5LQ8TN32uFSrVXc07PHa9agKuSv5VQsIk6bphz69AgRBT3VcL4IHIHL?= =?us-ascii?Q?A9lJmgdekgkhZeYJvhgqKrVIb9H98iZDe2iDi6PmwTEg6JetU41S0Elr6x+6?= =?us-ascii?Q?bfdCY/Q+3m4rxegcLFcskrT4UbT+3xPxcyIe4uplDlKj3FnI8bP7thNLUm59?= =?us-ascii?Q?yp/NZNIrfWYD1yb6EPRKLTlbLA+Li1yUcEkUl96BJh6tCPi5d+G9S5XpayOx?= =?us-ascii?Q?1uzE47jLRvDrH5Tuadygu0u5mA+2AaGogdcApYKMmfpDNaoKct7RuE2is3wM?= =?us-ascii?Q?MxdLCKoyj6JKdIMOP0MEBIWN+6Z7YmC3nQbXjZ/2UrFgnfjGmkDJNbj8lt0/?= =?us-ascii?Q?jbqjFIbdA4Padv41/HB2yaQSa85vo9lrxVaw3aSP49HZ3HZus4qZi04iWWBs?= =?us-ascii?Q?nxnhf8Osy3s9BGGvY1dPSM0XO/aKU+cEwOTkNuwlp0palCAwDSAYsVKpZ+4h?= =?us-ascii?Q?c+8J7SmTeZezV+6SezuUocyrmf2Tw5yyBhenPBiJIE6r/pe/AFDDJ9/RboxL?= =?us-ascii?Q?4cysaYe4ZnPrx8/URBNmYJcE1YH/7b/ihvi1eoz+TgY3O2FxsJ469oma6GXg?= =?us-ascii?Q?keIgmRel0jOzolTI3Zvmd9/l1lQ6jDOrGZDAHgbyw05YJsoSO2ys19AB9Hkg?= =?us-ascii?Q?3TcSq9HRr+VYEp0jINtY0c/tACLejDQROJfXqzMqaKR1q4mamNrQ5WV+tIV6?= =?us-ascii?Q?mMuf3RozYnlGqdfeq+6xldFK7kxFdydcfdxFdjWr0OvzlLKanfQA/X5tZsZO?= =?us-ascii?Q?x0QBsLNWMfafbA7sqNQMqM4X9hhWMB1gq4VEVPEOnCgKEVu8cqaMi7cLJCbA?= =?us-ascii?Q?clL1oiO9/mIUkcC8NRwwNoY15VjDMcCw01+OUzTIaiCkoJgWmbiTH4XuFPKT?= =?us-ascii?Q?Qx+vgxEF4PWybA3jjCYaarZDPZbPJOqoQ5UTvHa7ZRtOqfkQ8sPmdxatLhTm?= =?us-ascii?Q?OLY0AR6NvVHc4UPsO1BTVceFSTyngxkt3ioG7bSGWUiIJ997Rx4YNtqm/LB4?= =?us-ascii?Q?i7FL2Lyj75362IvwDziu5Hc9h5hqR25jPO3jBkoIbtFeP3RWy2vV2W8sWsIB?= =?us-ascii?Q?+RAKhSzZ7VoQuYtjfkQR4yFh3E19hC9WniIAILoem6OW2sQjrm56TNvSWN/+?= =?us-ascii?Q?/vvk91+zzGhTkmQNosGtHeQJSOts1MFx2ZOJUIDPRE0wzgnb+LjQEOYx4Eg6?= =?us-ascii?Q?0bOhkuW0o+JZkGAuzy8++Ua6lieWUyQVFIl4wAtOSxDqtDCl6GqYx5kJ38XL?= =?us-ascii?Q?JixgSNWAXwBUVQo5edDJRshdN39+ENS0cAoFb/Qq8VRtmCzLuDOFRRR8o/OW?= =?us-ascii?Q?NS5W3CsPFezMiMnnd7OZo0zSk2U2DghQHYkSrMVNqrFk2kGq4prFsjImSDhL?= =?us-ascii?Q?wjOXVkmenQ=3D=3D?= X-Exchange-RoutingPolicyChecked: FFb3fhryElZrrVVrVAktzGBMRm8sQZl7mhC31ph4i8JsZnp8A9W3nnNaJyrAPWWrPGqh8xi/5yvvPsG0aKTBRDa/uSNeuJYlfkgrEYUN0nfNtCjfwaMDR+DjQFB9Zm/c8pVb/Pyp139un7JfIzvTKErK96irkip1yFskAcXPvMrZ+UIWTi5zfpmAt05N+tDeAIzFpdI6onVJzSPPUzE0r24M1eUzCks0SbyeOMkSPTeMW3whE7+RU5GGDT/po9WmxijAN3rGD2CqrMMhbl13vY+RW1J+A8W7BEPSNhHjf2tMk6cebqXd9OLjl1FIvwCeQKb7HthkMDQwxW23RLpodA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: gCLRuh3YpNV+6rPGrn++5r/Bcs/tCWAEyEHzY9Y3+zPnczcEugmFd/GAuW5Tq3/Duq00oBJpd/B3rZQ0hPmPMIkKUGePR6cyi8ThJ/o7Ir9n+0l0iSTyEzWPu6xgiyIYCUYhQ5RK+g8/zG3buAfmhFEA+ATcxmQ7AMi0LpI/hkLXzHAxuv37WEPV9bHXq1qdoMNBnRCy+BVuMvHNkeAC1icNkbsmqZjjgn7Q8H2LTh+5ujqpLM10NDUX+0A1/7v1Q6mguu3rWuHSVoC8C5ZNEOVFRFC1hE7tNxcYAtckpfOgNnXJ4vKWyzSySx6mIsMQaNYQGQRw0P5mcUN0L5Lfi3/wYxMb3VpkUqykdTDdJXjuWle+SHcVuhRFHeyvPrfyxvJ9OIdiEaRjdcXu3BPDml5OUtdsj53m8teliSCpSgbjkNtSqBUYCQeFx95CNFpa+mucENrZLQS0atkVR1Nj9s4TYzEGALKkuHW915VZq2TNBETxJFLzOKHSXLfO7GKr3L3Ax8XDne2/BDUytN166dj+2WrCGf1p0xFNqOu+AfDgZJ28VzwWy1X0eDbQv48REg+QkLgl0ycR+vO0jfI9R8WNolcLu0O5jxZuUoApOhQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d99411eb-72e9-4eaf-b721-08df0ccdf3dd X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:21.0291 (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: 4BSpf8olBxwuLey9HAnM0yg8bpGemUUf1naRc9lQqD00pg5A5dbpm9Ey/MdwrpDTwlZwTx6oPx6hoRXRhkOzUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6276 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: W7_mmKZu35DuCVt55HFnJpUXtAs5qzkE X-Proofpoint-ORIG-GUID: W7_mmKZu35DuCVt55HFnJpUXtAs5qzkE X-Authority-Analysis: v=2.4 cv=R94z39RX c=1 sm=1 tr=0 ts=6a9e974b 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=4WwWyauO2_0H2zdGQVkA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX8i45N8g/AN+2 It2suUvFeLSj+putfakfg4Dp2/1VKPh8PIKSl4ag1AJgznSv4JCeoiHfzCqXN2wnIQAin8ynQ3/ vxN9BzkhD4sfzB/Kc07xuZtF7CE3HPNjwq+YLbcieb7bwb1OsDWef6+N0DNs+JgMBuaELNZvx6u 9HSWKwH9VrQrurAYhiEWmbEWPtUt5M4ocYm1Qp78bm8yo4ze+ATkSF1eeMBJgsbhlW8cBh9Y/W5 zseAEsXQgvV6tQqcDNtlB5gqQJHP+/1nIyS9LxQk4Ulg+aI2iHdWI9TyEQvJmli5kEoXlOhsubL XlE4+UPNvvg+jNBhv9sZ8n3pBy9GnrcHDhmLPqAM6mrDxPKMUKXKDf5SuemtFfAhD1snyAYtRSH w/3JapOBnw5ZTspEur2Ot0az54B7t9QDsI/pXaLiAqbbffDeQnaa1OiGZ88RlAr8MF8dtcvEDbp lpwGFU7p8RcOe3i5wWrhfKNbz0aDDk06edo2A8LE= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX+oVs2dzSiPV7 +f13B041qXicdJoXQGN3CodqtlVn+LgpX9lJ44k0EIkFRQDxx9BzDQxvgZ/Kq9ez+gjTvF72MIF u+JeZYVdTG2BDBY02e3r7Gdu5VScLHc53vDLIbi2YyZxAYbmVS5/ 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 6847805215bd7..60e071d23ddd0 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4019,6 +4019,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 Sep 25 23:50:57 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 BA26E46D54A; Mon, 7 Sep 2026 10:52:25 +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=1788778348; cv=fail; b=mAN2+4Am/nzxMg9FqkmYq0nsJvID8zWkilzOzYMfg9FhrNnowWoWCuPCcFIqQTzxGGZyBei7GJQgbHtiYmSKWoaZRm4BGzZQFB8H33YkOwBp1xV0o5Jtxk6ETGQfnG3+fVHtzzXUeqjWQX/VLLeEp3vSFjqXVRFFPQeYyP11gHM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778348; c=relaxed/simple; bh=Vnz2OUaPNniK6HtPHygHLBw4ZmmuknUJ4SGgpXz/Dl8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YFcob4wvlMjbizmq/pAA/AwOgYdhh0n6ltmFi0MSGf3ZgGZG4aqxtkx9hqCNX1u6mQYloMcerTETJWl1poUP6YrPnbn5hBl4BRjEpnMZGDEVlUSzW4/K6xLOP3fUDQAT1SrSCWKmphQtCwIL2dyIXWmeoDjh8G4hRs0UxYWLydU= 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=aGKvcoR4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Y+NwbJBP; 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="aGKvcoR4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Y+NwbJBP" 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 686NwXa4204422; Mon, 7 Sep 2026 10:51:59 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=reDciKOIhgVtvaKtpnUTCmO8AyBTyM3r8+5i0QoLiJE=; b= aGKvcoR45vLAmHgdUypfQ7cYqoLAvP3ZHpaIM3njuaiwcsy6bhqbPtsmsdzpSdYR 0jBvlBpT0nujRotnrP68bIeJ2m34KpPjKjVGAREoPXHqFt6v7pRJ3BQjea5l9OJc 7i4HPDrOBtCQBW2RtT3kAccSVy87FBL410iT2+Z4yhDf2sLpzBCM+8DqcCP7LY5W kT/21JkGZliVV/+FW+9QgmPFlmQnCZwhMFX7Q+NMdLkvXbseTJqbEtq4isRfF0td LAmFOz9FP9RzQfM8Zr4NypaYRQjhZMoBm6iEzsB90o2H/w9xPHQtnZCMeyAlQgUL DsSmb62Id+l9Mpd8whOrLQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbhuht1j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:51:59 +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 687ApfQd029304; Mon, 7 Sep 2026 10:51:57 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7aw8bdt-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:57 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uhj2+lBLyB7PblYZJN/L09w1Qo+wB3fxvb6ZBIuPImSzP/8Zx34u8eBbWE9kXfVHJM5JK3YyHnzcdzlMmcNjG/KqbgdBboObWUVBGf/TwlLd+YFK27A+pzWeIfjvL+LHtW+FPu7gNLAD/D5u1cFhRKHz1baBz+dArhy6ekCb0zd/LNaIh3h7VZI+UgTuUsJ4KfdcyRx3AfwF55o4XpXZBoejGkToLsrYxRsF5ZdBs6N7p5Ktbw/v+kRqscS3ywqgnT7kFB/ivIgV9RuxBTef3i3tbv1Y+eEqmbYoFhWK9e9l3Vw/M8yq6m+iM6QTn2j1uN8EbwcaNaxedNBMUS2Vmw== 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=reDciKOIhgVtvaKtpnUTCmO8AyBTyM3r8+5i0QoLiJE=; b=GNSfXBxpoHw7LkRLIKA3tLKmuL+/hrMULgiSQzi5/4PQqO08CIhXCSxQv5CeaJVbE+KkFGqaXC8qYhRDk/KklEOEwBR5DSfVAa0QkU1R4Z6b2OdyS8lAx1SMxHde8UIydHQPoA15nJFj0BpjVwgtIUp9SBgb3WjaSlnAzUwKe/buHGY3W2pAPiMQzeFRwURabYkYhdStGE9CiCL11xiZlJYq29a0J1SEcOD7yUWCffPXlKb/xTR2K0niUjhGfhXlYli5ls9YQSDd+AU4eKGg0ZPRQehCfePUWTNa8Th47OKD4bScRvx3u7fY791B3xp8hexd85XDne8S9YPIMr7stQ== 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=reDciKOIhgVtvaKtpnUTCmO8AyBTyM3r8+5i0QoLiJE=; b=Y+NwbJBPwH8bCIvsRrwpYbVHjrwwsbLRwoz+JmKelACRHlLlVdrgFQizH4bVkI4gOzaoADusE/v4GoOZ/qMmsiIfprjIbqDFYZYkfyt/MipVGl1ZfVt4kXqeI0AxoNXdU0+ZAqlUdrFgGw9vhaqhQpqelADF5lwGroIdLA9xqNw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH7PR10MB6276.namprd10.prod.outlook.com (2603:10b6:510:210::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51:24 +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.0406.005; Mon, 7 Sep 2026 10:51:24 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 24/27] scsi: sd: support multipath disk Date: Mon, 7 Sep 2026 10:50:18 +0000 Message-ID: <20260907105021.1763236-25-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR13CA0036.namprd13.prod.outlook.com (2603:10b6:610:b2::11) 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_|PH7PR10MB6276:EE_ X-MS-Office365-Filtering-Correlation-Id: a2f1e7e8-f4dc-4e39-9c8c-08df0ccdf490 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|7416014|376014|10067099003|6133799003|10063799003|22082099003|20046099003|56012099006|5023799004|18002099003; X-Microsoft-Antispam-Message-Info: KE/depIWKtymp4cXpSO6BevanGbNfZl6LmkOaiBGW/04YBbowRGdAUAO3UUi8AairLs9K6IVPcUe+JfXlTf+EB8/jkjZhKcomyhKfRZmiG1troHYhZf2o9V/Zq4obG8eyOWHmdfbxYOElMNPaw3RXnjY5VryLM3ltFBGWF8ly2w15ARIcVTpex35g7Lx5R+tR+egltP09Ys1640ozSHY1Gvr/gK31bdPqI7rfbc7PImpviLDAttmrxeKlI7dTqeu4CNa8bt39qV6+XG9B06j8o6N3Wsyf1qYrNZgGEWW8ZT2gQqLGqCfYRCbv2OgqyyCpLPoYUv5v4wO+sL+UaQhS2/VBMKoBC61Y4h9pYF+A0UZd3aszX7xq9LGy3tHgjD1/0+07wcy5yNwLPPUkJG8etp16ud+egQx+VqtKSbxx1ur8dwnr5HLXmllTPanq3KsQ7AsoZRGZUOxJMpPoKd2H0NrbNgkM1JB1cFa27Yc8ve738ejXOGH0Rj/kwNF5qDgUGwiYYuQq4/l5bDi0jGC0KO7EtqWh+wAIjRIz0Eg2wNhukyhzRxa4cgRCFnWyWa+xIJzDGP3yPXlvfCF+RTXOKfTMqdb3gLhLLuduXrBaNpdL43YTWN+0iDVN6RKQOh3WFrVAgxuk0um0tczwYA7ClhvfoN+CoRCbL6DIuInPx0= 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)(366016)(1800799024)(23010399003)(7416014)(376014)(10067099003)(6133799003)(10063799003)(22082099003)(20046099003)(56012099006)(5023799004)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+BMUu+X51SK+zzvCTM23kcb63II37XeQGl8WtfUFb0eYecv7LIU/Zzf/EC5C?= =?us-ascii?Q?LWj7kw/Aw8TlH+jj4rCJGcaMPVqkJ4iSDYiyxV8VP5mdDiCjz7ZvM/9Vxesi?= =?us-ascii?Q?xZICxzFoEf0jnjimI+67NNnMLM5719LDq6AbZd9Q3sqx0P2RnFhRmu70kc8y?= =?us-ascii?Q?yIYPNcqHpD+gICcQgF+U29msH8aiAopwptjVC2GoAd2Cd35L8RanzIXpCAqs?= =?us-ascii?Q?c9j3sM/SxfuDMI0PeucqsCEx+rwYim+B11y8NWoWCghnJTw/sOhmYT5rz/uz?= =?us-ascii?Q?g0gbt0awCItS6JgIy+Yclqtxv1s3ibDkVLsnzggE+r9o2i5tEqBZVMG81Pw4?= =?us-ascii?Q?7aVVpK1qhK6bek5YzUQLgsCsfN/e98XYmnsZUAKUqNe4IZdwvk5Flc1c/gXb?= =?us-ascii?Q?A1ZCe2f6WsaKW4vlSqNeBDhgMEX1ggSc2NIa1s3Itt3OLNE8AGKkQ0u+uNhM?= =?us-ascii?Q?nE5hkkJk7EFjtLSbonxXQZa4LDW2fOCRFw9AEaN0jqZiue/WQzY/31dgbfIa?= =?us-ascii?Q?ZZ4b97ftHNh6CWQ2W39Coj8DEtJPLzF2MHSYbak19ZF6d0ajFblii5gBpI2x?= =?us-ascii?Q?ns9IuZwsv47YfiO3QoirFAbGHg/Ytx3TENihtwY4IDPLrheRwkdOe//fvtrb?= =?us-ascii?Q?H86JMcnfbrgk2xPEjrVoJ8GU8sTviumHx0JvN1lA8B1qeetcCKeDiTGXUtqP?= =?us-ascii?Q?fUZnh2Ti9ZU9ezByjSQo6Mppkmqv/exRGoougYgcGxtrOI4esDeyI9E2SH3g?= =?us-ascii?Q?YUAzNmPy3G2/ayUUD9pYt7opYr4tgdwEDO9XjW9alXuPb6ayPPucdhg1+pu0?= =?us-ascii?Q?Vo4zZ2ZaBbUghQcT+UgajkdazYeSXJn6AKDV6A1quMDs8gXCBXqhmyofN69n?= =?us-ascii?Q?004j25wPdR0atM+FbcQjRXSvLmVjNqoVLeDR5iiOuEztaZ51/CAZIRjublsM?= =?us-ascii?Q?qxQ5mRUdLD6uIPwgyb4KCMsINCdSfj1suAqTgI0RgYuSSt6IB3z+/d5DmxlD?= =?us-ascii?Q?w9qgHdEkuEGdKFKwBts1pLd87AYzpDL6PvUMe8pXAU2nMzKSvPYCYcUfprQn?= =?us-ascii?Q?4LIhvYo06ojzUl/c0k9JwyoP40gRbaDI2+Br3brUpgBjJPS6rnCLcanraqDf?= =?us-ascii?Q?uF7krY3w1K/DwWS7wQHogsMz6cPjR+us6PWWnGRAZ3ZpRS97N67lIruh5re2?= =?us-ascii?Q?qeekQ3i9l8T0bGDSaTr8IudsNS5D0zaTpyCVMnRT/6bOyyAX/ImL97r14JH8?= =?us-ascii?Q?5QvdnlvX++s2FJCsCJRbo7DjDXnsU10mkXzAVn8ZITvojXF7N2U2dS8MBT93?= =?us-ascii?Q?XVVhGlb+WF4hBYmJSetxOYajCNDxt/umgT60QBQJPRSy6VEFLcs5GO0s6j6O?= =?us-ascii?Q?zZ56sOjgdd6toffpr/F8vweqlEc9VDXPQXv4uGcxCQPuVJwdENXTBbuMk94H?= =?us-ascii?Q?RHeCVwzndT66X8xfa4xNuyyrYjUgLu2IYmB0c+2EdNC88K8aKFKnYsNnGY9q?= =?us-ascii?Q?ITQA0u7j4cDgAxCYwf1TqYEfrl9hNpgAyhn1j6sbmBm74Ud8mv/LC5feskRS?= =?us-ascii?Q?LtUgY5EFiFttcfws5e6pObUzcinPDCvOUP0qboPA3fsNQbAj6FR14Xh7otF0?= =?us-ascii?Q?iDz77qaH4AyEmPJEvQjd6SEdg73awleetMccJhMDVtnZw/MYs35Nce390mVX?= =?us-ascii?Q?c/BwOaqqWKxkRaWgreOR6OoBC4nr8i8q8HDNscjRIu7YzAnk4bUvUfX6E0lY?= =?us-ascii?Q?UL/qJEywsQ=3D=3D?= X-Exchange-RoutingPolicyChecked: AUQnz4kQ4v29+jl8MNcYQDZhDKQ4gN74/dc7aATCPkrqcMfkIUlO6/dqz2MtU9sX+4ryXTJbBcsfvnJOx+C1IJFTCNKs0vO9/ZOEoGW9bvrJ6thfTYN6NPH9MLiBE6FKSFNfey3TGNbyjW/Szd6UBBnHj+VbTcPr1EWFLYixIqKaFDKaUWJr6KLYAmYn1uSN8vRdhl4MFP625yOpul2F50YHhQPhjnAegFJz/By7fOA8aIWff6hv5GyRyVBl9krs8TE8eLHfrmFZftfivsr0bD84V0R+BdahbwKLNg59wwZnER0DHoye3XA6rP5VQ8NS0SMsVD415xMXXWZwO1gksQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /wvqLLXoZMQmgbVAD3bYDLKMZDcc2J5DjtRrHOQL+Mjpk1mEr7164zBCJFCuDuZXV34sE6YQ1B1UtUYymfKWaOoTfWz5oM+I77d5GmmupwoT/2mx9Ak0OmBTBLv09YQsjyYs6TktVZNS0ehRvxyS91yYx2BvLCraZtENvbZPoTODrZv2hioe/I+eqUVerwQa1PM/Mmi4q84Q/BoB0e0PymJ97Unf/CkQu+0V9lQ6o2pUQmnRy8OExyv+HehWf2raAsDx6ULTuscmh+POFkxrNoC+yatGD3FUGvoPfGM5d6wPko1IhjahWfqiHK/ylXQa6eX0lrONresHrH3wnCkINdNTSay8bF8oooFcT76S1aWi8YIldMRYZCdG3i0clsC+p8eMMxE1Y/c/JxUtjWqQeGQBP1O7mY+LKjTPsdpaYfQRCJfo8NFTrFsF31vd9o8LjEBnz8Yvc8W9ePilJelYx9fdTC/7iRdPcidqfpACCTNeBVF6qORxWIwMK5xq+Hx/X82PSxf1OWHpjl3fsnTmVAoY2wZhnyKXo+leSGkqoMfr9fdVbTowb6I1XP9sX/vhmH60Hp5hTPjeelTeVk6lICXVSZSG6kK5RorvF/KKa9c= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2f1e7e8-f4dc-4e39-9c8c-08df0ccdf490 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:24.0253 (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: AoXMq01rM0eux0u3UrJPgnTbSnmYWYsNNOHDf2HloxzEj3oYuiu6e9Kt/Lzg5yYGh7kz2R0QiSte/0ex19IWOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6276 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: ReN1Bsl9GZwFX2Oa7EHEYebI_zJWr9wk X-Proofpoint-ORIG-GUID: ReN1Bsl9GZwFX2Oa7EHEYebI_zJWr9wk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX9b6zfSvIYOth M26mCWSZrOZ7iTASgIEOYejPl7jXx0HEAci5czhRS/mdBsZ1DJywnkICLABbUe/bgNqdeY8SG6L NzEywqS95mPG74DRjapjTZBI98WaxNBsE90XQ68d1RSs0JRwZXGbH5xyoAscHeMLtSzONzsjZy9 Y39IiHO2dStxgEgEHc/GJFQVgVqVmPIBMVVqhPv/5WMIvbEUI4vMEOg9P9ruDaRBkTQV+xfegfg FFKisl+KJQpLdOCaKv/v4eD138f1D1fOZe7XNHi8r18AjMJvWOYXB/IS86jxoBpdsAUgCg4nXyp N7ivyo9I1uTNpYxL9vlNM4UZF8ZSCwu0AHInMYlZvv2D0YDuquMPCW2wGwRlsCMtTYClN9ifpb8 B8fkqJgbwLgbP8/rwbH+f+/tIRzls5njcsO2b9cyOZjKKWpVb6oYuLvQzgFX7puRmTNWZqPpmWK AMkYsGf4LjxpWcU9OCeIo1FqwY7sler8LQ5+IYEk= X-Authority-Analysis: v=2.4 cv=S4HpBosP c=1 sm=1 tr=0 ts=6a9e974f 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=UnEsLBAWqG5TZJypXWwA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX9HiOoNgd848k TUvetdRvif66LNkb7MwdEJbiTMfxQ+52OHrcz5ZtSZAoFsGiIyQfhsTBjvo8EuGcJQ1octQKeFr zfP5gxq/J+l+23MjHxqMUGNkq8S22VOL0gIwtYfyGffTRzjJXUEt 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 | 426 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 406 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 60e071d23ddd0..27230ecc2337e 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 @@ -4019,6 +4038,90 @@ 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 and zoned 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)); + + mpath_revalidate_paths(mpath_head); + + 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; + int ret; + + ret =3D mpath_add_device(mpath_device, 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) { @@ -4048,13 +4151,260 @@ 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; + + 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; + + 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; + + device_initialize(&sd_mpath_disk->dev); + sd_mpath_disk->dev.class =3D &sd_mpath_disk_class; + + /* 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; + } + + 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; + + 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 @@ -4078,7 +4428,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); @@ -4107,22 +4457,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); @@ -4142,6 +4503,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; @@ -4149,10 +4511,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 @@ -4171,6 +4529,7 @@ 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; device_unregister(&sdkp->disk_dev); put_disk(gd); @@ -4178,6 +4537,12 @@ static int sd_probe(struct scsi_device *sdp) } } =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; @@ -4192,6 +4557,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) @@ -4199,6 +4565,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) @@ -4212,7 +4591,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: @@ -4340,6 +4720,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); @@ -4508,6 +4891,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 Sep 25 23:50:57 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 84F6E496914; Mon, 7 Sep 2026 10:52: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=1788778350; cv=fail; b=A5xMVniRSRQOVLyp+C57P6WRxVNA/RDnb+pIEpsOf+wa3+wWXrgpA0Ev+q8wkKYnnoJKxhv2HH4fGwG2U465sIyW8Uu2Wz5JoEED9dKA4FH+WRNqB0/nfRUKYhpWtQItEPRgea7hVdDx6Taj4zUqNzMLybLqR0zIoSMPoeKLuxY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778350; c=relaxed/simple; bh=fTO2WLhWUq6v2phqO+lJkPKWkecucVSGqCwasWau10Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jnuDWn8CUxWlouXI8956c7Ho9IvN9d2EvSvL0daOl1NARcwoKKg0PXjHhu0hBGiP97OdXqDnlnYtm24WjvCK6sY1IDIBLK2PpIR6nVfUc/ofFMSSVNbvnFqehLQOgm0/qwza6vYhWBT1QdLWdCoqwhp0aabgDa+93FaHHrcv8rw= 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=L+OyXJ+U; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=PbHi6VfB; 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="L+OyXJ+U"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="PbHi6VfB" 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 6870UZ3O186187; Mon, 7 Sep 2026 10:52: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=ecFBCAZVZ2Ky9IJq05qUFldwgcwa/osWm5T876zvxqQ=; b= L+OyXJ+U0jlIiiLaHqA7QCiztf1aMoXianFfjfRf1ka5oHRhbrNpcZ4bv9RwQMGr gIrX1LMIN0s5ChT4i+qZdounoMV8QxFm6J9F9maGQ8a6wHMLtNGGwK0vg8Shy+E4 yON3rnLFj7O5SP4c+ASgIoijPmRo83oIw6xDmxNKISlZb5aNf23fZ9oRLh4haSa/ yqP69/4V9DSGCWqvaRRlFI/BLytvNwm4O+rYmw5eXFYYgQI1kDC/rUkFe9jotTYH PIc30XlazhXX2zJt3z+GCg9Ivz5idyDPiqJ2vZFbtPPVDAltzCLxD11ep/Z5+47J dVvJLHxRcPGC9EO9uEDIJQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbmq9t50-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:01 +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 687ApfQe029304; Mon, 7 Sep 2026 10:52:00 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7aw8bdt-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:51:59 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=n/KPUvJLE6JOIYTGpLYRWEuW3k+uUpuzAv9wowQl2FA/OOUE9bQfRi0r1egMchU35jLzJWLV5aoHu0oDyn9WPvIYHHLHmV0JgokCEBcubcKw5GcyDOke7gVks7vbklpJbEGq6OrfdMpvoEGH3ZFqxYs0KdgVg7dFWrAH7H+y7mh4AysFPv1PNJOVmjlp/nsl1NBdZwH+pzxFic2GQe58rLCjsvYQbFXblZKHQhs+hAfamvODd2041/AWCb/nTgCM6UG/jrR+yPlDUxdrIN1Trgj1WI6sJtSbL1uiZaqSDNTyRqdH2WPGyROKa7cAyNzxJeSDEvQFuHGIez15z90lUw== 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=ecFBCAZVZ2Ky9IJq05qUFldwgcwa/osWm5T876zvxqQ=; b=xid/D2STtjcpJboZNkkpoL1o4PIt1uGz/h2OowfY325PJHCfelemDG/HydGTUkRnQhahRKYSVTncHYZ6ShioSC/sc91u02XAewDFDJlrC9R20WIiuVGKYoRRbQJdUmx2GYqlbq/+bVUo6p2MjzgUl+W1UyDcW9+ATzEKvlJWCx4/ws5kaeDKfGS/uoMmEUsiEbhr7Qb4Y1w6UFzhNIPsKLyJBw1VG3DfI9V9kRmxpFFNhc4/pKXtV7lJ/Y2ndBNX9yTXhQyc0IcaxVaycFOdPmLeB+iP3wyu2/25h43iPIZPdUbQGNeH9dkqpfyTRehDm1TyaIwCbi1y55vVLLomcw== 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=ecFBCAZVZ2Ky9IJq05qUFldwgcwa/osWm5T876zvxqQ=; b=PbHi6VfBiEgvcDmPcm/83Bhy8ZMrGFHdJ7EHjfQkMdyGqL/Ks177m4W0HVPipU6Mu0/2gR+7zgEwt/VTeLL21tccwO9WbIkLKCcaQzl4GPK44U3OkvAWFRv+zbYS514hq/IzCGxj36DNPsfJmvdiyT+RqJbDrgEn0gbQs20tnXg= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH7PR10MB6276.namprd10.prod.outlook.com (2603:10b6:510:210::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:25 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 25/27] scsi: sd: add mpath_dev file Date: Mon, 7 Sep 2026 10:50:19 +0000 Message-ID: <20260907105021.1763236-26-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR13CA0047.namprd13.prod.outlook.com (2603:10b6:610:b2::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_|PH7PR10MB6276:EE_ X-MS-Office365-Filtering-Correlation-Id: 3774cea2-487c-4529-39b3-08df0ccdf674 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|7416014|376014|10067099003|6133799003|22082099003|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: FSudhlOrTaD8RuBXxi65H/IjAH/o4FXdyDFizcm3PA38rJ0xPVQuAuDTFr2WVvIMZWJrlwB+qk2QuMSbyK2mKZLd7vodbLsLs+Z+O/eb4ROfuUl1WnTygM+sUv7WpDsAOD5z4VtSt2zQY0vRATgarzy58PZ5rYFIum0m3D7R02YIr0WT24x3gDXYXCGaYp5oZLnE/br9D83cLMr878A7T3ee4O73dnlcNtXlp2DdkUhTG0pfVcyydId5tuiWumrTG+U1Mk+v7Sacd9nB9Jg9Fez9D6ZjVzmDxdyiNuDfTniKKJEsVaXU4ovYpgCB3Ho+Z1dOOIUGHJdUWWXtFjDt8S71rCOtJ6fx50pjSS5pyirD4bKtpKNb0fWyymCPcjTqqHCMNKP+oe9qtfEVhqy7OfXEz9/ly75bQBGtPUTXR8c9V7nF7X0KZ1YLVvY4zXPqC0fAyZLt3Ni43xOQaXAnjppW5plpu1YR7sFYIhellCNrUlO8nog1m9sccrz9ST6pinPITNpL7Z2ExBryegESs4rODtU0fBDyvNKSSrtkhXtq/kBcMAPYLETiBIktAeJIDEv3UQfn4BgX383tpepQ4wWJnNDLvs2uWsCoYVD1Q1NNp89OrLd553j2iX6bSM/4kQY6b3MhU97Ur99CWjAo9a6R/luqc0H36dn3C6aepPM= 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)(366016)(1800799024)(23010399003)(7416014)(376014)(10067099003)(6133799003)(22082099003)(56012099006)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RByuo3nhy6dBTllfbM+qP4bhPSo6Yae2LDdoqZGiINolp+UuHCi250rTKUVl?= =?us-ascii?Q?B8F7Z05u9IVcRWKt1/DqSOeKoEra9S5RzaG87HYyI2JDfcvCXp3CrwnyrqZC?= =?us-ascii?Q?PJ0x6wieXdSyI3CXuEKlXC7f+KIYPqvbrgH8+ZpK8BWxmRn/ljSRYzjdO+N2?= =?us-ascii?Q?LwMCou5dpYurrRnJqJ8iyd978Wb6N869A4UGNCBzUetxFQl6BAZsVNVHnRlB?= =?us-ascii?Q?gkkZWasaMummA9zA5mZDGCxwct1STbcJey7vgzTD7tk6emaTf18nwHVLDk/m?= =?us-ascii?Q?es4yRZzHoB44bLq3qQ/HBZeaePju7+aiAqPLMZQCeBg+bGOkzZJKKbP1KOog?= =?us-ascii?Q?gwU9DngfrCF0hWKTtndl01nnoJKfdsL1Gm07iFqyiMfSsMGR25F8gV8n/1SS?= =?us-ascii?Q?9l2MJbMiPuQW+4Gc2Z+OvhCBDc1IPcFxLQqGQFlnSWiJlm0YbFEgodtDhRf7?= =?us-ascii?Q?4ZXCTHMX4RM65hZdU2rM/INt4UXFmEfZNkcGnNYLE3dwzaRAt22epnxOpc+c?= =?us-ascii?Q?Oi0f3UN/tZkuAetaYSvuUFbUu7Jv3+WQ0/ihWGEO4FaH/mIXwnD9YzmwRv+W?= =?us-ascii?Q?MjwWAzbuUvK7GC8JvYPW/sffhY/q4BMo/NvRSYKDPog52pNYnXi4P3HhnI/j?= =?us-ascii?Q?G3Zj725jLJY1Tkn4nJ06hRmRw1ArA5ISC+Sg4Wm4W6+ez231LGsSEUWBcOOn?= =?us-ascii?Q?O7+1A3eXjQjCqVEE0ALtBjZDQAhBhbFbrtFUSifxqYIEL4gwtskYaD/cnBPu?= =?us-ascii?Q?BDd144z2pCVbormwAT5iPDVHldSnAydWrKwQjVksQQ9dS+H/LchjIn4jUWT6?= =?us-ascii?Q?uEO+MBHUy4IB47s1za99Ea/fXBVdOTKysdmOKiSqyrDAHomQCdwj7p+sNXiO?= =?us-ascii?Q?DYfWDyWH0b4mA96PKp9dk8Sy3gEH2uzu4Dc8MqH8Ii0IKnz14qHS/0VcAc6H?= =?us-ascii?Q?2WOdv7wgSAOmJR4524f66UkmTqFBXY+nLOqta9r8wkgDYdTQi7XRuFkMleVW?= =?us-ascii?Q?MbtrjmPQPd48nY8zoyGAcwN7CJx+FYl+hmY3xfUl6ewL21zrmN0b22x+hoQ/?= =?us-ascii?Q?xqk26nMkQ2okYo0f1rjiBsG0JVK1jPxR1BMNO9DzjdPjV/I7oQNFgto5+B8g?= =?us-ascii?Q?HCo1gEIMP7iVPn5PTq9y/sAq4dg4kfhyYIStOJ+ynTxUS6MOgbh9SMWt3oj0?= =?us-ascii?Q?6VKJiW5hU2qxmIAFMZuKGg1TkOgbcbyWO5UNEesUsMMfGoYk8ka0m4ZQIiyH?= =?us-ascii?Q?1wnrInVpre0p3a3o8E4tgAZf4+qm53RJ5XzLmDwo2uc5kSyZcW84T0NLaoPv?= =?us-ascii?Q?JIoqGLyJnzCWgwuk3SFnS31QeZBuzXS7gn1MERI03MgSdoxDbxuhlwnZ6YLe?= =?us-ascii?Q?qoDQ6zhHzXmeJw144llKVFsO8f4DFp/Mea227EOLDfkGzE/OGGJZuCujgTRS?= =?us-ascii?Q?3sPEiqMXh9Zirgl27El5ud/PVsrYuCmZ0UyKhbJP+K8IpdVQb+I0Z97oRk07?= =?us-ascii?Q?NzZ99UYpRorLkNNSd+MhF7PAtvJpmPlz3/WvtMOGlwwDKu2Q7TySNhWg6OA3?= =?us-ascii?Q?DAMayVHYbQhRl1nK+Qw9lqeu9yAl6KBD4gqNSFGA4Hc8ka4w/+csJrFBbalW?= =?us-ascii?Q?nlofWGDb1Bv/4GaSHwEY1/vjVQsB3cC+uvjwU6GmiHQo9CwOh+vd+I8+wa00?= =?us-ascii?Q?2OHQJjo8QXaGBH83oVZEQPzkBealmQbQ/rsdGrpUR6k8OTV6jL++WdKrBAF8?= =?us-ascii?Q?SlU2OVURtQ=3D=3D?= X-Exchange-RoutingPolicyChecked: uswsu3awIkPEpYNYS0/KB/mSKv/2ew3lOzm0+vRYcQEYCHhWfZO+uEbER5v4raY9YlDFNIQlu1j2kukPAK3RCCnVDeo0C8Ptr9bPVeU6jPQUsiqPhYm8VZ0EGWl0lUkVo5dZ/hHEBYNaCU3ElW2nAUlplm7Ul8p39ZB0MElyrryBhjGU+3nbZ9QF+a9bpqD9J1mRJPdIYaLjEDaKLLHH/IzvxyYirxjDBnvIVf/+8dVqjRU99z2RPjNrvX86D7aGnqXOMyuIfXsodzoec2yvWTNQz9uWM20p0RgMMcEFqsYbIMg8I4ol0Rx794ohdsgiKYbFkGesda7yknkzfjR0KA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: a02BhxxWAkPpOMira/jxgRUirezE4aSKmOr5d8B8dG3NS7eTtk66rqsdJ1f9fh7yHvN5T4RaRKuDjfR9em0Q3cbP9CLLnNDa4vZTVkmpzgTJTdRQ6YAbQfaoe23BkXqbjYvMKrNLSxJ5OfeWgHJFs3OWpfByW2KnaFf1wTykQxqRTCzro5Ssqx9Eo8T2FyjhKSyeUj6sQFtrLpjPBbF942y5Hv2Xb1hBaMdqO9iaSQbPQhN9KlS2ZH+kE4tpqu57NZZG3tSqZFdbiZAfJhwA7dZGrkxfW5yddDLJFteIDgIY18/g/fq9ZB7GuWU1VQ3b/xibDfXlMlt9VYNnxsJ+GeIuSMHP6Q/D0cmU20rx0nRz0hw0KXpqSFkngh8UYs+TmzMwpZpS4/tgdjrXnA2Fr0WMr5JJogHuhizoU+7V8FghIEBH4QyjFL9ShoMlCLfG4fkPd5PEoNRgWN1/aXtFGGgRgXCm3nIKFqv3PEvICUKg0Pg28uW1vDrYLb/odpXLNbXWFa6F6hp4Z7gmI9fy+sOUrTbZtsNvmO3ioS5YSdaidIl9CA0D8hQbG1rnMW/8Tb5/2dsW5MRGm/wP3yKelGKJeHRI2+uUPsIR5zITvAM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3774cea2-487c-4529-39b3-08df0ccdf674 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:25.4051 (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: CpwxT2tq33dzzCa4H68heeEG8QxBjvzGmyDxoJKdhT7ZBW6IeXZVCgsq7t6hcHisC5Dt4vuH5njmNGcvuxuAVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6276 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Authority-Analysis: v=2.4 cv=JYiMa0KV c=1 sm=1 tr=0 ts=6a9e9751 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=7RnQmdzTPIgLJ45uHnoA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX60NT0jnTcQVZ dZHWAUp7sdjQdm4miRqxsSvl5An4PI5OzEYa1txmI28C2V+lNM6snDIhzXULQsxNA6Pz8NdB85/ Zi/jcBqdQOXo6o0HbFzt8cbzX8zW1DFYVpUIVX22v/nopzgrLw1ryroN4HC8kg9k9faN+l5i0jZ UMgiQ3/jwPkzfmdzWU5jfTgiCxHtpw/Csszi642MM2EZ2dC9llZrnVWIOJ0u3NLxxsj0Us1gHoU 2pF1Frz6DdvSP2HslOsKjRV57I8/ubBuiuG0myKo8nmaoe7zJociMqpgf6aW5RXh6JgKss9Lj1p yQhgkSSUR9mrb7yH21tNbfOE7zoiW2QXpjoms0z58DkT4Y5B47w+mp4mk37Ac8R+VuGBDSlazT5 Ll2F+PfI9LVs2gPLHZW2qcd/bSr0YeE46eg1h7AyVgnPgALGbIpoxxkRQFdqxodLrMPrHqiYn/S vEwH1VoHiaj1XquN+eLhQld/htW3NPPZMpaS7iog= X-Proofpoint-ORIG-GUID: 9n26BM_uRrn6c7xpj6LeAAjrtiiAaSb- X-Proofpoint-GUID: 9n26BM_uRrn6c7xpj6LeAAjrtiiAaSb- X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOCBTYWx0ZWRfX0seRdPwbUt6D 3CbKOFcTSBaOrTYeZjbMLdRi2NPLXovifXHA/jvOt5veTfnfpUd8MDgJgjJ/VlrspbI5RLBQL0w /Vjz5z8XWRtm6YYegSSV6Yw3krVabGYW61wrgLSPG5cNyEykV8Wa Content-Type: text/plain; charset="utf-8" From: John Garry Add a mpath_dev file so that the multipath disk can be looked up from per-path scsi_disk 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_disk is missing. Signed-off-by: John Garry --- drivers/scsi/sd.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 27230ecc2337e..f3062fecfcebe 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4122,6 +4122,77 @@ static int sd_mpath_add_disk(struct scsi_disk *sdkp) return 0; } =20 +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_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct gendisk *disk; + char devt_str[13]; + ssize_t ret =3D -EINVAL; + + /* + * This attr is for the per-path scsi_disk block device. We need to + * handle the scenario that the multipath disk has been deleted and + * the per-path scsi_disk (and its attr files) is still present. + */ + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (!sd_mpath_disk) + goto out_unlock; + if (!sd_mpath_disk->disk_count) + goto out_put_disk; + + disk =3D mpath_head->disk; + /* A reference to this disk is held through sd_mpath_disk */ + if (!disk || !test_bit(GD_ADDED, &disk->state)) + goto out_put_disk; + format_dev_t(devt_str, disk_to_dev(disk)->devt); + ret =3D sysfs_emit(page, "%s\n", devt_str); +out_put_disk: + sd_mpath_put_disk(sd_mpath_disk); +out_unlock: + mutex_unlock(&sd_mpath_disks_lock); + return ret; +} +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 ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -4403,6 +4474,8 @@ static int sd_mpath_add_disk(struct scsi_disk *sdkp) { return 0; } + +#define sd_mpath_dev_groups NULL #endif =20 /** @@ -4555,7 +4628,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 Sep 25 23:50:57 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 D4F6D46E01E; Mon, 7 Sep 2026 10:52:29 +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=1788778353; cv=fail; b=rWrpJDCPS27QBI7Ms5KQOvhME2B3txV7X0CPIsbR+/KvwxHXSvgeoW6YQKesUD/fv+kv7Zc1fTBC2zDncDL0HDWPirCLYaCCwFZCvepCDxuI9ZX6bZUMNx4px9tORvJmzSI+gqQAqz16+IvzvSrWoJjVE6ERBrM+zWGv9iWkjyA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778353; c=relaxed/simple; bh=3kQ5wGmpiMXbmzYcyoLmkdWJAcvfxQA9+s3fFoZAYcU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qZPoEn+FAYBBRPo3DC6Au/iJazwb44GxNyoX1AnCZJL5Tq0imR9Fnl59G6mjfV2gfLnfKireTT/D+Nsr6o3dCHRgsBPPRlhiZOA2sEvhZS4uoSreNlfF8A+by8xSprbQnLw4lzpQ9mr5W16XYq/EPMrofOIMhAf/3YnNv1Q5NEg= 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=c4T7tv0m; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=iytVOfK2; 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="c4T7tv0m"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="iytVOfK2" 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 686NwXa5204422; Mon, 7 Sep 2026 10:52:05 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=q5+wnWtZksiLnCsRyuF46mtXFSwYP0zk9KyArtkM0dQ=; b= c4T7tv0mrZPxp53lv3Md6i4wrcfRjPGGFE/+fmmTCJhSJCrcGVkBZeLw7WbKb8SZ FEfPbL33EzT/UzMdWjp5FoFLrfkVc8vWD7mFHd2grbkTsTd6Qb3pj2rKwl2x7zIg hIi6fLgFFJm9/cIjVz8VE2BpxhKl55aBwpARMoKIK0iUblVydmvK0UR2uS2UAOkz nN3WqjhA+kx9YAVkR0WyFZItkAmdj7R7u0PxOgYnMBmB+8WKMVYU62fvn+sk86lS /1M3ekz3yt4/d+OnvQygPQLyZ8CxSNlB81o3QhWho2/3AvDrL0qEp3sSuGfpap6N 8hUcRJFYLO8IBqFp8UP/3Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbhuht1n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:05 +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 687ApfQi029304; Mon, 7 Sep 2026 10:52:03 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7aw8bdt-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:52:02 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gzovI0hnK2NiXIdBUGufnfmRgwxXY7BZ9R8RaFBODVjr1sZBxBfh1qXNIp3KlultBSVp2L4+B0YSa5nx/b3z2zV+jsl69iDmH4tKFW+u9t70S/jT/w+/trj83ihSP0EVK37At1Egli+wRJvQRNgDmTsu74mB/pQT+iJ8MkM2BBS1210YIR35XvSIRzBj/sz9v4k/e7GFHv1X7OVM2OpRaw2ph3yIR5vIHR514AiRzCHiCzDkjfypeMcCI4w9bNlwtVwa6AegQqoN0V8GO/u+ZFsoUwfxYuYcF7sp0p3IagvnRBny4BqeNQTo4gM3B09l4eCnC02qB/WaeoI+hrNw6g== 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=q5+wnWtZksiLnCsRyuF46mtXFSwYP0zk9KyArtkM0dQ=; b=sYeAvbKdvwRuq0xLZZb7N66scFazbcz7V4R6nmhxkFXUb3aQqOn6ppWH5GsdD+I+pi7kI4ni5LCpQA5YkKiiu8Dfs6t63CUlQy4TYVIImOPeT+DD6J/B7cVgDHXUCttxieDRMUYFLjvDM0INACll/Zlo37d+QhBdXTxhbd0IQQj3nC5Q/l/jO9PHyg8fIXWRr4tGMnTYgou8tKFnOZB5vYlpVWZXuxK7ERVMvDS1wCgNgSGv0/nKAr1aZhG+9BKvVTafYVB2QdjQhhQvnXHDwrVbr2CjSeUrLVT3hh1LVDjwUALtjk7+vpvW2kDwthIIzK3Gr8WNxbhkSUR8NPfLaA== 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=q5+wnWtZksiLnCsRyuF46mtXFSwYP0zk9KyArtkM0dQ=; b=iytVOfK2j4UNq/SFU8nEqtUe24iqeB7XqgFRIpcTa9dd7pzEykEvCV35tYwyOiiwEFXICzqDS+pF0wP2vvGr7j1zOnQY40u+RSJc5B3ne7SennmKooLWneWm9WBTwK8ig+E10AQL2PUUA0Bj3kE24ytAxUSf2Hy6GrtcjgSzOTA= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH7PR10MB6276.namprd10.prod.outlook.com (2603:10b6:510:210::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51: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.0406.005; Mon, 7 Sep 2026 10:51:27 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 26/27] scsi: sd: add mpath_numa_nodes dev attribute Date: Mon, 7 Sep 2026 10:50:20 +0000 Message-ID: <20260907105021.1763236-27-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P220CA0023.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:ef::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_|PH7PR10MB6276:EE_ X-MS-Office365-Filtering-Correlation-Id: 9509cf4e-b103-4c1f-23d2-08df0ccdf75f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|7416014|376014|10067099003|22082099003|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: rdwAU32vxIfdKPmJFeh0Z+1i5TaEu3YZkSHmaqLfHqg3roKqzt6/KlfuLpeXVGszJrO0HTRGuBKgYZNbruOLom99PxhoF8RjhgDIaumtmmh+6DcduBV9wMWBWHYq4r0NNnhrYBjZZmoofoP0jcx9CZhcdoRw2EFH419FugKL172WTcRs9akyqYZv9Ryb5Gwuu8ytUqgzQQbppv2MVXpc3aiw3INS2RhSKxZ6XtA1DkB1k6iAWrSjj3RMrKVvj9znoXORMFha7a5I2zwEZyVK09eGnViPhanWKwEPL/hT3qGUxaYytipM5qUrIRrFge5As21/dP+UsAu1E8of2xolcfSuPKJr/Zl6Gk6AAutcRXDVl8Pg8nF/0QBBIVMQXqmGXprZx+H8ZJVkT6WcAqcvSr4seuhfaJG6miML8dgaXt4crAFjNL8DWh2OpPcMKndqK5VshuNhBShZa3yFB/ufSZt82624buuXvHIj2Dt3+mrolY8eh7Pk7VHQxw521SNFX7iSasQKQp3OGfaU9hV0/b/Y2A1V/4zEWpciQtwr1a3SBoRQCPkBvPCJtnuZB7W6v9Vh5nQAWSr7mTbVvob6l6hXRovgYx1ayKG5DwY0ixFrvn3TQIMyX+qSyxuxiaOmh8+nnJqmdeGK8jPflDnaPcHZWacOIahppggtE/Dhe0Y= 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)(366016)(1800799024)(23010399003)(7416014)(376014)(10067099003)(22082099003)(56012099006)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8F6lABEzcswLl4Xix6J0Z6ACx1L0p5B+V+WdNyzZ9ZEVdipYt5jxZ4wMNREb?= =?us-ascii?Q?h5BDQMinTxPu+oxPiD5x/mDijWdC0p1ifT3aSuJt4ShTXe6JPEURyu8gDDMT?= =?us-ascii?Q?7KALecJtbVoOZ+RCGoNODRfO1I9u3uPArQ3C0xHFzk+ifsYtvL6XVBM5zP5C?= =?us-ascii?Q?gNt7rvChlLNS+lh6y5n6oSgSEhuVGHcLoFZiS+0azOF3RGNDbMLpD6QKE7PU?= =?us-ascii?Q?Xu5uNLVCjf57Y3q/JShB9HyyzqKjGGATO14g5Rx7qhefKSJXBphZQ03As+vJ?= =?us-ascii?Q?PWb0ahmRU4EVMf1JFKe2zmyyEZhsWdMQqZZkyzF7tSTWHw1TsL5DRYyW1L9G?= =?us-ascii?Q?2cViFwaZOC/UytX0Eq9jy6M9q13C2nX8jLyt7TSXawqiEar9DuxQ2s4mmm10?= =?us-ascii?Q?O0UDfA/T+xqPxXcuA05xxHmIiDuNMj41C+j329H+2DEHeVItEz57sarc5MWk?= =?us-ascii?Q?JquyTBqonVr5oVUTk5zD5V6e6Ntyh7tBT39pBAaEG4DpYZl6Mrlq4wS4CsKt?= =?us-ascii?Q?fAS72joX70jFPTPGV6wczFRt7IS8KuSjiXDV0injWRAc45Ckb1A+UPf4xiWI?= =?us-ascii?Q?okN3AgsFK/ObZaqWJvu5KKlFPXg0nVLb+z1pv+9JmzSny4jnn1HEHSsD54BD?= =?us-ascii?Q?L2MFgetP0TslqbEQ4q/ipy0Cq+mzCkl9LkR+rC7Te2bJSfXPXDKPIjJc0N3b?= =?us-ascii?Q?Uj0B+faX9tm08/JpKLeuK4p2pdpSVxTrYtNz8OBxaEZsCC3fVJmqKxuJ0kFi?= =?us-ascii?Q?eL7jsgR/+ChPrfGOHG3nVluNefdbLeYpQKi6gj7E9woA4srvbX3vtwiUw4wY?= =?us-ascii?Q?o0CGDKg4pnnFuzrSFYdAfgsqVE/XQpMUXMONUctd+fBeROsCaYYs8u17WjPl?= =?us-ascii?Q?rHG9lgL4jp2SryFfS5U/Hiix3i8PdPWw6WaGYhoSKVI7QOMTCbbevcBcT0rI?= =?us-ascii?Q?/8FNg7kTUmXnmO23zlfEe88Am5BQBclt1Luph78HrBKiVm0QZ3Uf8f+fYKM4?= =?us-ascii?Q?ga/Us7N15ylBFHIl5HYMUJS8qbS0LH45i54TFySGAeNj6Qbw+UCgd2ypMq3A?= =?us-ascii?Q?1OhiAgzKuHh2YqiDeeWK2W/YgG68SHW4to9iQn62NnCt9lnEQ0pup0N+wONX?= =?us-ascii?Q?2rbovNqDL6zv70l7Wztlhp6DwwupFxqLn1cUa/zSyiNnqgBApVz3qNj8AMEi?= =?us-ascii?Q?6WT0hmG0aAx9nKgOF61IxiI1tTwDXBpd8o7dsqnHT6R4GRiXdZx3HrDe3jCo?= =?us-ascii?Q?p83MlzzDvqGSDhtyHcT8tQ0lMnOIHHgMc2HENgReOWpet2+blBStTD1WH3bD?= =?us-ascii?Q?iyE7L7gThyHoW29ZO1dLcWPbuedIuHNcKDs9TLKrPNEPCi9r9CzI+H0kZ0aD?= =?us-ascii?Q?lN3ibjhIPMGIGF0CNXDkTshxA2qQeCqYBRaycuWHzWUdShAHaRVhf/a2AUki?= =?us-ascii?Q?cjLuk9pV4+EvxRe4kBJC88MxCGyfemmduhAqad+cFrgcZO/3cqZtOpdN4QgR?= =?us-ascii?Q?KJIAlGnoCISWJgWmmf2+x02yVdRjL10R0T5/IwaxKV9ulDBcnWXBM/K0BsYK?= =?us-ascii?Q?bTDu/NDS54FD3nZgr68LyYXZPhU8u8nZyHYvPWUFP/5d8xWWyQ7sGH6XYOK+?= =?us-ascii?Q?XNSIZyR3/eVGkNwB5gjblU5VkkgOW3nebGvqHmn87qJHGFRXiAEkVkbqFlde?= =?us-ascii?Q?JsvMkw6hor3wfcmQUCcOYO8/pdkAIy6e8zsDDGgPFfxvtjvGXRzr1oM/2Tuo?= =?us-ascii?Q?Fe2KDiEYWQ=3D=3D?= X-Exchange-RoutingPolicyChecked: n3m79muPCwk4jALHgPrlyq0xuIkYBOs/KP/YDiZuqTG2SAOtin6mC1SSOS0YEnRbgZ1Z0Ru87A24sp0p1026UrGnyAPFoOUXs8jB5UngD2F4eoCIbmvP4Vzx79i3xuEurg20JrT5kAA0yakRamz712qDVOKVU1rzAqEEe25sslClCl/KQ2XyW67AtcGetDz8vBEF+QNSYpuhmnw2Zpn4XjGCBruA/1783puirMWbn8Qk+tPDrzbzA6aec7Fg+oOazJGOFxEC2672M4yF3OXaCG6hd2J+oP8QrHDxIhUanX72earvYHAQInNPzGFVb7ZZI4oUFYRJdM5+o5EAzMnBUw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 5HxXX6ZhjpHeQElgZZuyca5aqb1OzZXVjq5rgM5pYF/C0wzUAAeZ4NcRYj3K+Vb2PpMmqQGaaLO7iwTOlcb8hkZbnH1E75T6Ca/spoFZ0uJb6hE+aqNDNWaNYhWbXWVX8ySIDSiIT6JVm51ADKUnQOkIM3ekQRe2g/s5Mxm7kvZA1zVMnHE3AOB4R5+mJmUjvRTTJXHq49AF5CawEblXBTIigfbvaoQGxoUwk2elocVjV8N1ZTDNM0Z6q/gEApNHMkOn3Fj6rncToM9ecHcdc25ntACtRN8QgoXflZRVFQ9g8dz6Cn9FDWJeni3HhgvOwcn+QX+OzIrWc/91zUwhl3zkBjkxNYQv/AWOjYZMeRM3PtZCgGPalMcEt9cqWHXbHnp3hXlwFID6atcwIjLStFsQI0VZUgtoVw/lDcASGa3w2KpEb7hfHCtj1kmbtlT7DDgmmePWEasWlmNsTCBkp4lf80I+p7lY8UB3iVB1J3HDhLv+L+U4n93PKMZd/y339ljDVaa3Nm4cEChJkezOu3UDnE/RWPDt+Zw3EqKU2IgIR/BAap66cPz1+zHcKgi7Gtuma4BW8lcltiN2wHbu/q0hnbkUj+Yz7jaIjwo8+E4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9509cf4e-b103-4c1f-23d2-08df0ccdf75f X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:27.1131 (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: Du5U9NyPqobvMRK4zGREvO7BXEtngajgU0nAQpaOaW9TUIPVWf9Ut0nbpmD3H9uEajtzka6Z/L3ot0uou/8bmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6276 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-GUID: _8ADFQZKzdhHfjGlPpuQiWxkMv3xUmdV X-Proofpoint-ORIG-GUID: _8ADFQZKzdhHfjGlPpuQiWxkMv3xUmdV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX1omsdSqX22Lo /Xt3NCDUxsdlIZwq9NCE1B4ozxwKMW4TDvUdQp/K7E9j1jaA4s08QPXpPbBTKZEZ/C0ECiCjzr7 p0MQihdy2CHQLEYPQ4es5QAOtxA5cMFIS1sHYgkt/Txo1ObH+yPY6i9g2sWCB0AeSn4sVGsJF5M j2VHPWIq8xMXdv2Rn1B+vMmcj0Hs+SCtkdxPcMkOwXiZgn0FZbf2U/rRpqC1/qjhDrKFQr6YhMN QpgwjrevvfNE+d6vVmjBdRBKVU5/+z5yxPO4Ru4YBy8MlM2aNFpM0/olHmHVTp0K2B03NJJV8rU 9Z8nacet6lDuQfD98uKXV3HHAnG6N75xLoqrQt9EezDBdrrqwEWXZ8DMpILhn/+/DetJJSSAT93 +KvYWS/5LMNXlVwmnjDJNbyja3oJYqOz+9xWsGQbrmucNdg96EimHtBRPtsIb3ZHe+iCIILLN2V syxnJRbFWeCVBKZIWt+XYG/4JzHmFZP2GtqPAsw8= X-Authority-Analysis: v=2.4 cv=S4HpBosP c=1 sm=1 tr=0 ts=6a9e9755 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=P2_R26dytZ8aPJic-48A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExNyBTYWx0ZWRfX+tXWJ/4xyJvz oFCOUgAdbsFoCKFPtnSbqVEEzyPkiG0DRHXR/5hc+97x8UIz8EoPveSPJ+36qKO380OfJ57fVyp sMDFXnbPk6yAcI68Tt3Q8X9p7RlgBda7aJyEn0kagJMxll/qsnXr Content-Type: text/plain; charset="utf-8" From: John Garry 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 f3062fecfcebe..bf02f14705518 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4163,8 +4163,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 Sep 25 23:50:57 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 4F47E47277C; Mon, 7 Sep 2026 10:53:35 +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=1788778416; cv=fail; b=NBbzv5uw4pUOosbQ1D12uDF2zprViv7ic1bznh2eEMMwW/N2Rh7igrD63zzRT+tWEtok//LmSyIghubLNleYi2yiruE+1ZcpNB6Vo+JH6F2NtmKF+WcRDuXpREigesVKxICLa/FVWVMeNfV+gqf8YtrbbhGzEI4od7p9NxqV7Xw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788778416; c=relaxed/simple; bh=9p3/knx9KduMdJ1DsS5W4EPtsZA8FmJ5liztQaYpdQc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=I3kxI2HKm3UP8Gs52nO4Jas7EfAepkghLCVICK2uQ1NQepBClBBKvEoMjjpBCApLLHLLogp0WVZmS3mhpGVupxrvR9H8AVZBRaqZKImxm17A/2grZIvegj+l0VVZUPh6etwPK/KZw+zOXJXkXB9l7HEidASh8u0+c3kYKuAzN5g= 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=jL9W2uug; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=fIQAp70h; 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="jL9W2uug"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="fIQAp70h" 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 68701eoZ219204; Mon, 7 Sep 2026 10:52:05 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=3QZbNYPCqDrY4OLQJMMeFe6hTcT3gnho49/4570fD/M=; b= jL9W2uug+SeWQc7GLN1Pcza/Z7ly2ezip23kZrTgu9S78zPwpY6d8RsgnK+chZKy N34FuLS1E7RBsCj2ime4TvMk4OX0tK8zv/cWawNgFA2yAl9VWNLJCVkLVp4UT588 cR9qgOODxhU8TaqeSWKX6jc/6/P6WektDxipTWElD+KcYgZylRgj/tFiz2aURSr2 kNHAW9MZartD8/VAZ+TZbPgurE+v07kab2pSecJPyleQkdBdehd5nuW3dGKtnSpf rWHgFPeWsVEOSCAAtz3wpVVNEBDzRWNjvesyRIH7qxefwgsgEAtO2WOXMfdS4Ar6 SFbdz65a5px2CfUhykz0zQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4ggbgvssgj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 07 Sep 2026 10:52:04 +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 687ApfQj029304; Mon, 7 Sep 2026 10:52:04 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gh7aw8bdt-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 07 Sep 2026 10:52:04 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZGa8MClV+twpPAPkv3LOZfElnK2vjABvkIpsqZ08lXyv7ktU2fT5XJ7czvR/cdjQpwoPWBDyQxKy7fkgHvZRKrHCXj8lDxTkxlfUaBPSejLqNvBglMjoPZEEHqXcA8SxSr+ChibtKT4lX7SCrqqbfOa4kgW1vMTomIapycwfqrNCEu3201Wk4kEi+M9uAFOjOhNlif3YBiRXJ1HCfLUmVdJR42C7hOui6nP0IByHzMz+mL0/azJKZnJQddqzo4POHRRTgGu1+01gGWKoTxc91ey8C3zPOb+OTjN70kwTSzD4TjnaKpojJiEJKaiKA1Otu1djuXg7BFtEKXLUGFGFdA== 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=3QZbNYPCqDrY4OLQJMMeFe6hTcT3gnho49/4570fD/M=; b=mBELHM0gBXjOE0Hdc0DI6rkIK56Wc9tGDuHcjdXxs2qaR3h7igskZ8qwcJ3g4AsRkS81QVHQW/n4tiMjb0m3QarZJrhxHh63rmsaWLI7AguHuIv86NUY+qbL9pPgfebyXs8mqqv+2DOiO/HF/H+gG/sbsw4n699fjOf5DZhwojXtqildp8tSRqfXqAnA76gnT7Wsi6/xQdpxC7ws8EEFHf1qnDZpLY17X+zpvLikxpgkXZ5OzuvBym6WR1IKMZW8p7q4vyTrI8VzKUXFaPPfv87fi45NHMm7Va7H8ONskmZXpTggKev4zF8d01GIqzW3jH6Yf2mP6SQYMWOswCp6fw== 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=3QZbNYPCqDrY4OLQJMMeFe6hTcT3gnho49/4570fD/M=; b=fIQAp70h68Cftw2Ku3WMT+N4opHgSaUZt8R6CJSeP9YHAU+WNj6dSIfJDHOECmKXSZjb7IxpUPXLiI+DGM0ccmXq8ZSG07BfCT4ErHyg5EVR3ptu0C7ZF+eubuUAwMKc1CTt68RfRGGiRl6Sb6wzpV6REpyzJInjvie50WZ5Ops= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by PH7PR10MB6276.namprd10.prod.outlook.com (2603:10b6:510:210::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Mon, 7 Sep 2026 10:51:28 +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.0406.005; Mon, 7 Sep 2026 10:51:28 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org 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 Subject: [PATCH v8 27/27] scsi: sd: add mpath_queue_depth dev attribute Date: Mon, 7 Sep 2026 10:50:21 +0000 Message-ID: <20260907105021.1763236-28-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260907105021.1763236-1-john.g.garry@oracle.com> References: <20260907105021.1763236-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR14CA0033.namprd14.prod.outlook.com (2603:10b6:610:56::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_|PH7PR10MB6276:EE_ X-MS-Office365-Filtering-Correlation-Id: 593c1f2d-298f-4e4b-cb1b-08df0ccdf848 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|7416014|376014|10067099003|6133799003|22082099003|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: /UCvutaUQFUYIu58ZfGyO3gMqNj0Bec7G/jzS+Yqfm0txpS56OJednqUFsowR7XxfQMOCAyOySm28I2L8UTv93Zk95896d5PUZkkFwVZBZGjcYlQ2KRHj69ta9K+5vxInIPRrhUYlgaHGaoJ35zNQGGziTB5AVt62wHOSckkJiVJTzR3Xj2Wt3DwPYlhm5Y28NUfCn8ORO2PvmWs+TERopRT46jhvnE6cdcq6ky7DgX9f5eKyDocdzzi53t6dJBrYHmoiZkkANpyfygPbrGzYhp8pFkzEkIq0FcZrQrIA2sQCjhpGuw3sJ9faP1ItIF4S+1AT1arPW8ex5oIFiw9FeRnn2win6OPXY4Z/7uCpTvEy5X1R1d+O0aSOLM/LHc6Vyo52Awxxdh3VOdBmL/wG6Bk1r66Flgs9g26sctP602KQb6/jcI7ToohofL5O5z4SpdyvUVjzB6ibnHWKYy54f3+hlRG2jc08DqVWgsAAWZo1lWGsXsAEfxKlCfegVmaxCYWQ1+KvRUDqgWQ6gebyJ7UlcLAJbBmOwIZoWGhHDsnpk4o+NqK3/UqXbRhlKVe1/7HAL3W4Hjal6NAj+5B7td23P0ZjUFSfLX6K8FMHfnZpK0P9lU9/xeIqdHN7eI1fdEptBAf4f2OkiTiQOWiytvxVlQnzkJsNu1eONgPItg= 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)(366016)(1800799024)(23010399003)(7416014)(376014)(10067099003)(6133799003)(22082099003)(56012099006)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iK74lEJGzurhV2R8imA+mS0Adh4qqw+/tuiGfXRvTx0aaqWHzyqYQDAQRUw/?= =?us-ascii?Q?0Fku+p4L1I+IIQLD79vM917LlrBakBF+YgdYzIHai/+XgZwlU30OqG2EMPbP?= =?us-ascii?Q?0MrODh0V3XWNvdf3raUW+W8qy8dQcd3E8DAvjlwQfM+e4o25rgzkbc7OCKNR?= =?us-ascii?Q?Anbx++HZ9ukUc5oAIazYKCmyhAqO6FMKDMtIgWL9K0QNlnuJfuIPEws6qcC/?= =?us-ascii?Q?BLxH3cMJmw5tmGPU/MM6Zn1vKBwrGtmvJfJcsJ/GWl5eetf1krrxaIFZ3vCW?= =?us-ascii?Q?N3jWzDj/vpwXCVwGOA3UnYUE0TbPB302coUWpFFBS14JhIlHKiuOdw4FK9j+?= =?us-ascii?Q?I0Lbl3y0nLEUtRWMphweRD/MABLlrgs/GxleY5IXg/9k5Hrk4U4L4Bje3q9W?= =?us-ascii?Q?uqku106b5NmNgRXTpHhfrz79AjcW6oSVONJYAmCV+XEInZa8g04DzVdST+Ri?= =?us-ascii?Q?gO4cTBcgJJA09Hzz7X1viNvSdNqEw1FgTLNHu17HEpqifXAUz/rqYEL2O0ZA?= =?us-ascii?Q?5hGs8auegUt2eXDQ1kQgReKjv13kxeyGpfE/B69MIhlIgTzXQECwMfnzVdyi?= =?us-ascii?Q?0niTQtrQuOsZM11lrc93Yp9IC/W88uLo2Bj8ws6GcAFUDLZtJUZvVLARfcNn?= =?us-ascii?Q?k4w/lZXduCnq74/L3hNqbNJ/OYNYX3AE5gbvqhZtL4wuCO/7Lc42qVmgS8w4?= =?us-ascii?Q?j0ZBsRuC5GeuPYm4DSTYyn5xtI1ANF343zBHXLeBEqssD/Y2NAabhc2uvizt?= =?us-ascii?Q?VMjtuJmKGA825YQF1mWDN2HIi8PjI9iIvrKNJT+2RVYqqQl5NSjrDJcgjyJv?= =?us-ascii?Q?HV0JeRze6VzlATdqssU15by7XQcb28lsl/+c5/rwqBCqP49xY6zfaoXRcGjf?= =?us-ascii?Q?vLqbdvkAJ7AFpsDjV+OUioh0clGtA3dSgd8MTXnuVuH/imFvoZrXK2LtrxeU?= =?us-ascii?Q?Je6++juDwBSx0+0qz8ClEqZfQhkT45/7zmdBam0seCmuuZmfXm7JCN5pw2Ij?= =?us-ascii?Q?Va3RXWesR0UDfR3gPw+fLvMP2ZbvtQRI8jyaSZb4pc1uEeZE+UQQY+efwR36?= =?us-ascii?Q?kifZ0xaCu+aVsHTslVXU4IuUDKV/1K1KvSTxPzsYeW+kuYg5F8nuoGTM2jim?= =?us-ascii?Q?opPVG3dUqdx1jBee0LaZH2JMKHACWWBfFrKKohS50J4hP48NztIWz61QXWEi?= =?us-ascii?Q?OdMwt3clBDPRbMrWpPHXOtXAOHfvjkEBem0jb4u4+FkPdbzm2jPh/XuEXcTz?= =?us-ascii?Q?Qe/C43Xgj7NnVDnWSBzvpnfk4iTFahMTonRc8CzD2uXW4J29zTdMgkuvmJlg?= =?us-ascii?Q?nadIsZWw709p0iMp36wVLr+UONcP3kBvts5hvXiF9GtKlkM8j2w4zJt45wUq?= =?us-ascii?Q?fUzehyJdtNYxetZzxHdXshMqTvo/h6siARwkZm+VGD/4U1tdooFKOXZZJDzo?= =?us-ascii?Q?ptlt9g4gRnYo8jJKV73xx+sQAxcQ5wuR3U8/jqOt8+ybqKU8T3Ng7iTUZmA5?= =?us-ascii?Q?nH7AYALB59kBFMix3edpY95CzxAPFy+SsaeIQK62NlNZbk11T+GTWzR+JVYc?= =?us-ascii?Q?GmJqVugbArIcIVy/gGpNIWCzJf/FSL+O2QnxmMAZhDbpAhq0HF+QwFmc4Z4M?= =?us-ascii?Q?cfVbquf/JB5iGNOHKHpqWpJ9azO1EayY6sdt4y5nb6GgrdAygE8eHh1wyb6+?= =?us-ascii?Q?1aGGM1fpWgzgj46JWf2ZTxv93W5vYK9tq6OeQEU8KqZsXseUMyNBpBt60WgN?= =?us-ascii?Q?3owZ+fakCw=3D=3D?= X-Exchange-RoutingPolicyChecked: GT7iaEacojFzkAcSq2hlzBxbqOMUMHki4V4Rk4kfXDGeCWq7fBSFzkFZ09wwPO9iQaU3QRyn5i0QQaUoiZixFOf35R1gKONWIKIbH9ka7u+cggXlSUzxnBS/i90+Md+rAFufmTRWs2nRSwlg4aHaaF+EMqHGpuY3/S9etyQcI36X8oifhoCymgcp/EyojUSi8ZsqRR/m05GP85M020mbRvkvTQunquhQ9VWK9pAnLSMxC0Eh1GVvNZRgBuXxXRSN8QW6eDmj2EvEz/Zqkx3gDa9ZXULIY9VkuCcY2E2z6fcZcE0mSYNtWkaV3ARlQbxbjmNxSDeEpGKsb6sIPQ8hfA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: GeYD4AlPocojXJEBWt8XdNnBp8ApP3qg/Nr05RX0PlrOdiPMw3O/MW24n5XxhauKRET7hvhpr1FOOjb/b3HqSlk/IWGWJEt5k3QUEXZmBrDaR+O5EQOmfwa3gpsOJAsUAiuCLlmybVAGwlMs56vXSbtUErsZHjTvI2wab9NNciDWxht0WPEVjDuTZZzKsZyuibloseHh9jKpMEtoiYpRJBQxhOc7u39u8wO/WIJj95C8LDi3fk8Y6PUPdtIBt8M0zQaKH2hL/VXW3onz/DHu8Hi/YMpyM++HZLJl8BP1dAliNvz2MOWe4FP0ot1eTHLJ+/Uqz1DTJUavdaQhK2t32u3yJ5fHxvy873mVZlIbNdN33YS9oA83XPcbalKDfz4JZAIfw/Si5RD/I65Be4swyX1j6RdUuCRmEccFl+Z7umkTCFaOBE/rUBlkeyTYPlfIIw9evUeTKeUTc/uZVUKhpxvBUteML5g952YVybhUBs9rAjnH31gUeLTtqzlc9lyU1h+020bWcb5VSb2SLQRaZojJu8hgVNTkMaG2h2u6/9Da7PuX6/bg7d5Ve3h8+c5C6P6CTeTNwyOdQyuR4AtmrGCXKbqF/SUuNhAtMEcSPSo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 593c1f2d-298f-4e4b-cb1b-08df0ccdf848 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2026 10:51:28.5019 (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: +REfSlB1MAXwfziahbEfJi1c7/2os8vwHrpXXr2h++c73NWD6kV/cwhs9fqVEzjr+kNzajIBmxtOs/3mZD+6fw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6276 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-07_03,2026-09-07_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609070119 X-Proofpoint-ORIG-GUID: j9RR2U7YNlKS67L9NEhfhZHuTbxP8NXL X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA3MDExOSBTYWx0ZWRfXxiEjsmvRuZit 5y/yEotVT6Es8sOwaGHjzp4XXaoZw6X5Oln7kF80q2l0JpI2PNTgV4szrFbSKGV8ssgk8fLKiIA Gxqm8p/1Y+LEt6k7joczLVhNAAQmsXPzg2i2AnOwirHBOY07SyWd X-Proofpoint-GUID: j9RR2U7YNlKS67L9NEhfhZHuTbxP8NXL X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA3MDExOSBTYWx0ZWRfX6NSz0ofFNx/P RpZemZPzhrJy3hzbiUkEcqlwQNvh8BzycJ2DEFiQKAaDgKpnZic5KRuwhYSne2Us/I3TcV6SvZk WYg6eNRXq+lVfvi1EEtHLnDbu6NaIP7EeameTd0c9+09MmTR1Dw+45y2w/A+53N0apdGIEUPAHj KJji/Raphg6HziH0VFVX/3518Qh2YEpSol3GJbCiRakSKOD2C4bOijSVN/KZNhPzAPfzvCNtVA6 jDmn/M6g4KbKx8vWnPVdlk5SyIfPhbPgBfHQrBdVDPEbcBq1lQnBvj3rwBEyqla6qIA/pQ+VSqt 92hPJZ7wUwNJ5DcB9Nzozg/AEPvs8pHf8SDD06sclOpLbIiYRFtvJuGCmEjh7JWhTngO51oHp7z 5ivHxR2vn7VhTe1MX4LtoDVt71Ti+mTHwWrvd18fTYqHvPS8Rff3+pj64Ge2bKyzqKdJYFsYs6O ZLXn2HFNnbEvq4yXuKvrjh9FSlrSreaUeGHukO9I= X-Authority-Analysis: v=2.4 cv=Td6mcxQh c=1 sm=1 tr=0 ts=6a9e9755 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=bA5FzAUjrTEoIiOIIUIA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 Content-Type: text/plain; charset="utf-8" From: John Garry 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 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index bf02f14705518..84f17285bfa56 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4176,9 +4176,28 @@ 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_head; + 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