From nobody Thu Jun 11 06:59:51 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 1409C3FE343; Tue, 28 Apr 2026 11:13:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374808; cv=fail; b=Hrk3AuzGhi5jLJpkLhA33mv8FGjVkG/29sjRV/bQeCvoiWNJeCjCFTkN4MFQRj0ZF+KX/vzVErgcMuZ1/aJTZhBRbJfkTCg3CKzwQkkSge2xn9VzdfMQOrw2p+nePuaZDKWE+BuoVWk90DBcd9fpiRrgqhyUgPTMEaZYwMgjXUY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374808; c=relaxed/simple; bh=ZL26Q6SDTdE0ilBFXXYJCj2ag/SWenr3ooL0d8xLsws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bIRuyGEvpG7m5dA8j6VzbMe+lSzyU9ru2TrVNBZ64u4KJAkUHXz4nEhmqz+Rvb6D6M+lgIjv6YPakuWVq0P53Htw5bLC8hnnT/nggjraZ3yaaSddsuWq4bcs+BY7StEePtWaGbmNxWDZEjT4AsXPY6XicpueKAbhMBLfI2nXepY= 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=i75fCh/e; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=i0gAzUoc; 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="i75fCh/e"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="i0gAzUoc" 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 63SASLeb3055306; Tue, 28 Apr 2026 11:13:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=O48Kxx+EXhjKmVye8W3BQMnbUeunGyKF5mimDdcrEb8=; b= i75fCh/e4fXc7NuCnAKqTX9LmmYJmuTJYALs7IhJFK9dpEqQ0M/ESUKWQNMGjx2u uncj6GNRpUFvKrI9rMhyPH01vTgaPjXRKmFK6Bfx3Iih0yBic1rkpkHVeQ0WF+GS nYl04zRQw0F4372PANDbK4c6tTvDq878aHQO3yd8+PIcxDNqjjJxKnTJDbTPB26h uauO93SPIeF8Tox1M7jxna7dPHXrDx+886XrgCy8uqZgYt2O9zQme+FXYySMUBLK srEbUHA5nHgZqupPmjWJQ7WxWSWt/eNViuw6k6mvCFbcA3zM9SCxL1d/S3vxLruu CDjOj+0rTp1+uDghhOVTxA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drmd5yc01-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:09 +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 63SBCQ69025730; Tue, 28 Apr 2026 11:13:08 GMT Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11011057.outbound.protection.outlook.com [52.101.52.57]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2ckht3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:08 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x84aHJJeGHevzT+5bH7kM2FfQNXDtebjvowfORHY50XosgOL1RIJrcp8HV/f8ugyYbQsFN6bilbIqLs8aMgnzUiSCZIJ2waX0yW7TpZHkzUOphRcsAtcZbVsHgDt2BtJsc7DWBzEa6wb2MnIKB/C3+AV75BmuxLzK0umispoG7wYDOKAqU5EXWOfSWSpMSO0Lq+ULhStIIKfbIFPoF8taX8fBtX9ao0KYngrTwz8BlsuQbTlkv70qdaTMvxlTNb8U/F1rO8qV96rzALGX/mDgKkMFiU24YiTgczQGRnzjpNvIGsHda0AtcJrkEzZVj6p21HBij5w/zxCQWSlRppZRQ== 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=O48Kxx+EXhjKmVye8W3BQMnbUeunGyKF5mimDdcrEb8=; b=hwEts+/yrIv0lYbxT69TA9b7dXbbvBLHp4pbNZYelnndGmHVk71IUP20mYZlvTVz2UweBgXxHO4JXQCfHTU61IwCNQBNNCniDjIw0ol2si5D6N4ZW9N24yZvh0L04+B/VGZrPA7uvGz2prCE5TgOZdKxc8+a9xcMr1E3XdVN9lpSQAvPfp843F2Tjop6m0nMyKEHFtC4HWrWBn6Dd1MwWLQ/rhoglBwJ/QUi5OyLrBAjCP8+MpXsCjF5SiJxHZF95pccFrBt2aj4YJPA2i3mklKIA5ccVLJ+dWpXsKrAsGyjhHGfgKjg9ZMUKs7OaDt7S/stpZYvnIz+f9ee2iSp+Q== 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=O48Kxx+EXhjKmVye8W3BQMnbUeunGyKF5mimDdcrEb8=; b=i0gAzUocrRbeYZEJaWW4nTf9XxWvyQryrWPbYw5cdyq8DZn68+VFSyWd6KqYLzHUaeqZv08f4qLhxxsMsShknFDRHaztld6d2+3Ql/shdpvWQWSTQfUNuOakLGCXngBs9VP9qegbECOYnyFTie4jE76k8NtVa+yF1cPsuoWOCR8= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by DS0PR10MB6222.namprd10.prod.outlook.com (2603:10b6:8:c0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:05 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:04 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 01/13] nvme-multipath: pass NS head to nvme_mpath_revalidate_paths() Date: Tue, 28 Apr 2026 11:12:44 +0000 Message-ID: <20260428111256.1778475-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR20CA0024.namprd20.prod.outlook.com (2603:10b6:510:23c::19) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|DS0PR10MB6222:EE_ X-MS-Office365-Filtering-Correlation-Id: 01c2ffdc-fd9c-4b42-58bf-08dea5171e6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: xi6mvr5vyVvO/exDGthrVHyOpPUPoq0B0W0R1NtmPu24o8D6IFH8hsuICMWopUks9NkrL8cwHnW2SGgUdZs+wkl0StqeH9ENHO9t0aSPfTHJ+0frravDm9ZNKGueAjbNdUh6EXjGdXfiWn+EccC4MEiK4rLIt+UU7X8Pi6ndt7SjwAkgiQrUXtPWR6aCE3R5FCfy8LlRfZCRk4BYVTFIcOg39jLkkW8TPTGiOteIFwkYPqw7fwoVdWmlrnKryD897xjEfzb0u25OORs+H7O3X2E/ofySofodgtjaAYecX0V4G16lte0UDLkWAVzXyoF2OfEowCQOvUDBXQ8Y05c/9jIC68RnkIO+naq96BDK0vgnrOJttJegqiMxGCXzbo8Ilwb7T0AetIVzWWFUF7NLI5rtiOEtSUVeH81ulV+qlf4OjtNijmb3BTiJHG53CNn7QJi5xDmwkZKq8CQ+btRrKKnd2IORL0fjZgN10nvApouL8glKlPGnz0P1YPqgNTGtal58X2O11lDrnXa9BLzq7byeEZ/50zvOSNqH1LfmKO+sk/Yl+0vly/IYiB/OU5k7AE16d/Kf08eHkFIR6aYJkA/4x/TCL2qjYKep7sG8yHFt23rpg71G5h4cqFFrcHgmXe4d5av0pTVwOnRBsJuaN4SWAGy3YHfPwN9DjTRlw+oRrqk5MIBgM4Gj6DXGqpBmm8YcFc+pfCVhNfmFcxmS4JamFg0SvdFPQ77vApmgNaI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wNSpV7py0OrD9ULuFu+XFgeGAFjOJVVhv6PCPLeniJH5n1O11L85bZM2GMwf?= =?us-ascii?Q?6oJ/p/M0penoTdmFq6yXVBB6l3RZD108JiKdGMlvhcLTpBiLmr+Z+XGIeBfn?= =?us-ascii?Q?7nw7ClgesZH7gIW94A80z17AWTlcuId3qdRU5CjkLXm2yKRWAk6ZnnVnY7kS?= =?us-ascii?Q?4kM5eQCW0BcsAJGoV0AzFhDNfaFJxzCV3hhE0FSoBjZXopDxTg4clK94kIcx?= =?us-ascii?Q?kcsYXZxPdXxYfU9JVUy9TtTn1kXqYHt0wZbicKhy0SuF14PvF/1hEENW+PE3?= =?us-ascii?Q?tp/YSTn5kSR0yHBExXBqFmx1rYf/txGelgeCHknJyaUg5P347ztWMC1R7xoj?= =?us-ascii?Q?j+3dr13jX3lMRJPQaWZEwkTqsIqXRG7BMI71Lu8iloRX+D7mXD+AY4Gc1c+C?= =?us-ascii?Q?t5kunobay4Z2jYjqc/gjr2Q8t5nX6uCBdJS516fgS347KwTQqas455FFUx6O?= =?us-ascii?Q?pghnLRg4+fcAj9jKNzeEEu+NBidfi6EbbXgWeWSwz5eL4nHkHMv1TCHkUk9q?= =?us-ascii?Q?hljjvHV9qamRg/IoKvIdWx04Ti5nrDN9lGt/pdwjb1tVuG+rXOjk0Y//GG/T?= =?us-ascii?Q?7v7dLlaP+IzzRtDYiQWVGv5gLSCOvtRhAhIoQNZMUPLKF+kAycJ5hsHOhiIl?= =?us-ascii?Q?pYMH0mFwwBtJlD0JF5H+8tRkB9Mb6TDi/rX3uTm74b0PRSc7QJqSVZCVv5h9?= =?us-ascii?Q?Ld7rElwjSrwwh+4SC/8aQxiJOI3egllC8ciYxop1U3s9rw16NM/2zKxPcYtG?= =?us-ascii?Q?oluHUQrdzdpvlfxYjqEpxChH4TzTHRn0DbhFCTyvlrf3sE/Pt7zCGu15dBEt?= =?us-ascii?Q?hOjo0LpXl8fU3Ako+kkrc8QqItKomGzkQRvTDyIGJW5znxGVxVfaDqn/lrGu?= =?us-ascii?Q?F3EnaCxeyluFu4ynRuk9MrILfSy6G4Yw6HLoWFcYrSCFJiee9Z1CqFbV1wwa?= =?us-ascii?Q?QuafMqytWd12Cgf5538MltE0OUCNM7b5RvLskfC5BpFbNBJschpwVnpgv16N?= =?us-ascii?Q?teqUDPI87jrY7j57FyTNpJoOTCFglMCceq+o0B6XHKXir1NazI9ckASeNx9R?= =?us-ascii?Q?CrzJ0cKcvnHt1PvoS1pm5/xD09AL/tS4xHxzUDHCBckc1rHQTFpDB9QMTJbp?= =?us-ascii?Q?jlAYPvgrK3ZjoUua3O7skFfJQFy1UASA4YfCb1PUbzg8jdZJ0OyLYrn0os9i?= =?us-ascii?Q?IVIhK77EfzjCushxRIPj/F7YnljCzsyK5sBZNcy4SKiwwBEHAzn3bJfHdjDT?= =?us-ascii?Q?sTB9wqSB854wtvO0jBbHdlnDdUu3bAJcFsJtoc7rFyGY/cjm5qYkw83p2Qap?= =?us-ascii?Q?Bsb7disceYe4tOE1QDwms0AFjdnGsSyIserpune+awfGJdhEmbDrJ9mALkVg?= =?us-ascii?Q?XJIgu4T1s9dY0kqRhkRjaItYz73gMlRNVQ2rOxktcbMLIRnMnpTOM+ibJj37?= =?us-ascii?Q?+qhJjfQ/431c/6XkIazs9IMYZqrzgR/IxyF83JYoAr7UFyVQUJ3UA8L1knKi?= =?us-ascii?Q?5tZ01ZD2/QJt3iuQTwjj6g7L4hXkq9Qi2VdXljVJso9LgkXv6B9SCfyeuYZ/?= =?us-ascii?Q?fkMlQcrE9xtLGYojhoIJ5bDrvPClonUCmZqW1ghk09+DelRnUzJWfOrCRb+S?= =?us-ascii?Q?CjAUtXh/C06p27gxSlhqL1Lijg3ytr7qB39fKNH4tkfl9sRtyOnXMuF8ud0W?= =?us-ascii?Q?ktPUFlzzMYKAwXhZmfq9vzXJ0WRogoYY3bsemLnU9ZBLHql5CoIQgZer7crS?= =?us-ascii?Q?0MGLTPJbEc2LiE4Ygt6pjL+tJNOKzFU=3D?= X-Exchange-RoutingPolicyChecked: uhBbBg9kvd4+Ol8H0lKMnHkR1HctD6QuLtq/PxstH+v7vowK4gkQ3bZJpZIAhP+OR/+1O4MFECKAz5h3Dwf/mxXqZpsc4+CiNtzgAkSrPAonsdReufWikNJjg+sHVPm65hefaSxN1LDt7dqmeEAU8zne7JTcLQVDpdsEWV7Xpe2ZTRsbynzso1NYs7RY8lJvCFkslNIAOyCDogAfKEAD78PUy2ACIgjpc57GL+LtVjlnO7HbR7mKo3ksDL7a1ebyb1TKZia5e95AJ5ndavhdmrPHFKbKsLju9PaFY8bKskOdCUUvsD72bep9a2mVxdhew/mnEs7lOK0TSdnbit5M1w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: WV5VOvpmMl+vT0yM3Fe7uLlQQQnGCdn5z0YiS94wEWsejlNEeoBr/6rft0h9l45JD20NQaicakA44xIH7P96f4T7ar/uI8Q+1v8faWUjt7jN/uXFk5D532PNTilLwyxfYZHQXBvYcpdlS2zfIDCqY9Pvhlrvx0B9B52qr2LdISGd07Z1r51gKBkkS/stfH78WcrhIlg9Fuqx3hV6Akyn4b237SOxjYzSeavKo1ocNW2hkDAa8vLwi6MikOWAK5WsGYov1FJeEd87jU5QfsyIqHGMFEE8cpr7wIC1wRrzGO73/btv7MD13LiEzzPtT7PYjGNkAR7dno6+VRSDDevj0cZS0eIlkAmRJ+kBFN+xGzJ9hDJwpyaNyfDnVOeuUAPK6Q42Uv4p3nNIQgjzJl27VGdU8kmWkKBNYCp1v6JXGYnhsPfsUkZ7cnE/TXz3xWGrwZ+hhPOhrk8IHFCT71GzEp5W/+azDJvF0LKT3UDo1ZOGpqNS94qIYlls3bAI0uQ1H+Ijb5HCjBSurzAqWNIKJ8xi/G0FhO1LbqkDPGLi97kZALpuw7/AVnV+64FR1RC39qcD4o8Q6H4wBQT5dh/dk4H9V1EJ4gIOsbrl5BUTzFM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01c2ffdc-fd9c-4b42-58bf-08dea5171e6f X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:04.8594 (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: ufFGgfWLLdVMJrsfDE518wTU/U6D+ZuLwNFa2e617M0cOPEtOkvvfruCFHwr636KBwx/BQC22mjNtGN13dP7FQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6222 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 mlxlogscore=858 spamscore=0 lowpriorityscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Authority-Analysis: v=2.4 cv=V/VNF+ni c=1 sm=1 tr=0 ts=69f09645 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=pRep3gAyX0dtP_3rn2kA:9 X-Proofpoint-GUID: SMgUgYudUrcdUo_mzXJF_Khz66Vk3fL1 X-Proofpoint-ORIG-GUID: SMgUgYudUrcdUo_mzXJF_Khz66Vk3fL1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX/qYsC/PP6NnN KT9nxRNmBVVPiQi2jRZIlBZR5vIRKPEtNZNT4giVXWpHF/W9+9+GRpFjrQuIVZ+E1qz08nSEkoi 1VeZrgcZq1UE15v1ry6t4uRR1jKINskQF0PKlWPPumM0L/RFuu5f3evBfHUXYEujCTBotwvFZKK 11ExlvJnkCoHv2objedBePMmE+yi1k7gTIpaaZNawHe9hWef40QOpEwwL0vYeHE6dTprG1wPI+f 3XJtFVtHLFbhWROWCeJNjJSfUS+8SesW4CdUje3l+U9l6MzgeZ69UhPPb2KbD5W7nkZq0Fsn0i7 vUNACmrznle6PRCA0HPpXxNVqmJuyjxpC9pZmEPHL+D/JwYPZwuxqZ6HRQDiY3kbvOHinB2ctfs ZA5be/3PebHAStQvrLhYTE+UsxI/Zs6ek3L6vG7aJonuvw1G6ATrN9RQ7auS6/N91cskw4dJ8az vTw58fojyN88OkXS0bA== Content-Type: text/plain; charset="utf-8" In nvme_mpath_revalidate_paths(), we are passed a NS pointer and use that to lookup the NS head and then as a iter variable. It makes more sense pass the NS head and use a local variable for the NS iter. Signed-off-by: John Garry --- drivers/nvme/host/core.c | 2 +- drivers/nvme/host/multipath.c | 4 ++-- drivers/nvme/host/nvme.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index d62adebfdc68a..bb687295c2c67 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2559,7 +2559,7 @@ static int nvme_update_ns_info(struct nvme_ns *ns, st= ruct nvme_ns_info *info) =20 set_capacity_and_notify(ns->head->disk, get_capacity(ns->disk)); set_disk_ro(ns->head->disk, nvme_ns_is_readonly(ns, info)); - nvme_mpath_revalidate_paths(ns); + nvme_mpath_revalidate_paths(ns->head); =20 blk_mq_unfreeze_queue(ns->head->disk->queue, memflags); } diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 263161cb8ac06..e00e2842df307 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -254,10 +254,10 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ct= rl) srcu_read_unlock(&ctrl->srcu, srcu_idx); } =20 -void nvme_mpath_revalidate_paths(struct nvme_ns *ns) +void nvme_mpath_revalidate_paths(struct nvme_ns_head *head) { - struct nvme_ns_head *head =3D ns->head; sector_t capacity =3D get_capacity(head->disk); + struct nvme_ns *ns; int node; int srcu_idx; =20 diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ccd5e05dac98f..5de06c016b622 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1041,7 +1041,7 @@ void nvme_mpath_update(struct nvme_ctrl *ctrl); void nvme_mpath_uninit(struct nvme_ctrl *ctrl); void nvme_mpath_stop(struct nvme_ctrl *ctrl); bool nvme_mpath_clear_current_path(struct nvme_ns *ns); -void nvme_mpath_revalidate_paths(struct nvme_ns *ns); +void nvme_mpath_revalidate_paths(struct nvme_ns_head *head); void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl); void nvme_mpath_remove_disk(struct nvme_ns_head *head); void nvme_mpath_start_request(struct request *rq); @@ -1106,7 +1106,7 @@ static inline bool nvme_mpath_clear_current_path(stru= ct nvme_ns *ns) { return false; } -static inline void nvme_mpath_revalidate_paths(struct nvme_ns *ns) +static inline void nvme_mpath_revalidate_paths(struct nvme_ns_head *head) { } static inline void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl) --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 DD97441323C; Tue, 28 Apr 2026 11:13: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=1777374818; cv=fail; b=D7FgvI3yFoIWtIiz1Gi3x0/KoYQn2x9BssTZXCyYhSG0vRDvuiGf6t6wfS94OMtX0UlejBTzSRbK2Ds0UOAxBNjhgZ+dsP8736bYnQcGMBeLXXEayIIz9k0V708s03nC94HoVymnyu9Wo4Mgx88Idnlfah5kJL72xbcGF3o5mi4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374818; c=relaxed/simple; bh=Z0L4x6f6bNnB12e3Uysp+NslMeuTkAQHumN/8AexXoc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=j3GCOVsJfK/OiOkmFNQf0EeSRu9hELX24uu86arHqt7NNdi/xV3CAq6uWvJl20M0YbSe4NTcqne5CVa6gF+0QUhk63jWEE0XgWksxD/64YDcgqsV8Taqo0Ozcxb0UbLPcs7vsgJK1wjsVsAub9HzkpPQrtn3WIK3wUygtkaI6jA= 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=UeWjDeKg; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=VJnad7p6; 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="UeWjDeKg"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="VJnad7p6" 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 63SAZ6kN752742; Tue, 28 Apr 2026 11:13: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=Bp8wcxEJ3ny0t2B2X7/OD77vdcGE9xipuBkypkRIPZ0=; b= UeWjDeKgH3qO+JFZxD0G+rWUogwWmwRbWuZOPvGQZ5UkhQT/vUKa6ZFXtc6OQ65b aETCLHYPjVVMmjIVyLOD5BqCJyAwRB8tMD01vZ81DFmKOIWZ97Ct3xfkpHiLqizf xJ7BjKHyqHNqPkiJez4XzXW/KfTl1HoE8p2eGEQJAfmcwJUVfwVQk2Vxdv+Vudb2 dlxDDn76ObDb3UsY399Jt7YacrqgqA28QPzbyDaB7ntoctwLvdu/RbEmEDWBYf4e RCCBX13/lCj45QYoM/zXBt8uAmM9Z4D2QmeCvlAZbW1laWY0s2zP29lWOthionrV 1GiAteHSTui6zw6Q5CG9JA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drnnefevj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:13 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCjMf004725; Tue, 28 Apr 2026 11:13:12 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011014.outbound.protection.outlook.com [40.93.194.14]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm39e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:12 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h+E4PtJMnpYC+xadgiREOv4xX//XGpc7qN/QU1896yoxdnj0dNxEaE/OmbJqrroVdz2lSb0H88+px3qj2ldP2UN1vk2TzebdSnVgLCnBHcIzwurWTO2s8bwg4CRcseN/kgvznoeUqgprZFRfWAf2abYjQVXLk1MDZJFNpk1sfIpPW2vDpsmmjf/HlIfm1wnEeLTp6yXxz99QFOLlAcf4XpDnaCQTTodxno/PSUCjSCsTDxFaQf/p3rpxCScI7E6Lyw7j+iapSim1M4Sd0sXbvAx/YpKjTaZuwMfkmyUSGa9D9JBT4DNWGKbhPhEdQGc/Wp3gplxCKvUVPuXpPV/Trw== 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=Bp8wcxEJ3ny0t2B2X7/OD77vdcGE9xipuBkypkRIPZ0=; b=U1LO+N1zGtbh8aW5xMeze3XfJAuEB+7UNBCxLz+z2gMjpgQ+whNlDcVmk/Gllql1d06A+PxEZSA4UPx/ilHLKFED2Vbk3dxvLBm+2LkIxpOkeWtAWZFZ+d1xEPT8c1ovpSmLw4gf0dtvX3ipEQt+kRpqmDuM2d2NnA1rvuZu8Jb3b9oo7TZjAPPjc9yjTgdpz+Bw4pT+B6i9atMnJLKeaG3Xq8TigyX3cQrbJ8R/7pUpxX4GhTK/KH9WAZ/LpBi79QhNTfhETrLXKhyIXsRgw2Pty1GEJkxdj296ToFpHRiP5+SRFyVk37Y89zI+8mUYwxk9Q1VBQ0aDKqgUFxczEA== 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=Bp8wcxEJ3ny0t2B2X7/OD77vdcGE9xipuBkypkRIPZ0=; b=VJnad7p6qpQ3/0BInxh8OxfNO8IyZtK6QcNAVYrZAG+8e0agW3FYENfD7AZdDWqUqbXw6fSQjgnvO3OOcDSoW9CAVlz74X6DhQtCSIrcYVt63oyNDQypw+i1MCCZnhh/X78CwtSk/mz3MfiCL9thNB6+ssuoczq9dd3rPwMIYA8= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by DS0PR10MB6222.namprd10.prod.outlook.com (2603:10b6:8:c0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:07 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:07 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 02/13] nvme-multipath: add initial support for using libmultipath Date: Tue, 28 Apr 2026 11:12:45 +0000 Message-ID: <20260428111256.1778475-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P220CA0044.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:32b::22) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|DS0PR10MB6222:EE_ X-MS-Office365-Filtering-Correlation-Id: 3904f5c0-a51f-4819-e25a-08dea5171fbe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: wdIMytYz3YzNMbXmaYweXi7s950/Z+6GXQxkERPS7zCsdh/RjDrnrnA6+6rDsvTlUhxFUNyNirAGUR6uQ9+siNl0K7+4xxhgy1miir97Kr542PkCDCEmdQ90lNh/8aoNzmQk9O1YDMWg1kgw2BLUEQgsSM3G9nQCnq8FotL3EDQY4Oc69CNfQ1anybFaAY181BCe3T7xq8iV+2mOscOC7nFlXrh9z+DhxNNo939bQliuqBHl/3xs7SDJfm8TrVC/KFyFXQqxUpmr4xlgkdxceFE+62vrWgIO46GsA6a98aXZnqFY5/qOXcCOfi9idw3qccsSvF1zG95us0MFSSWRn5Z4trzzhiZzQwZOW1e7TpQ1wzU24geaZLd+r+hW2Rnk97735bTjhemn/KdTsREmcbXBsXwqZDb4+N4tAFzCRpP+JLnVwCXNEOgmSlkMsuaiLHBtBJGC0kjcl6yxQyC6cektL5RR4eUkDJCZ3qKj8d1Wd6f7zz/Pckm5jvvcuvMtgR+FBcF4dIqLQD2U/8isT97b3FH3zbNZGvXeoQmvn6qFwmkVemyzKy+xMS2mC++/F6J2ZGFYfxOiChH+mFDGBB2uhYTG0i6XWKfv1nYPdAcSA8ifM9+J/unRcoQlbAPAPNeuQjKg5dIj0zhhxpENpTRYTAudEeZRPWsG2QbEiXxgj0onZDFNQ7DG8uWSO72wmDxzcW3ksxZh2tJWKoxkjFAM84HbdAdXzaGDhykW8JE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TqSyrgfTTgiy93gbsIebZNLqCNjyeSBmrT/Mduf3ncaGQff4PFwUcGU4K9Th?= =?us-ascii?Q?ZF+WLY8kQXkyBQ+lqsMg/w17yrpSuS/d0MibCtVGxGLroO61/JcZ0wXow+mx?= =?us-ascii?Q?3VZSGarjL31o+WXZ/4oo+Zk3RQlUPnqepSWkE6tTwqZiTPESI9A+yPF+oyB4?= =?us-ascii?Q?EQuZggiUrxzUAHwQi6JPDHSZqqo157/YbCo2uAxdAIt4goGlLB6M9BG5qF8u?= =?us-ascii?Q?MNmBKoSxG1Zpr/P7yckSq6hBPH8qOc9xkOBVZ2x8n7ZMOk7DJcNNqIhUcn5t?= =?us-ascii?Q?IBmKyqxr66C8F7D+meopMLLaLMJpvsvbKqd/7CvlOlhHRYb2Fs7PxZHgyOdx?= =?us-ascii?Q?wjKYTY/j59EHtqF0eOkIlZ50MOqIxNlt2IKINE9TC3Ys+Ho8b5OW9wZqkgRP?= =?us-ascii?Q?BsPi1+JhHaU/luRjY8mbb0fZhSCFYd/Q3I8xeEKeRkjjguMLIMTvG6O+AcaZ?= =?us-ascii?Q?uSAi41jwjqpwqMXepASTR3t6TgeOxgiO18a8BPswhHZ3cKxrLVmqMe6nKKs0?= =?us-ascii?Q?Wh47ofT0e/SrK5PlBKjswnQBn+pSBPI0etN9pxN2J5kSqa9bC2K6UjxnPmOO?= =?us-ascii?Q?D5PKH86Zxan/LW6MSzJ0W1y/Q46IJPdQEZV4h9W2aCRKxi55Owt+k4x2IRgT?= =?us-ascii?Q?Rvluwwg/9/V7fHkJhXagU2j7HAcQ9fCd4w+pjfcL4oKZ6j/Bl1ZTK5gNzSWd?= =?us-ascii?Q?bIfRvHEDB9c0g3f73xUo6htEA3RukdmXEKnLexIAhoiRsLCsZTqJFY2NOObb?= =?us-ascii?Q?rEMDegXUzlvAw9r5BPLXt69HtrhTsM2rcuujuin9YGREzN79eZGZhh73tuax?= =?us-ascii?Q?k+K6ueqNFaGZ1ydSxWXs4FRlj56sYgrKAnr8iWHeiptYRCSn82HJ1/klP+EX?= =?us-ascii?Q?Trw/RCJIuFZYeNZfIOrzcipF5zT3lEQvfZF7DTZMacbG3agT6JUUobZIxJCU?= =?us-ascii?Q?HodtNGAuXUtvSIDBzyr8sjO1luUbcVueA1lkC2ofwGAP+e6kxE7K0RyY+nU9?= =?us-ascii?Q?0LMb42c4Fjw0aFgVe3OhkUIqqOQxIRxhp5Dr08/SsunQpHe3KgYB9niRaQeb?= =?us-ascii?Q?Vl//ki2J4ig37FEIUz4/jZTVwWvjABFs6kGqpj3y5HVbjwz0ukB+7C+Okc18?= =?us-ascii?Q?nmAQEqbxL8dQYEObqbguNdM12RM3zE1NGg578IwVuhbC9hJcxZudIjurjJrT?= =?us-ascii?Q?YkHfexmSPE/O3mcRZCFMgmqQsMSZp/PB3TlF4hbLI9RkDflnODBOA6WALVOP?= =?us-ascii?Q?LIwkTo9SgAwXDnTBm1X1s8gu/3qrCsXKwt9rKdu2Dip8Swuo33T+WfTSBSB6?= =?us-ascii?Q?touCHx7Dw8ttXR3nnUWIuXQVjS/lKZAUjxmhiBVxYfEb6o9Lln2K+/VtnGiD?= =?us-ascii?Q?CRQrHF/7AdXYrq9S67Ci5U2AyqNYa6GZHF5xYSRxy0CKfXj+x11Y2Ln6ZWp9?= =?us-ascii?Q?6B03XJn57JPmC9Wdj6vya8Zkkf+5zrLKIfAqDS0lZBSfmIKj7VlakpOsvcVo?= =?us-ascii?Q?EQs3RoaozBN0T+hf9jQ+cL5GBUcZf4iGOWwv3ddbJ916TmJhjUYfeq0KP0Vv?= =?us-ascii?Q?kWzRJTmJ0cxVOtVtkK9vfExcIrqmocM18VvZEqY6Eq2MkQFqMPJ5TGVZ0Ih7?= =?us-ascii?Q?r42PiQwlaZVT1G2GaJTh2rzo6cz0bvdccxZ0KJRF9Vr4cKAjG93bxTSwkqMP?= =?us-ascii?Q?5PiqpITNGDsYqNSAEddwTM5sRS1txhb3IIKiYYtGpU7J5T3CV5iNEyoh4mXh?= =?us-ascii?Q?jC1csw7kjE+XBUybyF1TC7bOJILGKaU=3D?= X-Exchange-RoutingPolicyChecked: fLKRx9JqEnXrMeoZqXpCTOLx8wB9TKG2uLRzsQ4sU2ScxcdwFcXgryRmR2Zf/p86n0J7j3OcMBt8y6QgqXqbyKIwA83UhbbGScUsU5V7v054nkVXzasQG21AANxUOwXRZTX4F13ZySs1MADJaVIA+u7HxYt5ioo4U5A2dj+e2TR7gZAFJwcmTPnev5L1RPizpSYzXrzwRbkMuEiTqa+3IZR7J9j7cXYG/8fmkP8oHchPFk7AyUcnnhBpbWXTZ8XE0J09wyam6Lmv4EGLT8RMDI++5fWVjF8fGC+A8/SDbavNbF5/ARWLhAVnDrYJAMX1818pcP5P/InKpRFK8yVHrA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: YxohEaowNQoqJBMUzMkUm976qP69sTcbVEKe7QGx3YRqJrunlowkX0pC298xFQgGxnKJVr30L3DvJIQbLY7g7fHQ5XxRtu3nCW9Ba1/KG+OkMLCup6SAiE3kS7lc2QGHFDu5T36fxD4jd9UU0rNsSHsb5OoUDjkC4cvEzsWnzYuTtJUZDN/h8J/1G4PNweIBSHuqYitHu73CT6n8hYkabl2FegungVcVhre3k8hj9yo5wu/FLgcL8TIMMKV5gm+9x09ZL06fP/y/fuBCh5U1EzXKll3//PYyPZOZsFJyu9QuzVapkLOQlM4fONAy7TxXuaphbKw19lQ5XwM/CXp3ZjeGzOz4EKpHqqPL/WQd9L+sYrakBjviyu2wfKn+uiBtM9LV1t3uCTZW0aNgbqOZ2Np81MjbsOruK5bI4l1E8RAziB1LpKDO3ZH7Gb5DNvbp/6G6y5mKM+F9dx4SY1/byvN5Z7cJJYl7nqeVJ1V88nQixLx/NbIwh86IiYWLQgV0Oj3Gv0NuA7mnHJEpfAOvMADuRf5QPVRCENLdpDn5YkWx16L8Zds9m6jZdAbH4d3kVB39mUKKoxzPrLYt+p0iuUQPz51VrLRuvZ8b2S7/mY0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3904f5c0-a51f-4819-e25a-08dea5171fbe X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:07.0417 (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: ZZEjYdsQzSWNOFBii8kXpp4436l3R0R+x+mQGUv/A75oW1e9gNkYrHsX5ESt2KOiRbdA3O8xTjAq1+mtFUKPyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6222 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-GUID: LvzkGwZ-eAhMT0KxOgCOOyOxDUWSBCmB X-Authority-Analysis: v=2.4 cv=Y6XIdBeN c=1 sm=1 tr=0 ts=69f09649 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=BqU2WV_vvsyTyxaotp0D:22 a=yPCof4ZbAAAA:8 a=iqRKemep2BTn628LUkAA:9 cc=ntf awl=host:12309 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX69twwSqoM3wB cMEYjdcpAfHG8Be0l8eqKd6LCbv0SvKGJitCNzn/rg/cl+km//dZZjuX+Xn+pBHmUP4rrCHkUC1 SyKUNxw9RPpfjm9n+krupkOVqlczjOewU7siRKiFLJGz0eVRGTIBziThLQs+Z4LzQFcoZC6cZm+ c7OQG5fvnCY+TkT6955wX7afj9KJv12ayfs0u4OCxL6FjEJfSOFzWjAdjUTOYBo3HPInH/ZaGV1 ehE2CS/+SlfYkhLLouXPnZHfpKEKAFBEU1UaEwuRVLuCxQX+9rCUJVo4PFmk65Sl86ASgf2DdKa 8YFp2BQn8Z/jnn5o1vdAhlayXpmiCFZ++UMclWegk0PSFMrv67gDe2eWUvOBIzGoFcdCYFWA9JI o8KC+JGl3TChIImPFU98NMBTtM6YF1Z8b02eJkUKurriQn+ea7nxRH/nyO/RPNlf/xD5SQEbdfY SwLjgxsK4xdskNrtGZ33nr36crdlJNWm+SYN0OrI= X-Proofpoint-ORIG-GUID: LvzkGwZ-eAhMT0KxOgCOOyOxDUWSBCmB Content-Type: text/plain; charset="utf-8" Add initial support, as follows: - Add mpath_head_template - Add mpath_device in nvme_ns - Add mpath_disk pointer to head structure Initially all the functionality which mpath_head_template points to will be unused, until the driver fully switches to libmultipath. Otherwise it's hard to do so in a step-wise fashion without breaking functionality. Many of the libmultipath-based function added will reference the ns mpath_device, so add that now. Also add the NS head disk pointer for the same reason. Signed-off-by: John Garry --- drivers/nvme/host/Kconfig | 1 + drivers/nvme/host/multipath.c | 4 ++++ drivers/nvme/host/nvme.h | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/drivers/nvme/host/Kconfig b/drivers/nvme/host/Kconfig index 31974c7dd20c9..1b3f76e781bad 100644 --- a/drivers/nvme/host/Kconfig +++ b/drivers/nvme/host/Kconfig @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config NVME_CORE tristate + select LIBMULTIPATH =20 config BLK_DEV_NVME tristate "NVM Express block device" diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index e00e2842df307..b727d6b69f3df 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1388,3 +1388,7 @@ void nvme_mpath_uninit(struct nvme_ctrl *ctrl) ctrl->ana_log_buf =3D NULL; ctrl->ana_log_size =3D 0; } + +__maybe_unused +static const struct mpath_head_template mpdt =3D { +}; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 5de06c016b622..f3026da0f39d9 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -554,6 +555,8 @@ struct nvme_ns_head { =20 u16 nr_plids; u16 *plids; + + struct mpath_head *mpath_head; #ifdef CONFIG_NVME_MULTIPATH struct bio_list requeue_list; spinlock_t requeue_lock; @@ -581,6 +584,7 @@ enum nvme_ns_features { }; =20 struct nvme_ns { + struct mpath_device mpath_device; struct list_head list; =20 struct nvme_ctrl *ctrl; @@ -607,6 +611,8 @@ struct nvme_ns { struct nvme_fault_inject fault_inject; }; =20 +#define nvme_mpath_to_ns(d) container_of(d, struct nvme_ns, mpath_device) + /* NVMe ns supports metadata actions by the controller (generate/strip) */ static inline bool nvme_ns_has_pi(struct nvme_ns_head *head) { --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 EC299413225; Tue, 28 Apr 2026 11:13:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374814; cv=fail; b=Vrsef8AU9Wa5SMm4cc8votXH2WRQHyJNAg1yzDT84fyCrrnh1FJ1XtzzJV3Mjm5RauSz1c51n8PWquY+GQQfXcYeMJ8Nq2xAVUIOchrDCRrvz5lge696up/y9et/fjWU5PCy9OlEaCLZeYQelmGOhs4WmofmnzKuPyQDx/ehv18= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374814; c=relaxed/simple; bh=ITAdqiZazZG0FB3ApSM3dkG/lXdmGqkiBOgrbNlUFbo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Eh5goAlqYxL7u2Huo71pNsKS8L1E9l6OSUzDy2wTBjV4Mx/UOlFu4nVivPTPUzq6haQ9QoCi+GpZesI1Ai9mAV3CH4cRyRlnkAKgG2eXq23V/fngL8AreYl6JWh1S/OoSIyb8zYxAzOsP3A8h5vNM19MYAYAdILiLPc3YKGKIkE= 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=Mv801Ij4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Iql4sHYl; 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="Mv801Ij4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Iql4sHYl" 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 63S8qi1X2128105; Tue, 28 Apr 2026 11:13: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=DenTAVuJVMrKbxEDY1RmKuVfQAKWLTDK8q4B9QrnAMQ=; b= Mv801Ij4v59GFlWEyNmb25eQNlECVEbzyltqwojLiqmJ/STtYM1fz8KjOieMUcr9 H/t4gBhBmWkdRRogCrMI4fW7BMwmge87L4K6PiykvlRWR9YGGqHdiW4lT+Gq1AIT Pu8oRraSRoEbrS8fz62HucoL3UBQ/cGrndQA+5cN43n0p7loFJz+rVrTftV6SCW0 34abd1ZpFOxDB9Q3oD/+7BidAPrT6VhUbaCIMeIEk6kgtYfn/EaTG+k+ixxaIP3u jg9EqhdrzoaDYLdJfL3anKFIMqNHkYnlPSEFdIOQElEZWmHQ/Itjuxa4my+NJj51 /dsOwT03Bh9q+kbdDiEqow== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drmha7jmm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13: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 63SBCRWJ025901; Tue, 28 Apr 2026 11:13:15 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011036.outbound.protection.outlook.com [40.93.194.36]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2ckhw9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BO3oOyFwG3mk6Ryea+R8N+t667MMa3XNAPRoREpDUQSQsp3rU6ZVh3Ns0yAKqIKaB6N0d9upwEwaEki1TYifwyXzU8KGGd2iRbPcOds0RAZNGMg1sTbzPXC42ad6CFaqwZxcN8eEvC8R/XydYlcHComlOSbz9qH0qLCUm6zw0au1YqRq3Hnvw1If69jf0dxGWjJ6XwY0BRz+KZ8g3FZAkzpehfdM+ih8H4a6TuE7kzOx/sRIX3iHBEDtSZTTxi6dFRd86Cv+djLLcUl3JZauk16UCbx+XoqS3UKvyQN64BU660DvC7WhM1Aqt792ANzLZ0uNXZrj5A5Pi5iwXlCGSQ== 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=DenTAVuJVMrKbxEDY1RmKuVfQAKWLTDK8q4B9QrnAMQ=; b=UPDJgdiSlL8HZupLWbemzsIZbSYhl0JjXEIGUDOUpSWmypS4Ie/r028ppTXejyGZNraA9nB58HrUV0LVgngwVKlbJu0hgL6vzyq4Zlo9yeiWFN8rjhp3nrovkPV/oRO102WnJ4C3bXLOcJUdn+sWlXrhkJBUT77soRQVsI1vd8nJyVzoC+s4AW2yAjWuR4g84NJL2FxQpih2mpjDmfHSPZfwOiQUnkX2Nxy4WheSWEkLu2tqPUYC0HixY8o9aBJsFqSOh/H63LtGqQXdRENYDLPjV0p1wkrtOCG5vJksYG4Jl9BbjOmQCEhZWLFn9PlXsMSMNLNDPGRyEsRYtKBKDA== 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=DenTAVuJVMrKbxEDY1RmKuVfQAKWLTDK8q4B9QrnAMQ=; b=Iql4sHYl43NTvjp2PIHJVXwRNKSl0sCANGTgMwew5nqTYb3S88QVTaJidPPNXVHRK2uBnlRh+npyxXsr0n5qG/p3LIUQm7RAzbtNyLUF0POaVgn86MZiP1gF400d+EA3YEjgRvvPfOsbmXwZyUDzD6HmjxvZGs7idOGEZKpAVb8= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by DS0PR10MB6222.namprd10.prod.outlook.com (2603:10b6:8:c0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:10 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:09 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 03/13] nvme-multipath: add nvme_mpath_available_path() Date: Tue, 28 Apr 2026 11:12:46 +0000 Message-ID: <20260428111256.1778475-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0029.namprd03.prod.outlook.com (2603:10b6:510:339::20) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|DS0PR10MB6222:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c81c0b7-9982-46a1-84b0-08dea51720ef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: w+2v1dMYdGDOI6D0Ls/4dQi3y3/VclAO4A7fvABRIAbw2kD8K1iMJHq5kWPCcEUKZorikgLA1DfMGxfyRu3v+ebZDa0UyWpIPWaUmLyIz2rV0sa6YY28MTtk7MSdeIxr3KHv9OQn+2QFQyo/Ut/8wGcV/umZH1pciaqfISb+uFTk4yAGeR63kUuqmWX2YdRBYn74rJInT67uVvDfCMvxrmPrFmyN7VW+k3pvp7HNsVMwX1Vs3LynTJZDXOJef3Wc5shz+tKDOkIrp+7+huhE7jUG4eiq4t9SM8gj/96p6r+Jue3Y+bTz+IyFEXkSmIPjfhSmMWBA47b67xgaLLD90ZVaAtptFvFS457M5J0UyFT6Zxx69WjZSd0NZklazKHmGiKpgBXfPLqpe4+W26ulFK7RfaLpfS0pGFv6BTR2YdWl2UvAQQDxg/dg5A1K2RHDCpizUejK/GswoWml2dYNtie+7jdeVGPiBwU6Xoq4yMLtMjjGqtdrjnF8dXtme9j/c/AUXAaeLVVKgpmuPiVnCTibxwqoJKYqXACD8oqqaJtLFOferUeeRHF9PTdtm8gPS+EguxNxxOtxALwCDIMsjTTShAKmk/giKEJT8sqsgwY+twOY9ugt174yYA7dVbYUe0uwy8yPN4evhW5UO6InNsK5eHTXQjj/MgUMPXKYyY7jEVHLdDPlcLyx+qh5BYB2TKJPISQsLNi62Ap/+cMuKIufHqKkQ+BTOx123KEPkQs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Mbg8RjxFmKZKb7Zz4bIw61JbWwEzfdPAPxHG5goBZoAcCHqEdSl6KT4GkjOf?= =?us-ascii?Q?84GhQK3uHXveGfTo1QAef7FCVLOK/drqGK/zVb7UQk3xeYG9k+m/uxyC1cQd?= =?us-ascii?Q?spnIlkT7D8+9eyR7K8k7mzSr8rz9RpxUFW2vvWBtxYCtFP6Q4ImN0srYypJY?= =?us-ascii?Q?H45Z3nQHnm8xQKvB6kLoFBZMqWg39zMozrkFW+1y+3ktN4zEOl6Q99znhiiN?= =?us-ascii?Q?LJrve7EDUS7OQOLHvJM2VNfvn4BxmgtsVCWOzKwcBlul8R3ZiUh5GZTpYJS2?= =?us-ascii?Q?mIGxc80LZe6RWe3Z6IVDcLHQfDlzKhoblKIKWvTCEup8TwAKQQxY1WKuecML?= =?us-ascii?Q?fcNbfKqkmED2/nBVouCZEYvzpuRgfgfTPWnkbDhMBg+xPUlV33kR8wEhdnTx?= =?us-ascii?Q?JxJTXlWfBVZxTitJRlIl0T4vLDQqW9yUoLmSzU/ifCGHXnK4/w0aVV9ddFIr?= =?us-ascii?Q?Is14mixAUS78JteKk94AJ2auGrxrvNid+I7SCJbJ/11ftpESiuckCNKnis1A?= =?us-ascii?Q?45DMPtnEOQYRop9oBMtnx6pQT2s2D37N8kS9NUrCmUPKVqi2rHfEyzENUKq6?= =?us-ascii?Q?ore2x0JLD356FIHF2eUss0KHj7lVxfgjut/rO8r1uqyH2g0xvLHI94nLYOi3?= =?us-ascii?Q?mfeoxrNwvgo2PzvxW9qmPSNlRD48B6ka46rUjnXjSHK9kQu6JW0E4TpRx3xg?= =?us-ascii?Q?dHOMF06gwSs14nmzQatssyFDnffsVE9xVrxkLBsi61R2Fi+FqzxLfordmDvj?= =?us-ascii?Q?VUxyrf2JqU8soUbS9CGD+nGBDC4x9NkDweFoPb/aWFTMhajZmlyzo4AvDdz8?= =?us-ascii?Q?feTmFOKMF6CP4htrBAGxK0UcGh6VimP7gHmSYMZ4ZuC05wrp137oV4kJ9peK?= =?us-ascii?Q?J9w4d/zbzUkkkrE19p6bdZyGyjc+JoofUaD5Wtd1HpxipHQriz/8uWTHQWj5?= =?us-ascii?Q?xWK/DG1KhwBsx+tV1y3PsWeonDm28Y9TRE/Tk80aA0rwLSUnKdd0SPrgpnHO?= =?us-ascii?Q?HXJakpqJXrRPR+vZu8KIXxB6Z7s+B+jS/vdyHgXV2KkTwuMbRfIQWYfU891m?= =?us-ascii?Q?IZ2qnkBD4mghNg1w0VjxQKRsetvd3aUYyh3+LNhfGo5GsC/uwudcU97xOM6n?= =?us-ascii?Q?794qVVPmSv34GEduyzOTkVEMb8LTzjko7zEcVVmRZDovyf3KsshWKSkEDaOI?= =?us-ascii?Q?SHHOKq0vnBx096NhobfQb7DL+QdtXCaZE4YMrNdrybHW0ycTGmFLFXTreux3?= =?us-ascii?Q?ZuNBX7oqZTr4lf6HZ/fMcPBBLd75aSwkRCe9SiT03Y3SCmHdgA4zXZcKaXcv?= =?us-ascii?Q?ofp+i8XulWhbRBciJiFV3JLgQ2+Tx7HPjPxwxnFdn8vdWvoJJGMfCYhRhHCD?= =?us-ascii?Q?FVL7GqoIhs3Lo53SbcZAcmVOutZN2u0QOm4Y3+D0U2WHuZMtowqA2LGmpy8y?= =?us-ascii?Q?LFkRifByA3Q9+GEupIIeDB4gI+e9H57n2JazNM/N/qePfgz1Xi/L7A50TtGB?= =?us-ascii?Q?LxXDFQexSUyt67qH8tuXOZFTr+Fx0tconwNsd6Evmax0mK19TTJA6ZdiBX29?= =?us-ascii?Q?kII/xOY6Vt0r8vb78IaBazIBGr7cC1oMNkfCl7P/maLEfghOx0ssHwEAlTyt?= =?us-ascii?Q?ialO2bWYeFjSe3zjbysxz5P6cCb7gowOnx0GC82arNf2xfavja1WfUPjPxtI?= =?us-ascii?Q?ci97AFkNrLlbynNVbKSkDHNGdN6oF1xExqtnOQOpOB/ekn8OR0e2IuRziIJz?= =?us-ascii?Q?PCICh1Uc2lHJWkoEx0bhn400Y6tiO7o=3D?= X-Exchange-RoutingPolicyChecked: PAPJGK0DL/+INMiSRDuFvZGZ0HehY8TpZLt91c2WzZR9HNulqox8TjQA0unRkW0vOtiJtMUx1+GUZJYfnz2Wh8VW7qySCnnmcetyBbuGZl9hrlR+ukkFhq1FEqm2ATB4FeT2O3wSr56vJQWUPtMr0gCtdEeU8VaPj1eU1IJ8C3BosLvGtQz5Kz33xEMdFDMCjB0C31gkKEz3dzVh1YpIy5mYAoMwke8Rd6KV63KZRPZtLFZ2incNSYx6J1j1rND6LxNsFNw5XCjFN4dugMP/KPZnp5Uqz+4IkiyKT1KaNXZd4DkB6Pd2o+HWzxFZEbLFNIRF15BTu+k4Uea7/ZN2XQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: CEmCMOgSyFnzk5fnbbg7RL642OvHLU+mI267VIl6xlXJ9GyTXdGTLiqLCn5TuLpgCYYsJdbVXHemN4SvYXwxu7hAQ3Ndz7mc1xAc1LukoK9XYdwzhUzpvtDFiJqPVjt1NZ0dllLQH/MvlMf4dookabuBNOHYM9dgrGRJb28nPrJ81VtC0pfVmNQFUD5+RIMfR9bcUhQ2HhcqWo3olXMccMfB60qpMWQYpgcDQET9NfwXL35hS01I7KXFkIxqAZB99KSo014QkpGv7ROsWgMnayouJQ/Ma5DOyKblKVKjyQWjxASF6jSyy3UTLin0a5wEEh/TF++gUhccWxGL0V90jnM1EdWxc2sjILKKLMpCvXRosiWEQ0Z1YDJB8e2EaGdNAzdaseqwsS4clcfqjYG5lJJPiyVUxEx/DMj2M5mQwb6cQuybJhyPOkvDQ3VPW5PPgHgUNgRnM2yUUPPU2WDYv3CdeovKWK923QvWfI5bAUrGGnDkE7VQabV/KwySYths8aDgsxkaNhYfOx+YCLBX9BgRR8X+IZgiuJGRsLkYChpr/xpXN3CwnahkGqkOSRQARqpKM6X4soUB/vxdY+PMs2Hnyksm6ypxvNhSDkdZ4EE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c81c0b7-9982-46a1-84b0-08dea51720ef X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:09.0235 (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: CmJFahdq0jbD9UNAVvfmqNa3UJQR5P/aknoUPrfTtrDHSTuM85woNKU7iq4qAm3yK5qoxP7+onn1AvjlR3fbqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6222 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 lowpriorityscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-GUID: -haAHOnoJvXWkoLvBNFY-QkWSZa1iL-r X-Proofpoint-ORIG-GUID: -haAHOnoJvXWkoLvBNFY-QkWSZa1iL-r X-Authority-Analysis: v=2.4 cv=CrOPtH4D c=1 sm=1 tr=0 ts=69f0964c 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=yPCof4ZbAAAA:8 a=WJg9rLiHYWik38eusUgA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfXwBo1pcLeCSFq P7xHSak6RCvvLiG9uYv5AdsQ2vlEbMFK5N3UhsWBQey9vjfuXQNlQzBBTAMjFhbksS6smVyCFhN QJr4ryIOjLWZgPVt/jCLdszooNBMof7cI4bKi0XStFIulfqRooe6WMN448TWE2eCJdZSWGr7Xhw B3U6tZrVPnbFK+3jixV8NhmibtZBfHFxUg7agfhiTpH7kd5GoReL4lQXiXWowIEKsJdMhVCEYUc aaVkjyGcnq32o65D2a3+TdDq9zR3AcGJuNTcSw4k3pMyYL6Vze47+RwFX16aROd0NaDjWgotI6l 0kzJ3rfyDwwocqUXdMM29sTldBoNxNGQIJ5GvZGgZdyQyVWTfXShA5QdwpxGGXzBG2uoL/TdhNF hB477MquMxb9qO6D0fPqA1Blwhb8utBkGbuK9cLF1x5MnNgrTiYGUE/74WSvlpz3xTnfjMCjJZA WjiXrUNg+ylREyHHkEQ== Content-Type: text/plain; charset="utf-8" This is for mpath_head_template.available_path callback. Currently the same functionality is in nvme_available_path(). Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index b727d6b69f3df..cc5a3c6c272f7 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -491,6 +491,25 @@ static bool nvme_available_path(struct nvme_ns_head *h= ead) return nvme_mpath_queue_if_no_path(head); } =20 +static bool nvme_mpath_available_path(struct mpath_device *mpath_device) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + if (test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ns->ctrl->flags)) + return false; + + switch (nvme_ctrl_state(ns->ctrl)) { + case NVME_CTRL_LIVE: + case NVME_CTRL_RESETTING: + case NVME_CTRL_CONNECTING: + return true; + default: + break; + } + + return false; +} + static void nvme_ns_head_submit_bio(struct bio *bio) { struct nvme_ns_head *head =3D bio->bi_bdev->bd_disk->private_data; @@ -1391,4 +1410,5 @@ void nvme_mpath_uninit(struct nvme_ctrl *ctrl) =20 __maybe_unused static const struct mpath_head_template mpdt =3D { + .available_path =3D nvme_mpath_available_path, }; --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 A849141323A; Tue, 28 Apr 2026 11:13: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=1777374817; cv=fail; b=ttpQHw1IqH0PLR95Ay3MQrHD2Og1V4A8/0vDGtyw1o5w68vxSxr8/LRfoPZFCUqdDBPRVdUbxLwJ+iOTxiJ4fAvNhgnZBvf7IWrtn1pdHrifsvOyLEuc5lXdeipYiFD4+KF/ba0sDIFK9ZkyaZiuQ0yPCPQYuPBtkF/8N82qemk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374817; c=relaxed/simple; bh=tq5wAqcw2bY7s7cz20Ya9jZGJMwi8XlgekWw9xR/s4I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mm3MzRvGLwyY5yAJZpX6JofY5knLn2W6FuZ5T2I6l+xyePADtSm4hT4SMRECtDbIcXTgmPKLGU0wio4i8w3O9xjuVNFNOkIZNZVquZ6dBUEGYoxUoMc/V3SG98+/fZgSbz0qqlLcsZKIt5cES8EE2ArA1ExngMLWzfF/NkFo6n0= 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=ifZ+juLU; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=FvlskyY2; 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="ifZ+juLU"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="FvlskyY2" 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 63SATRIU2721970; Tue, 28 Apr 2026 11:13: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=fk5u93owBjuGEy8QCCjdne6aDFX1Te9li/ruit8ou18=; b= ifZ+juLUIeWfcoWnEHN63ia1kq0Txh1Rbi5Ye4+hfoEzUuG+hRt4qqoww1FM33NF ubx+bZga5OgRSD1jyEJOZoW+iCLtBt86OLCxfuX5r0Js3bMJJXKsJOMg9tVTvHVD KRMn4FwuXp1IRlHY2dJg+zfd4qLfStlKRz2IFL+bqwTEpLB6915JJqDaz/j0FT9/ TLLZnUVWOIcL7cfGPawU7Z4lUzRTQU+dYz9gaKrwvSFK4BtePl1gQin4ZEEBlDNv lLunO31TmeTAs9/ru9p8b1ZUU78tJSSywJRDi1CTUA8yf47SxGr82VSDQT+pme6q ftPU2r3Hhf4jBAaOUxat7Q== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drn7t78fv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13: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 63SBCRWL025901; Tue, 28 Apr 2026 11:13:15 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011036.outbound.protection.outlook.com [40.93.194.36]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2ckhw9-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RQn1qDb+1n8cCE4gQPs/oOAQjRr5a731Gb+1YC1BS9d0ffqWnYIEprvgk1FWhyI1RDsmIke7v01kNwQbHBqgsFOX33yMniV6XGZcTVyX2zZUBvyyEOxffEEXsHdsgU1J3LvAAouw/IVoNZt1JfNDOGkVWPyp8kvRgaUaoaLlTUKjHEMiD6T+paa8Mmrj0cm64MjcHmOz1neUKT6lqEb3Zm4PhU4FzVAZznCdPPdY5CRTT4wgt4GJq/d4h++oJHrdN+6ats8wSuXw8rJGaGPbcjPF1m3KS6KMAXd2z/qK3qKBoZGHmJXRGtcbr96oBaGcRhfYtj0vBWSi630oA2g/PA== 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=fk5u93owBjuGEy8QCCjdne6aDFX1Te9li/ruit8ou18=; b=BOocmMjuTJhhKMmTfXu6EvGoT/+IFOIuxwKpY1Pbxw+aXF2CLDcoS7mFQalssSV3x9hENg0+Entm1H/0WVL2tp8s/NS1Hckan1KU3Z0uHPclZ6yffZVBbvLmsyWMvtdwASiQXKvWC25+6tWohZyHJnpsC/aygdxcbWPw9isoD+WybBy+TWFubib2lc9JKXPT/9yHx21z+m73aJ0i27sIcRqsvE/ntRZV3slkC1hwn1SErgZwBhJ2TJxYDusd7rGnT7ULnDIgWaPq0FA55T3ry+0e9xvrquwbdgmBrCZfKI8Y4fuDC26bcZ1DcvHCeIqre8mNASI8w5Ho2lX7FWo95g== 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=fk5u93owBjuGEy8QCCjdne6aDFX1Te9li/ruit8ou18=; b=FvlskyY2zdOE8EZspfP/Fj/LkiUPQzsKAI7WfCjsjbRCWXCo+RY/5eg8GKI5bqEJt25yb2LqQ5iLuyUc8OdFYtKsUZCeKP4+2SOX7MRPdZ7II7iYxNkkunbswTSvfkhJ6PdhYN98S/6zzWzIoWl/ZuPGpLqQ0L5E2TX9u645TC8= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by DS0PR10MB6222.namprd10.prod.outlook.com (2603:10b6:8:c0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:10 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:10 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 04/13] nvme-multipath: add nvme_mpath_{add, remove}_cdev() Date: Tue, 28 Apr 2026 11:12:47 +0000 Message-ID: <20260428111256.1778475-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0P220CA0028.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:d3::17) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|DS0PR10MB6222:EE_ X-MS-Office365-Filtering-Correlation-Id: f4f73326-4807-47c1-9a21-08dea51721ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: FEVbep25z3tYjLu/j3SS5OVT3vD2PsxwBRSbxP9L8tndAnBK4WKwURjGF6IKrmdPbvXWO4Mr93HpD5xGpNMGJITetQ8zM4BtzvDeb/y1B4B6kpdbN5vC6PdVwCA6zPjPW2paBWM0vUDZnCrh0HZqavDUrAhlIZi1mniVbyXRPUzcjxniHvkYxpTqLQUja29EYLhGgCJ9I9102w+Aklwb7BuzxonAw5LX6q3qrmbrCU9+IQC8+CTMdC2VuSdf/J3+qKlgw3vUrHkKTnJU8Jm0zTbIWb84qFR2k02fV3fdMrKdpCDEgeYWRW7q1tbX/Ot8vY3iunqVabOBmjwxQG0ysc8YkC0etTnItfAkHP8zWMnNFMPPap07ax+cOT0h8Zsx3kJ1+LcmfJ0gs83UbTsLbV3KNVaecC+XVnHEzs8hY3slOxSO1qnHz7ZpEOcRRMAyLYMG6j+4fp3GU2h/lpgKoZ0y2wxA4e79uckCyisIs+oPUU6a4IURFOoa7HDvFWk1wx5vffFsuQ+ULVpGiN7GrQz6Ugsw8cU1Zhe843nWv3YPnoxXw2ULz7hIL/7H2VZWoyrvu+JSc1gMCbW03+hHTj3A7BalaGF0GZ06AqERTf2MGriqU5fUuZsWtf45ihXEWyvFRNbAOQlaaFRxmhWguAZmsxU/xXfUyB9EshVsfpWTA7ak3dyueIuMd4JBR/FKNj3tT5AbOSscJVhh6unJTtttilQckvt7HxI1vDbgqIA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9bU3BKXhMSPOG7Q/d1+IlaF8OIwnC/I1KcyYUWiDY61//CVQ2r2qCMI5fNfz?= =?us-ascii?Q?WunVBSvUM7+3udGEyWv6dDH1bIwBC4ASJiczq0sh15Uuz1PBIuqQv8Glpldl?= =?us-ascii?Q?hzYNphZkq2hLzMnPhvrmwDlH+4oSP7h89G6+0HNBex1xVsFA2VU9NNakbIiJ?= =?us-ascii?Q?QjS27khIEvtKentF86Dsd8Cn487YryR8YLgmuKz+flVGwgY1YmkCG33N99SG?= =?us-ascii?Q?xI60MD3/IEGwE5X2Edmwd9B35jfmy5OE9MR5aloRwnRMpFQsB+1y4p6r+mW/?= =?us-ascii?Q?yYNCxkCpZ2kH7DrJcx2OUlYlscerla8d2nkoVAh5WVHSOe6wEsoi0CKDfMVg?= =?us-ascii?Q?/I7YcIlcRLLFhlrf9mZ7GJQGXPQXplnj2H8fgckraI57O8fc+/Hu6Oh266e1?= =?us-ascii?Q?KJycr9/mULjSJNMDu1y/WDxn0gFOuURCgtnyCX1eLb/MudXQ/LFigGMHyf5b?= =?us-ascii?Q?MOfH+pPLyVQw+vTeEUxktyxKfyZhk7GInDpTGtESISJzlK2VJJOED3pO0k9K?= =?us-ascii?Q?i7WSlS/o3H9e+gjPoh27E6fYCXc9W6XQTMvj+CWtKtNfRxcezvBHrhsj6gR5?= =?us-ascii?Q?43NTe2B5EQHbK3xJjou0wiEmMtiSVHv9kvQl1yivfCGX5LUip3ga5ZLqFlbV?= =?us-ascii?Q?dektUx0h4idfU99Jkk86nql9BiYtMzG35Lqp5wdNdUmeO7+luIrSCKAxx5cA?= =?us-ascii?Q?XU4+YZV18DeiSJ+MLUH32vsGcH1dhza6Kj0DXKGqoxPShSc6/Fb7kNsALPLP?= =?us-ascii?Q?fL/QXQo+lbySmagnitJhthrvu3GRHz9zk52DowCJRY+ij5HlOXfo51LV/0C+?= =?us-ascii?Q?xezHJNWmsJckM7UPsSybbkTZSNgp8Fjo558Sc9b5QDYNzw8K0v6h3JROCM6Y?= =?us-ascii?Q?Tz28TO/AJe7ad2F+i6lprNf82MKnNEYWS+xbr8IPQAGRJ77fyvN8HYOEmf9v?= =?us-ascii?Q?zK2uJ/wQb2KRd52S17OuyqVUk4vxQEqhZ+G0bmea9Kf+hQv0LGObvFIA9WSm?= =?us-ascii?Q?y4NOXPCeWz71VKrj8ukP5AJykYKxAmP+IBZ27i1hIHDEnJ53fxQrKJeq1cef?= =?us-ascii?Q?tLRVrixzNciDDDVYaxZ08kbavL39W4OTRjh+nA0426Ub0CI6XOjUUuD+5mKC?= =?us-ascii?Q?FyETfpI1TS+4plORVFtZprgPFF19G8iKOMIlQ9HJFDCbD+3hiyjWbRmdM+vO?= =?us-ascii?Q?Kq+4HeZ1mj51f2sQCuhcuABFx55ytctE9F+XJ6jbmIeKNIYnKrHCcT2YhQQ9?= =?us-ascii?Q?+0JfPv3wgid2GUiVRcDdNaC8IDwRhEp6cX4nqximhAYFn3jwsFaewKU60nE4?= =?us-ascii?Q?L6TGLVbb5qhDHUGNTNsdFRFtSLn0Fe0E6UK21Iuq6rew07p/xoUadlNBmoG+?= =?us-ascii?Q?hV0SYgOeLWW2cWSehO3rj4Cm77X3RK8+tM/BjWie35e5mZK1SIotMaOn/T9N?= =?us-ascii?Q?3yyZi76jJwSFrViUHYzWAKrfCNrimUg0UHIz5xgLf3jLqS39kSAE40lTrFID?= =?us-ascii?Q?Iozk4Keb7GYa4qz8bOrlSR1kzFDsHfHkCOGR3+FhjoZc1Bn3H+dREKs1/L++?= =?us-ascii?Q?ebmqEH2mQ6uf5yiWWxj06GOamiV5TZR5SwZ8dU4zqe1mQOCDtHoPJKVe5jPO?= =?us-ascii?Q?dbJXfewU16cgzECjC9YQD/Erwz3ZxcWOd341y/msWcllUH4jWI+6SdkTumVV?= =?us-ascii?Q?YZk9/OJba/zds+tmRIQaYKufmOrsWh+BELDiTEHqXkPERq2wxsaGcFe3GrN6?= =?us-ascii?Q?E9s4tRFUSMrMwOo2QOUg6kOJPjT5ka8=3D?= X-Exchange-RoutingPolicyChecked: rA4CuR3IE6Zr2GR+mqXtkCLAndj6GQtMIJ7o/QbtX0LrAe/h797xEclXtUckae3TtFqWjrxRAsWcbbW7pknIXGPNjUaEjT0ZI4eZ2SHbAMsZ4AUOUKR6DWaRYmviTRYTJOF4f3xlEys/fVPW/sPE0mZimXrToq//mHzdcKuwFp2gnqX2Rg8XJQYanKqqXkF1FyfFoSnZPDlkvfXPw0hC2iDyKe5fLw3oZAseKYWrk/vjRXuo+d/kfMYI8PqRSU5pvvOPbb3wpB9hn8QyY8nVBJkUccur7iZ8IsqZ5Nty9+NgB+pyH35FAcuGGwnwOwh9b5bHFJbxkfmlSis5qBHxjg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bivrq6yQgnKKaajQMTL0mxGUeAsDGKXmtXLD+Z4rUB+ES9MIPfX4SYCbjsjmcSdOFE9ModlyVYgwA8YxYyNBQmVVVdYcKs0ZLkB58z5bo71yoxvXGwKcXYaIDWABPom/JEG99+sWLNAVJv0aYOCp2g4iTI17W8sYcnABSQ50e+LcETsWlEfFSP+KciV2dUY/tds3A9HatKjKlbuuwe+mSj50/7ck0Nyleik6KKfjCA9WrX+S+jG5JB80S1yEiYhqAVzJT6cjOC1VO+FFuCT/tjagbj3VQbZtc+GWRneecBVBnNvigg/99E8eODJ1sBM8jGp62LmA8hMQTeFgqLXgXmjDEiSvQakoprzsqQSGHnMtUHQbI4+ea1dntvREn+QThJQkqTnW3taVIr6JXfeCgy4EXeecyUcYUvNvfH4H8yi4SN42xxn3+2/Y157DwhXK8YlyIQNg5XXNOZ0CRriYYhz+rcsqqHX+2YZIc3VKwfCmgIjGVckJX+4xhAOdl3EcQ4ZRSPQhP6kjVfGzg+rqJHm+MqN2SDqwbSbrLn1MxIz6D8Mx4HNr/+CPaKRbY8sz+yPrgsvfClz/Erf2REMOWBBMiXDf0iH1bEadSwujZg0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4f73326-4807-47c1-9a21-08dea51721ea X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:10.7412 (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: tBeW4rT4Zjs2JRDaUfq6GCz9uXMPjMcpyJLyZkEABBbARijEod98Zxrv4mtAm7evb5JQNCYslU7GQrp93zAKxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6222 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 lowpriorityscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfXwXDDMHO7asMR 9o2LTgFEP+bH7gE9eg0z3WVg9hvBPxpChJqMsUNmTCAUaItekpoeIftTxVgwExmonnAMeQgBHRN RXVwg8XV338GCIMH6qU/fzlP8W8EpH3iB3j7G97N+LRo7PhGekaT/Odx5PGPjWykAq72is1ttYD bTyoQrQWwrz7VJb7yhzxMSXGiU3MAxZIbtNwI5JS16N6a0c5U1PYrRWZzELj2CBQd9FJ1b+ywMt /AzavvB62OBrJS6aW7qi5tK1qJDEhTbj5894RNAc4WRBg/gFmXelPpF46zA/fywig5nR6fq8AiS KvDGFF9tTnXc9ij61SEfDqJ7p2mxkiHWnu2aEWKoHc9AbgjR1hhSMoe9Gm+fNWVIkUrYEgCYJRn kPuSJIb+Rlzc0LaQXYzgR5huaHu+IrX1iBFAdGpHfRu05s+bG/ZWg+3r5VyI6P+PZHasPKGrAJ7 EhTySG0/tntSvtnu61Q== X-Authority-Analysis: v=2.4 cv=QO5YgALL c=1 sm=1 tr=0 ts=69f0964e 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=uY95S6If6i8ttexQI8kA:9 X-Proofpoint-GUID: RvPNRVAjqMjWrL6gvZyxBx8VtBcgl401 X-Proofpoint-ORIG-GUID: RvPNRVAjqMjWrL6gvZyxBx8VtBcgl401 Content-Type: text/plain; charset="utf-8" These are for mpath_head_template.add_cdev+del_cdev callbacks. Currently the same functionality is in nvme_add_ns_cdev() and nvme_cdev_del(). Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index cc5a3c6c272f7..0bdc7e0dbce50 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -608,6 +608,26 @@ const struct block_device_operations nvme_ns_head_ops = =3D { .pr_ops =3D &nvme_pr_ops, }; =20 +static int nvme_mpath_add_cdev(struct mpath_head *mpath_head) +{ + struct nvme_ns_head *head =3D mpath_head->drvdata; + int ret; + + mpath_head->cdev_device.parent =3D &head->subsys->dev; + ret =3D dev_set_name(&mpath_head->cdev_device, "ng%dn%d", + head->subsys->instance, head->instance); + if (ret) + return ret; + ret =3D nvme_cdev_add(&mpath_head->cdev, &mpath_head->cdev_device, + &mpath_chr_fops, THIS_MODULE); + return ret; +} + +static void nvme_mpath_del_cdev(struct mpath_head *mpath_head) +{ + nvme_cdev_del(&mpath_head->cdev, &mpath_head->cdev_device); +} + static inline struct nvme_ns_head *cdev_to_ns_head(struct cdev *cdev) { return container_of(cdev, struct nvme_ns_head, cdev); @@ -1411,4 +1431,6 @@ void nvme_mpath_uninit(struct nvme_ctrl *ctrl) __maybe_unused static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, + .add_cdev =3D nvme_mpath_add_cdev, + .del_cdev =3D nvme_mpath_del_cdev, }; --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 AB9CD413235; Tue, 28 Apr 2026 11:13:36 +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=1777374817; cv=fail; b=obC9whZjLhJYfjk04IKeGsc4o63SdbZJJ8Z4QhXAbdVOcEYpuJ3U/R3M6YQTJhzoa7MnAB6KJ9oOrMC0Z6ttg5Z0m/Yymt+0G6Wg1oXi32lPR02tEUAK4yH5McB4IGlqPS/UwM12MdLQNpv8qQSjGCI8LI8UhP/Uz5ACwf+BVoU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374817; c=relaxed/simple; bh=k+nKguWP/JYWUXEBMpzdSGmTA+tpntXC0ZR66TncDpc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JSA0K9KB0O/TRxZQz53zAL8CHw6lPIx4sb+1g1PRzLDOPlUVPLPx+eXkEfdB/LTsL3uuegdEsRtd+ck6SF9K37YWPNMXe6AFJDiVmTUlbQVEIHXTKjNSkxqQCdWRbT0K7YQjFUTftqRKSPMQrIUbivWF7BRvXX7l9GkxHZ06RZY= 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=bZYm6dWp; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Ty+SHCah; 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="bZYm6dWp"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Ty+SHCah" 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 63S8s5TO3055274; Tue, 28 Apr 2026 11:13: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=HmZ2mrjFuwazczhkx6m1IyXezWkEUO8/pTk0nPpVzCs=; b= bZYm6dWpYbg4hQkgaBE0b1ol3hOK/wxNjSdsZHEWpkDU5hhdjT+vQB1XeMwpYjHv LRpFiILbAcTupYDd7yhoR9tiogCN2h5qlgAFaM8RLfC3iUfqLN8pXF1SeEuHM+Ht qwfT0NYELL0X6+9Y6OnR13BJZ1FD8Xt8yQkMf2Xu2dMGNa6T3azg/WSz+IVEnX98 jZCwIfxSdeCBGMazNKrhFxMx4A4cY0Dx76aoHv2y/+d1PbVu2Y6vYdB8UBd+aboX fMSG04NS5paL7efubneibIfEaP8wXn9arZSdTTwtob31zcRFFbk9Aa5SYQgjsxYZ qDUBDQkeI5CF53gI/zd1ew== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drmd5yc0u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:18 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCk9g004790; Tue, 28 Apr 2026 11:13:18 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011014.outbound.protection.outlook.com [40.93.194.14]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm3d3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TLVO7h6dmX+hVA6GZEdYRAAly5nHQkmAk1i8R1zb9QniP6LZ6sGRaJ2G7NAc7vXe2tq8Qlj7zw/Fbbnk/JytGN26eenk2cTAR+4FCNnAA2kAewLz5oTs8fup2DOq3nS2ggQWtrC4o/sEAkU/lt2HYFdKQRk1NrS3fSiINoi8noXT/24Zr5lVhbkuQgyiU4lz82kJh4K41PWdmTqXTYL140zDiK9yvX29XoYzxOASOTYycWe5O6+1BPLlZNx8lH9ISlRXg79OszUGP/xRPG6za286t+1mGdXhHkBCdShbd/dhrNwoU1vvSYnVUDM8760iVnV6hwGtLlfsYi+pMFl1hg== 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=HmZ2mrjFuwazczhkx6m1IyXezWkEUO8/pTk0nPpVzCs=; b=zDRjCvJpU5SeQ+tvdtR/dI/+4l2eXM6gDisf5s3nX7M+VRKibU9RACRgDH2x9F5Q//MM68ZSvXcpbyrRcEdMOhpAy8QWrXQXd0KlyED+5hFZMr84v9KoTJb+MhcHOMzzWSQCd4wEkaMjulhisBxfTdNeq/UyHTx98Kb4lsOh5+L3PZv5fIWsI9oMrY4rrI2/XaXfKgTR0jWqw6ViDrX3ocrh6JzmWMr7e9teX3PMTjmTSICVXojrtP9yxb1hwmY7Dq+Je/RfM5fbQRwa++6dinipIjODeuMHGTvo+AzQwLrGeGRBpZAafCwsyekNf08ZVUP3T1FiW5bdYtfilrXj1w== 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=HmZ2mrjFuwazczhkx6m1IyXezWkEUO8/pTk0nPpVzCs=; b=Ty+SHCahz+GP1IsaOevWRc4GLKLFKnQpe5mi/sSj5TTpGFdWx6yirzIbiVormnsNb9kR3qs4dVuIwQbgHIp2xRRBWy0OurO9vdCUMCRHIn0PQXbmnCA9+RCfKxspQIu2wjERaJxbU3Zanls8BqViU3/7tgledqunNKEd/PCldKM= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by DS0PR10MB6222.namprd10.prod.outlook.com (2603:10b6:8:c0::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:12 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:12 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 05/13] nvme-multipath: add nvme_mpath_is_{disabled, optimised} Date: Tue, 28 Apr 2026 11:12:48 +0000 Message-ID: <20260428111256.1778475-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0PR07CA0104.namprd07.prod.outlook.com (2603:10b6:510:4::19) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|DS0PR10MB6222:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a92eeb1-2e8d-443a-6586-08dea51722eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|366016|376014|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: kOWizqvVA73WwK+tnVWrWAao6hAwBChdjd8IwUq0mj2mGtVvNbJobcDfI5rrNBCk35mQKap1JJo4iMx7gGEuBsTnCkWnxfe/XVsfkRtWFTxkhxZXvN9Ub+oYenmCJ5uebmr9T1ZKlUqMd3weSqoTDEXGMl5yWphlOq/+zkD6BDugAq1/ghfPAkYJ8rLFCzi06r/0YOYxVKcZp8ofBc6UD9FM1Z2UZ0M7SMHUUsbDZYv5fw4KAgW2NEp/zj7Dbc9+vAv1SS8+YzBMH81bo0+EhBwSf7ajM4kC/KtOQEuXP5H687hEN2J2CQ7niWrCJ8jOuJQEDQniAqhxoUXoutbLqKQJvrJ/IEUp5Y8KYw9H+ob+Rv6BSLZr1qv13Lo+/Q9oL0O+v2mQ2vdx7k5ogvgywBE2xIimGn5plXBNJIM7D4GdGC4yUuJk42Oa9fZxCWxLiIO8XkPYgouPg3pGYLB+NjjW3TSgtIvEiOpMtJme1/WaIJ85h4vT63w2PVjosxN0FzY2xCPz8FcH/etQjdLib7uwitbxsWG+zdEG8Z3XjYuBzi4lp/mjyffRv5ezOYV9u6zjKWIwHPfq7u63KYnXaKHpTfWSfRpZiy//lNm1QAJkWwVvmNQ4aGpAeOjUnsXxTmLDSCpf2y9fNGaf+CcO3NqPY3RlPcnwofoNtknWUQHmLrxQiYakHZym5i/jsjmbrPpZ/XXV0P1Fwzza3cc1ulRvbAdmw7mTqBxbMC6kGms= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(366016)(376014)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+lJ6hNoSmbL7D2vM//6qqSR6U4PGVM53N1vcfC9p9DdY0lrZirBNGBk6jfJf?= =?us-ascii?Q?mplwXVhMplWD7ULsFwTl/atERR6l4ul3vrwnMvRqgR1NqyX8Ayf0OgxU1x+l?= =?us-ascii?Q?n81uG++VfoSkw+QCe62q/nvIG34JJQyDp5LwonVAP7Q3gjw6ewdeCYMBrLrn?= =?us-ascii?Q?fuz+JqIS1TMEv+w5x3ceB2mtZJw/pQsxC3RRI3AYkKBH6RZqtyq2+Tv0iH8T?= =?us-ascii?Q?DUtsdf906i90pUq6EjeDeWO/mtXA/x1jQ1K08GFGCT3DJCuFE/PbaSGCIp89?= =?us-ascii?Q?y4WIECcvQx97IHRNHyJqqxiPk4L0lwRJlzXgKqWE6CxzPOxywoPJEmtuFz8S?= =?us-ascii?Q?aUVhzUsURaGdpbEVo5AYGxm9/D2m+73zLgE0qMUIHANrxQmsPan1sFrJnxnD?= =?us-ascii?Q?hIeN2TjvdL52T8xOE8WUpdnqIPU8pa87k+HpjUpobjTQ1pddeJ/BBfplZBhJ?= =?us-ascii?Q?zWAu0lF+nCXkOa/GUtqkZbtRXXZQJZp/Cgylfm4xDBfuO86fEt9j2s/ezuTh?= =?us-ascii?Q?s8zIFMhq5+WuwzgLvOu88X10a7q7qNezkgxOgalaUqDdiDl1N+o0BddUEVtg?= =?us-ascii?Q?l+/1k90pElWvayY8/Q92W0y+7gUP8j8NRmb9l9cOAdMDHmtsehIsqaa7ooz5?= =?us-ascii?Q?DWaTYwRhu/8w2R29xqOKgf2DIprPOEWuqA2nNSqwPqHxNwLjHpA+FGN8eaqr?= =?us-ascii?Q?GcA63plde8hx4BAZcb1NP/XzIm+5rSW8K03PxLzdI1XXHBCPQljmtuR+jxm1?= =?us-ascii?Q?EXfJ6trAg0TGQzuAEuAJPogf+/J7h/otoDTroobzjqgjDmI1qs0EzYl0Gp7K?= =?us-ascii?Q?ELCAGbuv1gGQ2Dfifv7bI8NZWBNP7E/jaFgV+MCFf08Zm/Ps6YoSq2dAFPFv?= =?us-ascii?Q?saIp7HkMEi1lez/1B2ZMoPPeyw4ByT+GInMP8KaJ1o07G1LbJ4nyqkx0lbed?= =?us-ascii?Q?lzYVVgRKqUQyANT1MO640sdyCMJDHI2JCg0mSltcL+lUkYJbbl3XQkyMH/Jt?= =?us-ascii?Q?3ts1lDjOI7k2xhyfO9AaEXiYIgUD7uEZI1zBjuKtiavtFY7jbgvfGmDrkAVo?= =?us-ascii?Q?/ukFdekrUMpuIX9OLlSfpy3xLl7wa/oayEi3k9jDDG8g2Wwb31tqdMSdPCxP?= =?us-ascii?Q?Cu3lMNlvZZ6ogGIRw9u34TrRuWV+85kN/w+V7u/c+83JdCPIQZGYW66GbQ9F?= =?us-ascii?Q?h+0XIvhmQXCJA6dJM7GhMt1NVvYikPoCwZ2b8hVxyS5V79XAuE7tPCvVN37j?= =?us-ascii?Q?nkP5pTEusCFF9yahewO58RD6OxIpy5bvB9WnuM0qodsA0h4EDkvm9TGIQBJd?= =?us-ascii?Q?4TPYBPnVKlwS3QQl5SDoQmHpiFzBrhE+AMKJhoSXVmK4PQdZ526gP73LtiyJ?= =?us-ascii?Q?7zVQXf1MDCMr/gKNCPF1SFVTvLSJylaa2Fz+3LuW233l39jplOxRgm7NdKhP?= =?us-ascii?Q?HIA6Qu0yNZiiZL1xQFhg4ibxlYSf1zK1gNgFfI71Bp8YLToFDv1nH/q7Gcqh?= =?us-ascii?Q?UjIzJIsp98LRUZJSSk7trtUdhFFfNyAzRQqbF9bBiSWu7hGBsPbAunWJBSpB?= =?us-ascii?Q?cS7lKZ5PlQt6ElfNEjNoOm+v/g3v225sZY/ooBS3YGVLnenrSgDV0efsnRUM?= =?us-ascii?Q?CGTBlgQknHX2ATNvO5yujFNPJR7JEIcgZt8jFO0M7WIfSFRqonNxHW16nvvl?= =?us-ascii?Q?GoZCYFoYBJmJI55tNyPUSP0EafBK1Wpr8fOsDjyW086Gu6idzGeurLeUdmZi?= =?us-ascii?Q?x9WXTQQaiK0wsn4szuBP5NajR7nLApM=3D?= X-Exchange-RoutingPolicyChecked: Ps05diRv47C47AOobLXPRgoLjIcJ8J6CWZHLNA9QTdCXDgYHu0YKACsczyZ1W2YOd6vGMTJXnTLv6tnWaw8RSmO0Fiyj3oshU3KybSck8YukSuH7ZCsgHSxWKR82Lrt8YilgJ1q05RswaTSS53peH4msDrbAAdPxhp5V5ecIbbldRTBHCVFQB0eeXJu+m12NUIBb3tIjJ1QoRESFcKG2ozJQc15k2yDTRokghFNHAR6lWQyxpSyqIFhEA0e+cQ/iZ7AsaGdWl7GjkVl1pwZz4ODsirXlIIoukvKzD0m6EwkavT87ChjORGJHwKpzC6ivzfDNIMQ40Holifh+/6y8uQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: gQbX4pkE5ajJcDelTHQFCCYRDLlDFIafFoZYPTfpCcvnKqmeagyVhgAypAgINdzLiGZNf4VAz93kTxOprqjeo3F+TUI88e4alJLDiPhXarMVBdhF9Kl+pRe5ewnyZpIEK9XzOVkNOFSrmN+WM/saTW5Plmi5cHI+CKrTAzkcg5GGOaIsnbURZDxaH48586NC/IHzc9//ar+uoHX22EarfHC0xlMKw2jch5QtkV/+m2zMKPRhPybMlGhKxp6mo/FY5MzAIOxa+AFiUnYAvbsmjQxMbdMRZawKL2QKVx4+UfbJNAOIYLa9LjKdSmQkWV6JoTUgmUWVH8bMFK9bXoekClXb+7SrdMWZey/dn813lPDGwLm4Q32uTCOGpKC9yBYhVszoaQDhM6oMRA2pDkz6HRCG99oTtzcjh+X5onzwVMvxxNz0cVIQqC0TqVdx3iLB8nhbDoX1Ym6C/2DzN4UfsH9qzuYcOK/titnJcnh/geV9ll75EUf9l0EpsN76BgEdGetpXDMPSVGv09+o4cASX4fWI0VSP0srubetj4Og4LY0Vc+gFH++glalk2vOotmEtxDn8LVBuThHaiUsSy1B/a6hZHQGwAB4fqx8/i22SmQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a92eeb1-2e8d-443a-6586-08dea51722eb X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:12.3685 (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: GCjlPTce+3Pa6UVZNW7MsIoM0kiMK6pYMbva4UNt9rDQpBRJTC+IzrDBSTlYVdA8ijHNP+1iUUzSyN4nSWTnNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6222 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Authority-Analysis: v=2.4 cv=V/VNF+ni c=1 sm=1 tr=0 ts=69f0964e b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=QNd2FcQEdVqeu-mTEKYA:9 cc=ntf awl=host:12309 X-Proofpoint-GUID: j275KCDBDHBr-U_HvSpiMn2Rrw1jaQZf X-Proofpoint-ORIG-GUID: j275KCDBDHBr-U_HvSpiMn2Rrw1jaQZf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX02QiR9WM9b+6 dtfVuIaTu7UpnG+YAVU9KC3ZfLsCvzHbNHG8au4PFhPrO8gB7YQP0FJ/bNIKN4BXCg25KNQs4/J f6OYDhy5lKAtPGRRvP5RrC8egFMNosltgakpldg0n6BzKpqn3GKTqRH2qFmXMQk642pVRxxDtwx M7FBoP5WkE42fVNqyelGKqf4Pxf7gmrp+xazpuVqwGj0g36dmUX3SkWYtAL+CcMu6cp+3bX3EIP CbOyK5/LytIpI8p00unr1uu3RgN6mMaAzN1FreQMHQID4mY3NyQzIOsUqs/Fa9x4Q28ivwaii3e v32oBTsF8W4nwbGeMj+Z/W9loM4QZyi5k7LO7KpX6VefVhipPsSW7hV+WG2Jo0Mb+u7fDhYg0Jt lCRdvvxkBYo3cB/41tZO8sB8zpPFeP3x9P4Af+EKmWYM+Rc0/njVS2bvzxy8le7rTXrq7JUZhOw J9UQMVPIdj9cYhsIIhn0WP4aHjG736gSZwkMBlpI= Content-Type: text/plain; charset="utf-8" These are for mpath_head_template.is_{disabled, optimized} callbacks, and just call into nvme_path_is_disabled() and nvme_path_is_optimized(), respectively. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 0bdc7e0dbce50..d9ab52a29ea8b 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -291,6 +291,11 @@ static bool nvme_path_is_disabled(struct nvme_ns *ns) return false; } =20 +static bool nvme_mpath_is_disabled(struct mpath_device *mpath_device) +{ + return nvme_path_is_disabled(nvme_mpath_to_ns(mpath_device)); +} + static struct nvme_ns *__nvme_find_path(struct nvme_ns_head *head, int nod= e) { int found_distance =3D INT_MAX, fallback_distance =3D INT_MAX, distance; @@ -433,6 +438,11 @@ static inline bool nvme_path_is_optimized(struct nvme_= ns *ns) ns->ana_state =3D=3D NVME_ANA_OPTIMIZED; } =20 +static bool nvme_mpath_is_optimized(struct mpath_device *mpath_device) +{ + return nvme_path_is_optimized(nvme_mpath_to_ns(mpath_device)); +} + static struct nvme_ns *nvme_numa_path(struct nvme_ns_head *head) { int node =3D numa_node_id(); @@ -1433,4 +1443,6 @@ static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, .add_cdev =3D nvme_mpath_add_cdev, .del_cdev =3D nvme_mpath_del_cdev, + .is_disabled =3D nvme_mpath_is_disabled, + .is_optimized =3D nvme_mpath_is_optimized, }; --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 237ED3FE350; Tue, 28 Apr 2026 11:13: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=1777374817; cv=fail; b=t3S0/hVx0iXdsEIl1/wc3mQJuG31veoUSXyGJc21c/h0V/dgnEsVRqVX/09ydnum9bxD3JilSgBK/dJMtreiCjWDUsYxagRDyzQrinz3zECG8PQhQff1EZIYwfU4yE3syKSZa0DzY2GTTvCEHM9jlnBXROm9ln2K2UzEtYluZvQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374817; c=relaxed/simple; bh=xO2vFIiSTJ1GEdtw4DFD3yJg+4K9w7Y9dQ/HZVIkj70=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cIsOl5huZCbl/qVOUIkRAShkwVJ3otEtJcW65JCmIMJaoFqz+yDkLp9r+91KRwUs4G36yxxt1RYMmLz8wwax+K35ENyWW9Y7ftj95Px58g+6T13XRwYHawpiJ9IH7cxXoh1gYIr5EeG37XcW9KuXYAxcmIj9w7y1BhAauDkIJDc= 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=ieqxfm1Y; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=LQv3HVal; 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="ieqxfm1Y"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="LQv3HVal" 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 63S90Q5n2603467; Tue, 28 Apr 2026 11:13: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=ekbzpYfL/aT4xGzh5rJF5P8IKhqhx0GynjjYt+eaWbs=; b= ieqxfm1YRzudSOggWuS9H/y6joYjKSCuK8ga3shphuA0gi+ou/9Yga7ppOtFUp/S D+ghx6md1nMkQlHFzHnZ6r/OMCGXsHw1w0mO9GSLClsY1yk40zGH3TbLmguFcatw 0fSqOCxfVRPGnb9AY3/AJct462bx4dOU8v6i8LU+QPXHBQcD1IMMUlZbdIScH3CP 4Vodrilpa3q1A+H76llxe68A4KZZSvbk/nphTe6ngIrChp/CpJtY/86djuLcdQAL Umo/OXnfQa6vyTTCtAXFu/nPWzhpyqnCRNLkeniPrkbQIpf7DtU+2Am6locaXKVc TsDjPHf4sxbgW4iNRybPLQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drm1cy8vy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:19 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCjEX004724; Tue, 28 Apr 2026 11:13:19 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010028.outbound.protection.outlook.com [52.101.46.28]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm3da-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:19 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p3mf538N5yoNt1oYQvYnh7b30iOlT+A3m6NsLGZGzwXkmHR3wpnoMTXe/JYxM3hec2zYUQiBgk9aeNxlQAQMbMIysJrmqmU1l1BjsJVcG1f9mPagjp61dEtwBrxAm5ZxPaboD1+J3ijyVlFiZfO3V9r+jRL4EySq3XlllIcJ5mvdOMqc4lE+xPAvNSZjADP3rN2VBmmBI/7TP+WBeQAyVDw1COKUCsER6EixPI6t08x+V8bG+ka99dYt081C7b2dZJaf0gxwcZibYCUDcCMksJtgnyjELbBMj4ICknzgSWbsEVX+YLR6JaQmO3WtVCnD50djN1h0Nyvb+d1Ck4EPZw== 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=ekbzpYfL/aT4xGzh5rJF5P8IKhqhx0GynjjYt+eaWbs=; b=k+m1aC8Y0TnpPrFWXlsIY0rozyrW5m9WYTk1twU0OyiZ2thjcGJG0tnkwy627qv4lTSOpRqsX+QHDkC/Om1z/c5BQeO93uLAHltifm+Q9toHsZyEp+iL2vxr7M2WyPOa6UPitg9CHtibY1MphxSJGxIVNhbNz9evXF8pvVV7NLTNib5UbOpyIe0JoUbsVGLTlrmDgR9C+QyUOtpbCVkzPsC+ipyM5pS/hf0vl/BjSymctrEd0x7nG4HBHbE2wMufRsXhLIcxiI50k14OlWVN4m2FZND7X2FqaNFUoa8a5heX718YDBs07HaGIiDJSFEiOKUpuB97usSzT44gNFpNpQ== 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=ekbzpYfL/aT4xGzh5rJF5P8IKhqhx0GynjjYt+eaWbs=; b=LQv3HValLyFvZwakhGn1zLne4XgDyxD/D846AEMdM0AN8jhVowIzRKhyialeBupAYT43Ha/0OKcAdQF/fr8kLtO52iGQq/Uzf9p0m9FjV/2HBmjVrDsbwbYJa+FLsyqvJ3EG34dlORmLqgea2DFzjgKjaLu6YAqptbQY8qFysL4= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:15 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:14 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 06/13] nvme-multipath: add nvme_mpath_cdev_ioctl() Date: Tue, 28 Apr 2026 11:12:49 +0000 Message-ID: <20260428111256.1778475-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0P220CA0029.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:d3::27) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 999e3b99-6934-4f94-258c-08dea51723f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: B77C/DjuX/3f8dNvrrBho0qZbImwaBsH3Fn9aX35NQx+dH56sU5iGT1JM6PDUPMrYCJuYdnFp7CXV+PfFeoFK9ebGjyKDhKzLm/ERYLko6GZJxWqLkDU3aPnMI2gILNz5GS0o/EOXD2KoX5kKQUvIBEwRWLX/s/Jup+sBU49ETOPa6q4lF5kLO9tIPj9CWP7Y+o3Z7jKwzT6rpKVgGZtccbWeQB6H5Eviaz8kWfPThe0r49ITl5Mb9yR0I1WTz5PQjVRB2EBs1x3fCbpDfjUNX20SFpQSAv7LFYyeIlnAhpM+dUPxhLjg+pSujtIp0D+rooefuDmNqSNqoxXs6szbNLjKzQprAIGZrAJ1tevQv6FxWs1g0mabtDxxBXmB5O1McxkWpB3VWrjfeGB16DtQbhcADuIY47CpaKdqPhii/ag2i72IqDJaLCK0DiIXlC/pGsY4utGE8JtSyopArLd8rJwjerAfcjPm+kxSNfELEjxwe9dMXYXCxhyRdZlDlTwmWWSpl7tTa7ky5gCZpk3KlZLDWC4t248gVRnpSoGLKyZCyR+1nEeLEBM+Am2nx001C3gI3NAjQXRHTOiKmLk1j130JU750gIqzIf/bWVAdLr54w/OCL/cvE1r9VZtGZloU17Gf0aJOaST1Zd7BwtkW87QeES8MWheGb5w/N+83o3tHr5lvdpRBNoIYt58Gcg9M/BXu64x4SPf0M93lyYB+KKopk2GrjEM0hm060JTkI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?K3AfqgueA81zLnn6oXoiTuwPhZs9D7L5vOE0ZC/9QJ5R+v6P6B/34+giOh+J?= =?us-ascii?Q?J0rTCUh3Rf7MO3Un+cV8S8nCOmhmYfxMgNRflpNrBBfyL84AJYgl+rbCqGfg?= =?us-ascii?Q?hWxLQfFiGaGtMZRsOJ5SUuaEDIOeFELAeojZp7xbzZ4hXJvLyc2F9FCWQM2A?= =?us-ascii?Q?uvN3RSvV6M86HqBCi9lJmtFIrEy9w/qMDNOVtNgt3heZHy8+H+sSf+GNPR/2?= =?us-ascii?Q?ib586oLhHY3d3DSpu0N9HuDFO4WbvUtGcJnPNqVRjzQJBHK+5xuEjHsZqqvC?= =?us-ascii?Q?iwECeDOu9eTVrQUlG6NoRYm3uT81gl6tVeN7KVUTENhlj1geaMJbUtzTZbd4?= =?us-ascii?Q?FTQLPBn7r4J+2+XCXiuR0BLyCj8WOR5wYKCmtiWZjvpvHQBHAia9M42zoGQf?= =?us-ascii?Q?y7gVOvQMeff0j7h0SXt4Bd5dZTRuRs9H6bvTjl2L2pW3c3bNGCwI/04KpT1D?= =?us-ascii?Q?CyL4sA6kXSVySYyYEivXJH1cLHPo5YS8A/KY3ML3nvYJR+qHTgDExyfO21cK?= =?us-ascii?Q?5E5BGhl3prK4kiR1UUdiZOsg73VraGUdLGk8G9e3cGWfcIDH15EOI8d4v4Fi?= =?us-ascii?Q?iuSo1kTC6bWp13trQcjWGgz/NAn0jklNp0SP+E5nLpJaZa6ReScfgOcS/cDR?= =?us-ascii?Q?HqDGGBi4xoMve6OWG/vhC7jphdfwUpFWS0+S0AfGPLi5ugASyqfsfGskzPxs?= =?us-ascii?Q?L9eLJuGLB9RNcVxTjAAcQmUU0wcUZt2BnNuytL306jPs4VSYhlNL5WSloyPt?= =?us-ascii?Q?yJuB3P/zbZuN1ZblgEtT42iw8L2dJ/3PO8ljFpv6UBTCxyFjNVWSzFyeDihi?= =?us-ascii?Q?ZmdUpbWVoY16ryUVRdK8r6h46Sg8jWi67O9p9W9QowF47YZ4faAXk9Gmh8es?= =?us-ascii?Q?j0LyGJ4cuUonnyjqk6Z56odRadGht1ttPzO/2WeL6dztCI2+0/s35WoGxD4I?= =?us-ascii?Q?AQxnjWvkSZoV2fKnXaZ5TYYUGET5fxsbJUdxn2sKJTMyglKj25zmZSsCvSyE?= =?us-ascii?Q?Crty5a7sUEnd6DZT+5eKji2xAJ9iNrNN+N+tiQhu4d98f1six4EZpGtq1tsP?= =?us-ascii?Q?C47Od22RcE4iqAsU42sNZhwHRiNLsjw2eB0jfpMQ4a5DfZvp0sIVyLyQGd5A?= =?us-ascii?Q?KJYfbdtDpJYjR1Uu/LYve1yNGw1Jy4u63713+2p8GMYhdmL5TLMFyu2i2TB+?= =?us-ascii?Q?RpNsJYHXB5WJlRIDTKU94eBeeg/zVObg1JZRw8yTkYASkmv6cOggiqQKihIJ?= =?us-ascii?Q?hoRFxSm3UDyjAyVZ0NANA9xhfCbOky8gP2n77pPcl4ijXr+HVZLpdW3Ar+U8?= =?us-ascii?Q?yYSLLKabL1YxSq4CiuU900t3AVVDQgw1xsyN61RDXBqQ+LOu6X+UCXo66sbB?= =?us-ascii?Q?b9ddHU3/TDPtGkhBUMduCJ2REPozDIs8DT3nYnmwJ2R6rcohwJA/qupWYMnG?= =?us-ascii?Q?zYp3whII5lfpq1OZmF8Ky7eqfAczctamNUZBNaa+ilszc0jPwxjCZO0+cD1T?= =?us-ascii?Q?+N10pnoELk+rw04ve5qcz+E9/zToHDqlyS9GMS6oZur7ELagHZAjTR2YAF1Y?= =?us-ascii?Q?jSkiwvvGX+UHJq8dAqWpB1Q2I0LVMDDdjqjhYDYiQnp+pL6Jc2vF+eKw2KZc?= =?us-ascii?Q?wo6Suhr3QIVhoCMFKJzoCpjXK9P1jPfw3CmwREmhU0UNA8JzF1pS2yCFnJ7D?= =?us-ascii?Q?XmrnOCOyKyBouGsviXoZxnR/myDyynHnx9QdJzuBOWviG3LAJ3QPm24PgWQG?= =?us-ascii?Q?dPs4gV5fxCYIm4P6/4NIHbqbBUfk4nI=3D?= X-Exchange-RoutingPolicyChecked: gFIsA3NXSG3gwqdbQqiLx/tQDduTEqX43+y1wj/0fqI2jBGSAoTLt9Zc4D4K2uNMnn6Pv4xCuiDxYQIOvHtzkNJXWWwO5J36B3+yGcFxe4Y4/C2EShtqF+lKCzLx8GpZxJIXmCTMCNZSu6qlOx5WpQF1y3dvzREZNi99UkbAD2v/9zkojVCaHhVxHPmW2rACOc46sO0FnrBY82iffcENcnSaU1Lr0YWIKfFDGMnEE09PNcUPS88ZRnOjeJVrwe/a0Cz3485Fzb2ciDD/1wzQQAsx0w9DO8BVP9cwwvsAJ+MsVrrzfW0NWpr6CH9uXXjE+iMWtcbZ5NfG0VLaMjzpoA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: vQwGKOcvEMuDxHj5Noh0tGYjvD21QCs9Iz/XGQgSJbtakYroO+G7V7xlN+6MRoyvxuKQd6wj3NUQgiQd99yZ4DkUViTEJmvDaEeWVl1GizFfAQVvxjEqmCyp8uAWfXv28IB7lbpCTFh6fgijhjkRolGswrMDRZhkH1O9cddnBGwNobw/O6CJLuyU/LfjE87XEWsNQtFYr0A/axgKrImq9vMUWKKAFAIkUYGM0YlEMcNz0BF3CAqkv1UW4+iu2a4u6sOYvDiscONJ3/oIZFIQRN1Z5yJbjzdSGXsmYJRmykkUZWn566DQhOoaAOmdDAvSmnpCZ/RPXPpDuTKkGLpVe8ymC+hjQ+LJIA1yhacv4xUewFQz2FC+8xsFR5s0A0FzRYfLkpy2U4TmkAYeSWedVi7KIjeCe2y4t2vI6FUr5ebCL29VvdW65IYV+aLe9sCU5zogRDcMvHo6eWjE/OuGUbRCJcXFLI0ybRLDkLFmI9USEyFWXCGScBq/g7faVsQCvB05xaR1ErkyRDqa7vtKuFvLiIoRf0tf7kSRFzKiZTI7Udwjzqw4VR66c1f1ruzIxcrpGBM0ziUm9FLYkSdantJ5Li1iOK93sN6xICmWgOY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 999e3b99-6934-4f94-258c-08dea51723f0 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:14.2538 (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: 17eZArNLIeJZp4iXCEd0vMscRqbFyOy7PVAiheHXswFgVwQrUuyzwG6qw2EAI7dt4R4QNsAcpz0t+AVag/4t3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-GUID: mMRSdKEEDs7gj1jiwqMY0YWtnHXScRfb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX+r7z0QzC87yR mrtR3qXs7chdArcbs4aLpd+k0GIkAOdm+L6E1JMPqeR8ZJOdkDF3AFMyozOkO8gQp0V4vPTFZ6g hHN9S6rCY//diPQm0tCpnGAODzFzQCZFJhlLzhktCCJkfQglnxC97V8d6OM2o/oBVVSmYqmLS/2 F56UYB02bKL0+bwIdV1LHJ42aIZunnMVFO8OD0639UeczX87neiYRA4SDD6DhiNkCw8EuNSmVif EkeiNfVrA30Z55es8I0wjlKjR9U48tkyYaSW6EwdynsvBUICFhhSR5SDHc6hkD/5JkJrSdNMWZO n1ixIt0jSRWqKJVRG3CGne04mtDSyHAHdoQVTEIaNBo2Pylbvw4Eip4/4lMeRqNlyzQUdHC0klN /uqvVDFGh97jy937zPkoMA8fTWwthx6oVQcewuJpxVS7MnlEMEBYggkNzRpOu6dBhaPWK9JMJjx RrZvq3Y8MAAKU/1Emf/ynRaIJVh/G1yWcS5miYgA= X-Authority-Analysis: v=2.4 cv=I89Vgtgg c=1 sm=1 tr=0 ts=69f0964f b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=yPCof4ZbAAAA:8 a=7UCe6NBafOtkRfyzdoIA:9 cc=ntf awl=host:12309 X-Proofpoint-ORIG-GUID: mMRSdKEEDs7gj1jiwqMY0YWtnHXScRfb Content-Type: text/plain; charset="utf-8" Add nvme_mpath_cdev_ioctl(), which does the same as nvme_ns_head_chr_ioctl() Also add nvme_mpath_ioctl_begin() and nvme_mpath_ioctl_finish() - they are special handling for how the SRCU read lock needs to be dropped for the controller command IOCTL handling. In this, nvme_mpath_ioctl_begin() takes a reference to the controller, and then mpath_chr_ioctl() will drop the SRCU read lock before calling nvme_mpath_cdev_ioctl() and finally the controller reference is dropped in nvme_mpath_ioctl_finish(). Signed-off-by: John Garry --- drivers/nvme/host/ioctl.c | 37 +++++++++++++++++++++++++++++++---- drivers/nvme/host/multipath.c | 3 +++ drivers/nvme/host/nvme.h | 6 ++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index 8844bbd395159..ee99b8dbcdfff 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -624,11 +624,9 @@ int nvme_ioctl(struct block_device *bdev, blk_mode_t m= ode, return nvme_ns_ioctl(ns, cmd, argp, flags, open_for_write); } =20 -long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long = arg) +static long _nvme_ns_chr_ioctl(struct nvme_ns *ns, unsigned int cmd, + unsigned long arg, bool open_for_write) { - struct nvme_ns *ns =3D - container_of(file_inode(file)->i_cdev, struct nvme_ns, cdev); - bool open_for_write =3D file->f_mode & FMODE_WRITE; void __user *argp =3D (void __user *)arg; =20 if (is_ctrl_ioctl(cmd)) @@ -636,6 +634,14 @@ long nvme_ns_chr_ioctl(struct file *file, unsigned int= cmd, unsigned long arg) return nvme_ns_ioctl(ns, cmd, argp, 0, open_for_write); } =20 +long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long = arg) +{ + struct nvme_ns *ns =3D + container_of(file_inode(file)->i_cdev, struct nvme_ns, cdev); + + return _nvme_ns_chr_ioctl(ns, cmd, arg, file->f_mode & FMODE_WRITE); +} + static int nvme_uring_cmd_checks(unsigned int issue_flags) { =20 @@ -690,6 +696,29 @@ int nvme_ns_chr_uring_cmd_iopoll(struct io_uring_cmd *= ioucmd, return 0; } #ifdef CONFIG_NVME_MULTIPATH +long nvme_mpath_cdev_ioctl(struct mpath_device *mpath_device, unsigned int= cmd, + unsigned long arg, bool open_for_write) +{ + return _nvme_ns_chr_ioctl(nvme_mpath_to_ns(mpath_device), cmd, + arg, open_for_write); +} + +void nvme_mpath_ioctl_begin(struct mpath_device *mpath_device, + unsigned int cmd, void **data) +{ + struct nvme_ctrl *ctrl =3D nvme_mpath_to_ns(mpath_device)->ctrl; + + if (is_ctrl_ioctl(cmd)) { + nvme_get_ctrl(ctrl); + *data =3D ctrl; + } +} + +void nvme_mpath_ioctl_finish(void *opaque) +{ + nvme_put_ctrl(opaque); +} + static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns, unsigned int cmd, void __user *argp, struct nvme_ns_head *head, int srcu_idx, bool open_for_write) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index d9ab52a29ea8b..5e49cd716f859 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1445,4 +1445,7 @@ static const struct mpath_head_template mpdt =3D { .del_cdev =3D nvme_mpath_del_cdev, .is_disabled =3D nvme_mpath_is_disabled, .is_optimized =3D nvme_mpath_is_optimized, + .cdev_ioctl =3D nvme_mpath_cdev_ioctl, + .ioctl_begin =3D nvme_mpath_ioctl_begin, + .ioctl_finish =3D nvme_mpath_ioctl_finish, }; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index f3026da0f39d9..1ec45cce05c9c 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1053,6 +1053,12 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *hea= d); void nvme_mpath_start_request(struct request *rq); void nvme_mpath_end_request(struct request *rq); =20 +long nvme_mpath_cdev_ioctl(struct mpath_device *mpath_device, unsigned int= cmd, + unsigned long arg, bool open_for_write); +void nvme_mpath_ioctl_begin(struct mpath_device *mpath_device, + unsigned int cmd, void **opaque); +void nvme_mpath_ioctl_finish(void *opaque); + static inline void nvme_trace_bio_complete(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 89CE341B351; Tue, 28 Apr 2026 11:13:38 +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=1777374820; cv=fail; b=Scw5u7VdKKCpA14f+sobSYKwKAfPnbk+6e79MVZ44wKj21VS0qHdrL1qhRexOcJljQWxxcOvkME8vshzh9muNzoWabS9QO6C/VkLIWi9dv00FF8kTa6nmZuEkInK/dDn/KZmT2TkGs5zuJkqesQj1s6lTOuMt7k6WE8JpwXuElY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374820; c=relaxed/simple; bh=Wi6tylBs3fB1FhQ/0bPVBT+AP2dgRGuXMBIDnGPOvMo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mo1Ms/2hsFYwEciSzwo6ROyMMOzdYOyhGQnKec2Q9RoogcKqK27MZcBRTpkVmrKFrIfI8++r0DBW51j+zgHQd3BZZkKz+sn+n7zfs5mbxoelmB9UXnMzZBqcBifrB9kvL0Onq2x8gy+gvusoHfLg5f4/wJK40/YVqs540axqvSA= 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=aSUgmM29; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=tob5CX2T; 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="aSUgmM29"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="tob5CX2T" 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 63SAvuWB2722002; Tue, 28 Apr 2026 11:13: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=jHe8r7DQwGQE+NvChkqnP/9su15BOVjctut/ASsZKj8=; b= aSUgmM29d6WX6GSkVcPyEUPzfel9zlWUceUvcSgyPh1MZdXdUx0jrwZFo9GGZg2b tsiebFVhIFDSlpGVx8u+wJZbuYetXmf/AorVR6+2cjgJGy0ZcZpgF40YPD9IwNOu +unZpmgNQUvypslPOaaqE2XrvsAHNWCQVtldybF0l50k9XqpG0IwCS9XrV/t3Hns gNjJ1eJPHFJWYcSdYj5fBjA5+GeLuRRxDfsaGIbULV7XyV4BIGfwzAcKgApTGGqs vTZzotTg+UeMg5wU1y4BJdJ1GpnmdGZb79HYsrx+VRm73LhgxcIL49P7/8HwOZ7C CekEiuzIGWErWDihbDEnDA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drn7t78fx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:20 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCjEY004724; Tue, 28 Apr 2026 11:13:19 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010028.outbound.protection.outlook.com [52.101.46.28]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm3da-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:19 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sFyWvcK7TURT9OsOzu88E1ttNzx74CF+VmCCYhSgTJc+W2scpA36RWvLBJYgd1HeadVeSTf5VExMhFzdP0XLsMDYTkXiBo6tn+u2LFt8hbs8G+re3qaSWSBR0ih+SgqALukqTSvzEs/Wn+nhU1E2rBPdwvPaFq5vuxp/l+XY8GjJh6NUHhojfnNtNaRQr7xVqfzIOg4e7PhtlJ2TZm7esur5ePIc+Kzk7dFGy7+alhxXY2B93ZexGRWp/HHZ3we60P8EXq+YNNCTbg2n669ao+w5ZFvQrHVGbHBlkx8qGtHxTh9FIto8F/ry4FvguWCU/Kofe2dZRiNknsyAOaGsbQ== 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=jHe8r7DQwGQE+NvChkqnP/9su15BOVjctut/ASsZKj8=; b=h6hGKthP6utEQopoqkfk/2GJVe587D79C7RG20ZlP2Oo47h2z3ROXQzKSWwNvTjdfh5kWv9zqlsrTreEm6UL78Yx28RSY0BGjv2CX5u481jL/dfCYgrQ3lb05cOGZTdVfbFFWkANbs+968SIombL8/tciZZKDYuicJVj6xiTMP9mVwAw4ueSnHevPN/eoEFEYmKJ/120UgcXmqmw4ZUgAs+72yi1X1hPEGSffvC+Xttki9uSCJgiEIZMoXEIiJC4C6UEwFQQYwaVgBG6c1v3dpoomLeMJEsaX2B1KLCrZnb+4QxWnb4rKx/s0Rh+WYOEcN0tpTnJw51CISt6cLxBaA== 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=jHe8r7DQwGQE+NvChkqnP/9su15BOVjctut/ASsZKj8=; b=tob5CX2T89lKNDAU5AYEEGUew2NSIaBaIKOOjFKmdHBNxO2J+aWrJ3tVHhh9MCaK5fv2V63dP7y1nNpbp7x90dP9MZyw8YKlGL2ybG9Xu+2qs3SpWexTGkpBJvybnhWZWBptNNB+QbGnGd38hpslPyK2I9lDa5sxlGrsJVLj81Q= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:16 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:15 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 07/13] nvme-multipath: add uring_cmd support Date: Tue, 28 Apr 2026 11:12:50 +0000 Message-ID: <20260428111256.1778475-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0010.namprd03.prod.outlook.com (2603:10b6:510:339::27) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b6ba0f9-7d51-4edd-5912-08dea51724ed X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: HkBeGF7mzDEgJIVStNySw7nn8OVdioiRP3CP6N+qbLUXoCMfjcJnP8AVXrWIyUCf6d3PE2pC/fAVAzt4hLvMuD8/CXMuHJ6HAOHdikXxd4RhEz4s21+42NUwxAffQHH09pKXBR9JOfbX/Gf/qpWc+Wnpfec5abGCG8xZcvu8f6zkcxxD6UZFWkkTdbYXt9PsagPVZFKk5cJ5IvVme5rahsemNCqgsZbX3wEWk5kL2B8t0xEwCCUi3Z0FyvwmtfsMi5UIGtCiruzRZQWJsqQKGHK1y12RF3v7NF7kE/qrSnZptsg3wixmVYQ4uvs8Ql7h8VWFWli2gM65XtMAEqutw9DPLy7NvVKaxTihjRkic83F+4/OaValyzihaIWxcSG8obzl9d2eakPP/ipDj3YooIZ643B8TBDZ8BKZFZ7D2y3fLdBSzg9D2eCSQPr8XsUCOnhjc3CtSGwH4zX+/rfxG8pVzsQoliWct12eR0iPhSvd1gvNFifKJnI48iHrkBLPZjbLQNys7W2YobSFXOXIgI0qfLUNhhL3fZaCCBigOgo89cW9e66UMHiDl10eUFiYt1ZDQ0Sz+02iaHcxeNmXGeWaSH25ix1uRW87lfGWiDBRGey7OSKp/mSAKboljiYTTlAR7yTQ7MlQrc9LHxSyzFL8g28YCzI75rTPXFh2cQZMycrQMY/fnmkHEwgtGN3qtyjpZ0D6QgmV+oR8uqVomR8keDiBg2Xr+YTvZ+UnEL4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WJrENEFbjT7hBhiV9gn9oFPSM/2S4ZTjW1GxdjkUe61KllzIdEeoJQJQMQfO?= =?us-ascii?Q?x0EuNYAieU7HHKsHKA6g2HuunrxMUfBBMW7txGCuL9C+/esqK7stEZSoL4no?= =?us-ascii?Q?bZoB10nNLx6EN+xWslHbqzALl7gKnbPsttxdJxjE/tT5KMC1CgLu9beBO8M4?= =?us-ascii?Q?pt8uMgbS0YfgfoyzKYytra4j6pXevPmghl0EwwyPxycDWYRbKAFM3iQe1SW/?= =?us-ascii?Q?UzgBA2B2AKOyA9cCP6wp+sBTYjw23CSQKdKzr3yEClpURGC5CQecfcq6/irt?= =?us-ascii?Q?twInQVCi9xQMP5y5O2U+SoEODPK2YVWH77IVNXGxSgwvi9MBKjU5BDUiPxHd?= =?us-ascii?Q?jdCo6DusgPD9hQ4AnJGHYXdUW8eZtWUf1x9H9UOAYA9Gc6XXEtC/Zk6/HS9A?= =?us-ascii?Q?TWF73tZAgBY6U7SNK0yKskt/UQM4lUpI1m/KI328ic7bsW4d8t2/z0gw052F?= =?us-ascii?Q?25gkFE3C4aZSf4+3aC/AGv5dSrckFh3lQUjMsx3dW4Jp+/F4SzGFfljUtsu4?= =?us-ascii?Q?OmT746Jw7Mr1SFY//DAWvsOj8pX5/92F0bPD2Gsw2rgHJqfEkDq2XLO4NE2n?= =?us-ascii?Q?ANvorAx6/gCX780Z1pLCj/Hs7xbetWRstSbvq2K1Y7sy8c9ulB8H9kJfGaiD?= =?us-ascii?Q?a8gwJ0FxQah3TVI2W8uofU6XBBfuXrP4JQjnaNCdeW5Cl2VuncwV72fU2F8V?= =?us-ascii?Q?vS70Drh1u1TrB0N4bP1yK+6evTG6TQpURObQr2WZH8hSJhxjhV2/7Nxx4aPB?= =?us-ascii?Q?2zmAuqj4B2bbg8AriQRa4F6CappRlY4U558VJK8aEBcPKVNxU5fK3eDREOmx?= =?us-ascii?Q?Amx/sxL5cyn2oaUAzAGDBzs/X+YO6ACUlXVQDCUDbF8Geo3Yom6tcExAR0Ku?= =?us-ascii?Q?LQfSF3czcFdpE7usM+0ElG00q+0jxElrhO/szQWtWTIqQCFzJaVoUISo2bot?= =?us-ascii?Q?YhVcDocfooaRd32qc8oqfGWqxb7kpx7UidrX7H+imyg6GZZsAnIfFeoJG+gR?= =?us-ascii?Q?Auz9P+pWTxe6J0lezmY62GNJdLEeNXeOx/CdK+LUFH85rjf74ycQColmO15S?= =?us-ascii?Q?1tLmGr8b/43p2AWlPJSXUpPPPPQMg+gKFevnJYTjRgOHgPWRhBZ5M+rljnD2?= =?us-ascii?Q?xJYtIwG5miqoh3cUSInqgU2X0uqErq0yumS1GVqjkTvXMR9GC+IypQLcffK3?= =?us-ascii?Q?nILYpRl9qhLyOb8uTFC6LLkpQJx8NtuuW/L3eyCBh34Dxpfuoev2Pnp1P7Yu?= =?us-ascii?Q?dDKOfEe+7z3LqLC8WoA8qxq4DKsTxsxROwrfnpQqv0uxp0a4gz0KIrrHBN+T?= =?us-ascii?Q?Ky9AiybSw8snmcAZsNwzYtG7f5qKiKYjBSfAvs8XPm54OUUSj3EHME7lGC7E?= =?us-ascii?Q?cZFQAR3tSPNExz5QxVT8zQNI1tabSZTaEqtDPHGXeeIou3ceg+xByWdaB5nC?= =?us-ascii?Q?Dg3Q7xw717gSu5LqCidgKDn2IBTrZeri/CWaNa9vI5+w27t65iuPYkGmvW//?= =?us-ascii?Q?wsRmFJC3P/hIks4z9L6defZiC/bir10THccM7Zl0fbBPVSuTqXUPfnZ7BUyZ?= =?us-ascii?Q?jafE8fY1JOWV4s2wHDnfZHhVt6QvGXF+Mj6qv/DrDnkphyAU0wvZKTKcNkUS?= =?us-ascii?Q?5EJ+nooOV899yR907b6rfeuN7d8Sc4ao0uEy4PrfQI6iOYYQnNb24xUeUgm4?= =?us-ascii?Q?iJfl2KdfxPaF6CsKtOGK5Ty/yJoQUssGdiW1KF+/hFGjj4ID7OAmGFRVwLrb?= =?us-ascii?Q?M1U/9ufu72kRcN8j3CGP0Q67pUGrabw=3D?= X-Exchange-RoutingPolicyChecked: wtAOaUn/voVSnmu8H0ylce3kbDaLJJRqpetdBDpgW6D3ik8YhwE9d/AwMROfg1R0J6KK5AHC7g1UzrygrPgNiYAEfhGBs2FUYieJrbCJBM6QfvUwKwez5ppu7j8FYoEu8usIuGocllwy9i4m3UteJNjaCvZKVKkyQqPEcznA0featzrbkdclTQQ1Wo1VNnicCx2eHlUaUX06kzXi7V69xNE9rIAghyoEDH3GIp105dnQUE/3YVXG3ERVN0RSSiYFC/eLzLqlfdbpuq1GO1knigMDrqhytK46ZisK5P5wLDtzFzdP+t3kZ9ejY9bueY0ygzwZ4yp6lI83g/w6l2GJ5g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: f8EIutnbD43iWucG8l8Zmm9fJNH0ncZvuP+jnxOTMP0Kp5g5AYTvuGjRfSJU9ROiRNUxXuX/iiV7OQl7oxP9RxgF9ARli1ZO4S+pZ/g93KQ6o8nWPM/9e0khnmlLmYWe8fkzFKp6bF+z4O5UORKY8tLZZGca2goNolVIbwX7PXJi1/jdVCc4RVr+axylkVmpqqguXcI0A3cLnzMWuUqtJhoYnYnaO/eZN9eCXqClbf8se981ZUcnaJoXpz4tupKGOcwYxpgfwToGA2uEbOSPrYqPj3X7He9xQ3Mrr+WvqISybsLJ6+YnCTWVFKeDoM/+dfXtwG6bgkc2GUy8BiZ2GwV6ev00ElYozdN2hGAfzJRsM3qM2r8h7ZaDMVTb14jlV9LpH/2hbLi9KCMJFQcFeeIyidTEZNiDD7hSYyW0hcY1vIIj+BbbSPfsZHuUFh8ML9hGt/sxdZdgZs4tZgC4lHs+7ZTbdfIEIS4vwvFq90R2KfOOqASngzXz+SJGMepsNe9/u3uKZQa+NphLKAuV9m3d2Jbv6X6wZ9QhrkFbd/xOALM3PGx8p/3PLCo6N2E9Us/wXV8lvnFXxx5SppQQqIA+xwnywwKTRaxa7f3BVD4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b6ba0f9-7d51-4edd-5912-08dea51724ed X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:15.7623 (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: KGsfUIvunOE3Zacex67Wk1nSYjDpuhrRqC0YGjt50oFDbTYsPnrXfyHnIHin/ypN9gPMBQ6pFph+v28fDXsTgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfXy3hZbsutmG5c ZIT7bNPraphfrjRS8SCBPaGbQSg4kjQ85pDL1edfxJ7PAIGwWFzl6zZ3nlU5btsHWCc9BAqAJeM wqPuAl50wXjiC4RCX2iU74KpCJu/uiDNomIFlfb7QksO/MQ3XROsIVeDUSWaqU9vwiF3pKS8u/t fj+C1B6D7XWS9SnikyjqqzUMAhqLjpJelD+grCm6IpqTvuYIg8o6AFd/p8gzZct+bdTXkXeQdk6 OLuz0JysWLRi1YYaxdbWIPhJV29cJ2uOXAyxmHPMy6TsuVxl8wALEXfQcnJs001d/i9GlAR8Sqc 9Loo6q8RMTAD4qlTPNZinwQUJ0tDiZztg5t7vO0AL6CEG/P5On3pwXcC+W5vf4Lc51NB2kfmOun WM2BGvekQQxCNGcFlhSR0exur11Ir9G69yP92vMOOW0j5r6XYU+tC23th3ZrsXWQmXwxbjpNRxy k5do+8LX5ZvnUUh/ZT1RqmjDsp9HtGcHMmF6xNxI= X-Authority-Analysis: v=2.4 cv=QO5YgALL c=1 sm=1 tr=0 ts=69f09650 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=9AqYmpHzZGUCEUQmZP8A:9 cc=ntf awl=host:12309 X-Proofpoint-GUID: yDVdVSuDlDZtYVTfft8BZ-MF8egByknR X-Proofpoint-ORIG-GUID: yDVdVSuDlDZtYVTfft8BZ-MF8egByknR Content-Type: text/plain; charset="utf-8" Add callback nvme_mpath_chr_uring_cmd, which is equivalent to nvme_ns_head_chr_uring_cmd(). Also fill in chr_uring_cmd_iopoll with same function as currently used, chr_uring_cmd_iopoll(). Signed-off-by: John Garry --- drivers/nvme/host/ioctl.c | 8 ++++++++ drivers/nvme/host/multipath.c | 2 ++ drivers/nvme/host/nvme.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index ee99b8dbcdfff..07509a03d2ef4 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -719,6 +719,14 @@ void nvme_mpath_ioctl_finish(void *opaque) nvme_put_ctrl(opaque); } =20 +int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, + struct io_uring_cmd *ioucmd, + unsigned int issue_flags) +{ + return nvme_ns_uring_cmd(nvme_mpath_to_ns(mpath_device), ioucmd, + issue_flags); +} + static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns, unsigned int cmd, void __user *argp, struct nvme_ns_head *head, int srcu_idx, bool open_for_write) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 5e49cd716f859..a51944ca56b1f 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1448,4 +1448,6 @@ static const struct mpath_head_template mpdt =3D { .cdev_ioctl =3D nvme_mpath_cdev_ioctl, .ioctl_begin =3D nvme_mpath_ioctl_begin, .ioctl_finish =3D nvme_mpath_ioctl_finish, + .chr_uring_cmd =3D nvme_mpath_chr_uring_cmd, + .chr_uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, }; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 1ec45cce05c9c..efa868ba3fbf8 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1052,6 +1052,8 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ct= rl); void nvme_mpath_remove_disk(struct nvme_ns_head *head); void nvme_mpath_start_request(struct request *rq); void nvme_mpath_end_request(struct request *rq); +int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, + struct io_uring_cmd *ioucmd, unsigned int issue_flags); =20 long nvme_mpath_cdev_ioctl(struct mpath_device *mpath_device, unsigned int= cmd, unsigned long arg, bool open_for_write); --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 231C1413225; Tue, 28 Apr 2026 11:13:39 +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=1777374820; cv=fail; b=QRAeiq9o1GmNOmXahyD/DOidYOTT9kWOkvTgsk7CK7tKeH1xmVadkmtS4KZ8QY3SHklaLuiQlJUsSFW4bcAG9sW2Ruyj9Wwz1/PU6Umgsf++/6UiHCLtxMpKawPtD4YCiXxFULojxrdlYOOZz+ApW6Q2ir92swhgzcx1WulRHag= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374820; c=relaxed/simple; bh=FOo3VQ/jlc4YAXMUDXUY+jj/WE1bUwiD91R7rp8wfdo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jH9K+4H+ue58/oyijgANxixVTSmPvKAcGvbmWnBe9RrmlC9cDgvD6utrAHg0TWI+zvALUZ5ITS80t2NZQcPw3DqjTbrmlkZN1aKGL9+n2pAvge3WuDFWMI42315R4ff+14bWiiyH9/hqIPlOuprsLUknqHwcC3607KPfhuD0f9s= 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=JMDqnXyJ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=XzquvxT6; 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="JMDqnXyJ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="XzquvxT6" 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 63SA8L4M2721969; Tue, 28 Apr 2026 11:13: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=WfpyHjjc+4pWe1sB4U/J6o0jNZc4M8ehpYZlOt3VPHk=; b= JMDqnXyJ5+bb4IJfZuN5AkUeF/LtP04u9Mi/MDGWk5sl89fMU3dpsE3ZdvQbrDy3 Lt2wHb0MTF3qv+szUNb93tFdGPNZy4iuiJ+WKL6k42radDHuFwGiphXeSm8DhuE9 7f9ccKED8Zrr4Ec4sr0bGs3v0Y8tJ8F2DqnFia1vS/PdbcDtql0bm9E24bVpo3lw sOSDWdBhZbxLT2QFHTIAp2jqI6NIzvHHyWSWgyhVdhlOSq0fV4H3uVqpRqMJxNe+ vNyfBJLchi2aOhJpNmCPQT5mnc3mOVNJNUgKZahBFXaThcTM1LZAlARgbuQWmsPL NQk+/9L3y0LsGXPFDMiniw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drn7t78g0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:21 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCjEZ004724; Tue, 28 Apr 2026 11:13:20 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010028.outbound.protection.outlook.com [52.101.46.28]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm3da-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:20 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B6Hy5buY+LA0b3qHQVFpeUZ+GGD0yWhlIqL7UmkLDrw/w2vWLg5vIlsBQRcP5QBNvZC1SXXEc7kVziG6VhQRPmwrL2wYzm8TUlR78U8/o37l6iJ5EIJbJWwDq8x9v+e2zi9+l4lgtAURhfaF90L4W0ACr05yO575zEVLrZ3gdFjX+W3guQdyh2xzJRmLE/ygxpMnYDmMsZaZQACF46TByPyXmZCLDC268hb+EvAtgf7gTCbrFDKjZBeJRtz6u2IvuC4HbP7CcoN1V+2jkPhNsovjaxMNqDHPxz3V2mlFFNzqEiwI9CId5aF0FzDo7mX2y6ZL1gTeyUGMf+UEbN4fkw== 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=WfpyHjjc+4pWe1sB4U/J6o0jNZc4M8ehpYZlOt3VPHk=; b=Gx8xx46DyB2HoPEKXgJ/pbfzMTvIayP6KYV838zi+Q1sA324lIXHEmIEp9uv/uMaKo0D+cUsl9DGF/9v7ukCcqx87uLoM0YZDGszwob1kqmer/CXrYmzaSRwRdSYPyg+JjQvalnshoda03/Jlmsu/QE1uYOjHbdxvYMP9d2yq71exstpj6j1DRXzAvNCD6NwUz86M4tMmiYM10hQdi51rOJ5PFek1bgCPAg3+7l2uTrOWK+eajbKr7X85PigMjECsSeQWl7hSqEFz2gCj/X115gk03Tb2Lq/njXOWhdVq9dpClKgn8aA5zYDojh6obyuAQ0+baYDzxiG8xtPS21IBg== 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=WfpyHjjc+4pWe1sB4U/J6o0jNZc4M8ehpYZlOt3VPHk=; b=XzquvxT6PfwZkip9QyNa+/tg2dHDSuuAN+b1nSIO+7Z++ADs7zoNrH0wJvQ2HFuxz2YWcsRu1XkGH9OziL0Wp2yQUlvfJVv+Cosb80ZFqMQX7CKGHRcNz0r5j5XYXtvCdgt8woPE/GB67Fk5OHX8qUGjK8/yI0g5N+S5L6SPDuI= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:17 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:17 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 08/13] nvme-multipath: add nvme_mpath_get_iopolicy() Date: Tue, 28 Apr 2026 11:12:51 +0000 Message-ID: <20260428111256.1778475-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132E5.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::25) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 634776ad-aaa5-4b2d-28aa-08dea51725e6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: eo/0QeT34U2LV5PxlFKfD0ZLG5PCQLDafFtNoTZlx7icjE5pi+BIwK7vcjU5LUX7Yv+Ua5SN8YOfeF/9rR/ZOPLqoa5jckzpRLXS9uGgyUPTD9f9NNp0944N1ap/6CYGCKlBDIFz3MNtoiHEcdnFfXshghSDp9kc2jClI3xRNYxIzjIcm09MHWNWaHgpVsaTwlaZDqNrbn71/2O4avnmR6bZZph7CmSz0DifTMwaEv7ihUoUEOAQym+oL3vS6K+eItM4ldkgBh4NGwnabuUpsHsIh0aS/fAqslbETTrMoFHh11j280zwEhVqMeGa3g3OlCAFATJT1YmZY7K8J5KFel0B2hFpkCCzM0DcQeUtuasJg5LtzmvnGvfcoP38Sw3WrF1ssMcMIdd3zpayhy0AJkFLgQ9LuSAcEDmNcEIjh7SHwGDzqCbtfb2t9BNlxE4rDHkM/G10wZW5kD0SqCxam6+iAgMq1jf2OOFV7egHOVSAHNEEwsZxh4dYxnnIGhrtGBnV9QhqqMuVtETXA9feAYWlASknquwYToHWEHfdCf/ZxRfGCTqx0PrOSFO+Ob1aU7uagDJL1l0c1sqSrU25oEKnsIxWeyuls/e6YVMvi4xBnTFfRLKATEmbSkQiWtVX24w10xT94HsxyUWUHmKXrwt3f82bDpFqVhg0PNNjpC009355sfOj5KRxjFkAbiCwpNjqzgyrl1BpgnSuhVIL+UAkd15v6sOkNcrSQinHAj0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?n/l2yOpoYikTRuMUUl8pnxApXWN/aP0lqlW+EPRkam+hBOOejopOKqB4H9Hj?= =?us-ascii?Q?LvvB7PIeDAN5IyHGKs8KdebHTP71jHQAFnWwAbbcsPq9a0IR2gip0Ruent3T?= =?us-ascii?Q?Umrrr3wQnAGd6Fk3oiDGOSeSypbrrbFS+4hPGCkUGodeD6o3E1Hh2/mn2CEl?= =?us-ascii?Q?PNxcqHaq5J6RmEKe/bTrjpXOvEci5kGJhfZyK1rQDFwKn7QEvm1Zxby0tzrg?= =?us-ascii?Q?RLMQ6hXeyc4ZGkrwkCaSDBM9jod756K+apfuiZ0aUw9Hdkf/ZpxpDrcL1vTY?= =?us-ascii?Q?V4YQUSW/1NQzJrSaNLsHdfr5jtA4iTAeITbNpgYMhYgHKKHlhFVZ7TxThFjJ?= =?us-ascii?Q?dJezq4Ii2yfKd7xhSRHENqYX71j6dYt8OdZcXsvImL6bobyhp3yV6TuDYHJ4?= =?us-ascii?Q?aBACbJU9ahRmA7OUxG6QkSHUqIllRkBDuQOsdQ2Djkmx5HACc64ZOxHANJ7Z?= =?us-ascii?Q?18YzheDTl0bqK8zfGRdeKUQ5xm0YYg2GKJFRp7iQxdAXv3VeHMqMojt71MzV?= =?us-ascii?Q?5S13HPhfFUkqBdZUeOykd9eGp1USuv565lAQQqSmC+t682Vk0DkOlewh3zSG?= =?us-ascii?Q?WsSS//0sEIvjCMU78HCyCqSzJsyzmTAW6pB/dVJZdScm1hrBPsqZmaZEgWxc?= =?us-ascii?Q?/n7ckB6hWft07bO1cmZieA7P1hcfvLi+9eHLmadqLb2wob1EyvMnE2f6NOsw?= =?us-ascii?Q?fhHbEUNzgLO2NI1VZxyfLM4hOLXBF0DspN6CABlwLleFSHT0R8WbNWqo3i6y?= =?us-ascii?Q?aRXxCKY6v+3PFlpJyuwT4sZyFHKrco8EHNgx2+P7pNzGJNqbjjx4QNvHrlpZ?= =?us-ascii?Q?jMQtAQpXiTQC6t6UqMkO6XzVlOFBZI5GdTZJXfiAQmmuILhIlTSH8PkOYxf3?= =?us-ascii?Q?l5UBFhtEeHStw7Jkt45sWhmy7XSEIJNIhoBxzsOK81sveosFkdOn89BvnU66?= =?us-ascii?Q?1rwj6BB3lF2rr5l+OCTf7Nia+GxWZtqjLBXwT7PVI/orENAPx23wLb/+qIqq?= =?us-ascii?Q?S+xiWX8riZMYMeGo9iF3SQkdCu5eV1p/uBJLOvL5sgCDmHXHfIq8LPdkVhxn?= =?us-ascii?Q?U47Oy6cEtijmnyxOGmPhE28dkdBNCnDWIxR3XPqsTOR8SCSoi+PV/I2qedjc?= =?us-ascii?Q?VeuGeeXKqxyMGazQoH5o/n4c6DotMSVfjNV2TPLcF0aIea6+YWgsdNeR9ySd?= =?us-ascii?Q?b5eZ8wlYecC52babyIZSbJvab9xvdYmYcZTWnEu6gnK0nqRYQzRPxp0Y0p2f?= =?us-ascii?Q?L1X8g2sL98n515SWgYbCdAHvVC6FCuZviPs4Nif/YMIrkjnL8yPm6lSf7IK9?= =?us-ascii?Q?klsiOfPe6jPRIfv4HEd3C6G5quIX00lOIBSZLUFCcEWw68lGEhWkonP7BX9H?= =?us-ascii?Q?1ubdZNZNIcqRASDvv+AdCNqwSDmpiTq66gvCWQY4Q40l8KdS4idXhzY6bn3f?= =?us-ascii?Q?ZFrI5WZ/lYHYGNoUGIpRo8C1VjgPFPHentNNHkikIXATpW89QpV5IdJ6Q/3S?= =?us-ascii?Q?TUtM1jF5hiH/dKJDGNQuMkZCeFK58O8g25ssk80c/JI2vb6Tse3HejOWj0hS?= =?us-ascii?Q?E6YhidQwYgYrjViw4VBKP+JxqNE+l3bZ5wTh53KEYzh7IhzXuxQwFElbk9EK?= =?us-ascii?Q?RZAcLLEcei5sMndakgOGi7syMoctrJSfrVIMiveH0JHaFx1nf7IBl88ktwWF?= =?us-ascii?Q?4NGK9iNPFtaUY7HRS44HtLDNXiCDL2bAFHqbtMgTXsWPyZLCzuZpdWq4CmMw?= =?us-ascii?Q?I8Kh/bL/p63jbZYDkpgD3rBDkRUSvqw=3D?= X-Exchange-RoutingPolicyChecked: oW73pPT6FV8oE6L7YJiY7mSlskB3++bWjyM4Jn110oO1aM2dm5LxRKXs6PzuriePFF+w0BMkgvQ9cLSO6p4Q9QPxgOKMGexxZ3RQLBul+Hx+NxfDdVpdqpzfAuO3PJRLGpTphMIldQrMNCz8S+wmfLYIWAqCDY8zU0mbO0g90ItiFmRqOMrtcEUlU40xeNpaMFxShlHHn/IaG8M/dPaFiAL/js2ZW+WK6Jj7CseBe12PUV/Wv3bi+7JcFO5xEZPcLMHoG0hLg9Ozxz71brAv/FfCGMnw4Fz2qKuakN4DUy4gOOpJbc08IE6RdVuScFoYf/qHxIrSl7momcouydZOPg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: LopoB7aXwYBx7KY5rGpjmKWLOFY2/ad+Quo6hmCkegPrWyKO1W25EPH8FSbyq9AuQ7zMBdzRl4VoYvQGyTH8T+kGgCHgNrV/ZZHHr3W7v5EP4NQ/CcLCy96K5+n8lL05aPZ9uws6uCd5ytBlbj5/LwUZv9zJO8atcUTfGSXnJ61Kv+NhOfCWP9H2ljaMYC3q8TW1n4rtFl0fBJHL5AJXhrkoKILG1n1ygHF8E/4N6FxeGFZmW/TktxKiRrTA90PRMfPaBzb/6C6+hW4wl4MxTXB3NZaHlqUWraLQIj9XnfgS4Ywk6oFkwkAQ4/nKUvNyFV5p+OMR1n8HQmhWAjRwwgBFoPOIp4wXMLWcy2wdyktW6F87Ef/xT/EHZLUDsWK3RUzxcTgS85VJfPx0bTL86bFwaJ5gP/EpW15dIDNLOEvrgkDA94oBleEmYbmnMEEZXIHdV8Q9smQ9n6y194m7ghVzsRJwYh5vulCzTumjXwt4zYrDaHktKal3vziTXKns3ph31IG3kNRb5blJq33DQLiHyRFp//48yK4ftvbMedMS+slFvQM8YDVqfftcNhEEDmz6TzeANV+asw5M/2MNf36PPwsojseTTDOjDeqkgm8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 634776ad-aaa5-4b2d-28aa-08dea51725e6 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:17.3439 (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: NYeDHCWD+UHbb0Goykh2G5vVmkcef3iICOQB0TvlCsXkctLP4+kY+lOiIttJGN89kNvqpfM903QfWyLSjSOg2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX0r+AGLtTqCzi PHik7CXTMzWrXS2sKxcXrxHkFw/591dcmuP8+KFOs26pNGYTmq4IsmmSSrkWGQ7f8RphS1aFd0s 4WaFqZpe/fNG8yFd79jypUNtysMnDIuGhSGEK6XfBH4mmg9SbB3196+A/ccfZzqL2ZF5rjmeNzF Zbf7EsX3gB8b+RUNdOHedubmky+IwHWGuNcVFcVG/A4/nXkasOzvgf3zz0Azuy+2vHIJHfhZ4J4 O/5Rs2lQ+O/FAMxbql//gSDI3i26hdxRpPNwGzt1BbbIYIXEycM9WU7A5RgMndhd0aBBuhYRgCr XjJSz0joPCdGpIQ3F9KLFXfBdYEOWfVSKtTUql6KPyX0mKSAHC0q2fyXmG97FT6OH8L/cf0I6tF baUY8INLfN05JTZ6B3dpdsEMpRjWAF3+RIeTndRyepH72glNwhW3PD29+jq8HMh8+J/4AsVSBjD QLLgK6ZTheTNGBqOlVIZNWU3XFMl8THL6lpmqwMc= X-Authority-Analysis: v=2.4 cv=QO5YgALL c=1 sm=1 tr=0 ts=69f09651 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=J1s_sOXE37Cxi8vwOuoA:9 cc=ntf awl=host:12309 X-Proofpoint-GUID: RbWV8l90qncfKhwzSrUFZUy1HH0B8NRu X-Proofpoint-ORIG-GUID: RbWV8l90qncfKhwzSrUFZUy1HH0B8NRu Content-Type: text/plain; charset="utf-8" Add a function to return the iopolicy for the head structure. Since iopolicy for NVMe is currently per-subsysten, we add the mpath_iopolicy struct to the subsystem struct, and nvme_mpath_get_iopolicy() needs to access that member. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 9 +++++++++ drivers/nvme/host/nvme.h | 1 + 2 files changed, 10 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index a51944ca56b1f..8025cf3270cdc 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1438,6 +1438,14 @@ void nvme_mpath_uninit(struct nvme_ctrl *ctrl) ctrl->ana_log_size =3D 0; } =20 +static enum mpath_iopolicy_e nvme_mpath_get_iopolicy( + struct mpath_head *mpath_head) +{ + struct nvme_ns_head *head =3D mpath_head->drvdata; + + return mpath_read_iopolicy(&head->subsys->mpath_iopolicy); +} + __maybe_unused static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, @@ -1450,4 +1458,5 @@ static const struct mpath_head_template mpdt =3D { .ioctl_finish =3D nvme_mpath_ioctl_finish, .chr_uring_cmd =3D nvme_mpath_chr_uring_cmd, .chr_uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, + .get_iopolicy =3D nvme_mpath_get_iopolicy, }; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index efa868ba3fbf8..01a7a25bcd254 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -502,6 +502,7 @@ struct nvme_subsystem { struct ida ns_ida; #ifdef CONFIG_NVME_MULTIPATH enum nvme_iopolicy iopolicy; + struct mpath_iopolicy mpath_iopolicy; #endif }; =20 --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 393D13FE37E; Tue, 28 Apr 2026 11:14: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=1777374845; cv=fail; b=D9i0lTnBq4aN2kUAcj5YAIGxSBqsDAeY8qLbYT4rGg8dmVUxbzLzyiSA47N/SisAxOa18gCL8bc+UL0AMAnOXuTTkBreFqkUeu7Zn/P6Hax45BhgzHGev5UutlItac7GBW9FcF1WK1J/2OUKaeqrh788oQYbylfDAXA4d9T8tWA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374845; c=relaxed/simple; bh=0EGo69nmzQyr5Bgs2Nhnd7cuEVwK5Bd67wDiVLNeEls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HamRA/KSk8tbo7Q8SNS3HZqJMSD8VgBwbAa6fpseGo413xhkQn1p+ziBCAilvSfQyXMvzuOwVrsI9Xso18muXx3SXKD16W00BAIgETJFGcBr7mN3f279jr5fqICE/+09KKvNHbf6fP7wXecwkx6bizOZZVKlri4ZMPhEkmgY1VY= 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=olpQTv5M; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bAoeLFfo; 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="olpQTv5M"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bAoeLFfo" 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 63SAIeI21905229; Tue, 28 Apr 2026 11:13:25 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=c0ErrnOmpYY6VXFswoaSWbYMpIaWVrz27AbwLV7Am9c=; b= olpQTv5M1IiZ3q/y74UPfEnxcHrygDvuGfKvFVlm+sERuE82bzx2ScK7kN8Zp6Zr 4jqQNFDpVNAdlnGZpNfajMqAlA+ONj4gaWoLI//yC/oWEO0KMw5rNKs7pxtYCsli 9W6KPQkQpZoEtvU4d4u2Mk07L0iyJ4z56PQvPf56ayRCqVL2Yh45ttoAyoN7zygX xUmrQBgFkeWsR/TyRh9uxKHkOOl5CZTTSlazs3M70ZfrZVX25N1YIOUkrIY/3LLK 35E/NN7ocokzc27OFoMwESDj+Pze02AVlM7+c1aVI/MBzKv1hj72/V2pShxV7+is KpFMSr8awdToWE2odeiiGg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drng8fcr0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:24 +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 63SBCJKV033104; Tue, 28 Apr 2026 11:13:24 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010027.outbound.protection.outlook.com [52.101.46.27]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2cufg4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:23 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=n/H4DHzzhoGAYFYZ+bw9Uip7w08fXOb0AHxC/iBlxEJSB7nxOP+mCKr1o4+EuV3otlBX0C6zxXf4bl8jPmBrlXYjvNSRNbn2NobmZWbtSkx72mbmmwK/hIb/Q0R+BCM/6KxiGG4kPcb5IdAWGIaq9ukcdMlmbrm0lT2kikXTQXerw2RniVloaxWFRLiWB83mkNAjQIo16D9pxvAKo3/6o+TBzF1/dTKdGbFITvW2cfa+R5eVdHXhj6U9f62xjYPBj6bWh4JN+oULYidld2fe5m+czvanrJ3jNJOrthHBwiTlVloO/6lALRdWd//OJOqBB/El68Z2GuZStUIiev0C/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=c0ErrnOmpYY6VXFswoaSWbYMpIaWVrz27AbwLV7Am9c=; b=amujeAhj6FqI/6jt9xEcYcQhE3WKJmeH0ce2wRxgKg4JYUUCQ7V6fk1wAnVI7GTq+8r0bzGqRtaCqf9dr4XaRW1VTUr4a5wcG0zbpo/PWnXUZIM67PzzE/1ZE98cwTBhYfhj6ba0yX4EO/hi8rlrhUh24FIo11seee0o9HGtek/0AZcVX47T70bUC7nY87bH9FFxNfJWH0XoSn59IG/psz/4OdSShNrZFc+WfDdFXOHVEKkK1rkYkMOQE9T6eHwECQHIuRpA3cOVFBkT7V/IlQzih4fQ2K6VPlEm52nUpVDNUjvNVoPoywyH0ldnnoHgMHYhd9qQiDIiEJM3KOFRNQ== 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=c0ErrnOmpYY6VXFswoaSWbYMpIaWVrz27AbwLV7Am9c=; b=bAoeLFfoUY/6Zx8C/K0TFom85hdGmdfC4XmYK5s5Al2xrTNVC0EbFoNaAlWsykseDMVEulalnmJSn9UuwZv8bnEi3JXIvAtCxG2B4xwk0RglHQAlGcEQG9HyXLLwNFVYLjd+cGIAVxrNoz9ovgOpKG02PiIJbnpeqGtt9Cs9DhU= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:19 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:19 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 09/13] nvme-multipath: add nvme_mpath_synchronize() Date: Tue, 28 Apr 2026 11:12:52 +0000 Message-ID: <20260428111256.1778475-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR17CA0016.namprd17.prod.outlook.com (2603:10b6:510:324::19) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 140e7a00-7b4e-430b-115f-08dea51726dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: HE85oNHns/s+vWoRQpUm7XQnoiOfRnm00OkSz3w8QoZr1cKM19U3zgdPEeqU/avfnHW26A3c1ib5ADI2+jWmhS+dAq/eYLXclR9PdyvLkcIb0dkcR1KbhAT9rlZqAcVOx/KtWjAJpmSeL/vwBHB38+vsDZZjgSA6Tc63gXhwNF04D+P/naJM7jaijEnxXHtSyzvLPXZGooZ8HVTeEZo8USlZkQR7x//dxafa55CNdzUPx4nqEmrycwf0jdWDbI/VKHe+U6IO7qN7/J/ocGTCFS8/vFGjHYA7Q1vyZX4IyWO+7ePjqI38rh38MBJFp2Yi/7+0tEN0edv+LJbdVafvk9Yh+dXEPTBoYSlo3kgGQqAHn1PXk2k3COVEwWS6RF+7aBIOWXcorr/rWyekpXwtDap3z8UwVyao34xZGHi6ygx5zh7dss8Kf6lC5mX1YsLmPr/zu5kdGquUSfFTNV3jS7ntv4EGXSt0RmGB9DSjd165uvMNgZu6vgCsy7kAbVQTn63fEZsdUA411mM5iwVkvfc4te1LsryInM7i91jGBOwqs5z7oMLiKDU7wKbz+YEH1p2vmBCi3XZ+l9uITDswniOgCyf0ujHW0QpulxokixiLzdoP9T0lnR89Xkj/coO8IvoSEqfvT/BPQPhh14CTHwZBCHrewczr0hUt1jRZLXk2f76PzlqbwlnMo3dbWa5nrcuMw4b0AVccEZmg0A+MlyJ8dMQ2U6ZJGZZWBgxgAKE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?z9n4PymzpsNmrRPDUMqBwemVaF3RKVGyCrC3qlcqkPJLF9uLsr9g+1svVrG/?= =?us-ascii?Q?sXCp+ofsdW9BXmiUM27K472bcCb3cBbxuUX0Av7E3By8MZsqyharl4jq62qh?= =?us-ascii?Q?D7UnsrfivEYaVEPxkdYsksWS69AHQW5RpSd3B1ftd2IY7ieI+Sk2bGIWUkqq?= =?us-ascii?Q?wp8UE+R6eseRzZHZ60TddvqQsYY6QlzoD3oP9KmXOfkLqmbcFQyBVGblgHPj?= =?us-ascii?Q?WND1ayiHJg6hl/MRh4gobPqxHxGWhZ+6PAJjWL7DwaAkyGEWUeQLW3AZCs1P?= =?us-ascii?Q?1VwGdIamy4hLkU5BcinbzdHM0nyz4G3jgr/X8mPfvRn2+gksk0E1YEqo9YYo?= =?us-ascii?Q?k9AKlGi074iv4uHM9YV0dqp0e/wZw+i2RGt5mMIyPjzmMWAvQk4YU5JO9nZI?= =?us-ascii?Q?3vKRy5YqDdgaj28EXpRCkaBlaAVsaT7CArVsh8LvsOng3SqV31BeNb6jwJg5?= =?us-ascii?Q?o7p9vovCaWbplkWDrTP6gSPy96kvCDtd1itpGRE6rLu7x0z0ii8bUwj2rxW5?= =?us-ascii?Q?nhbI84+IFnhf2dLKnSksdua5N8xOkPZMy3MVOVis7J8oisfCuV+BIMIjFcck?= =?us-ascii?Q?CtTS0swNKxTPvXu/c5SEsmjCE1o5TRhS8Zm+C99RuEOKSoTUwr8mxi8AyVx1?= =?us-ascii?Q?jxjJMhUtCEpWGadw1xTKhldyxUYd3V++oX0TZV7+LMxcrgOthoZMc+T9CSYY?= =?us-ascii?Q?VFp4uDLnaKdamfbVjW7mapSKAfUh/KgCF1pUeyP3UsigZKBwwjCJiju7LT/h?= =?us-ascii?Q?q8SoRU36TNXblFSwrjvWK2CYqAc9bLk+wAUDOiRaERQBKGqOMc174qZppfIV?= =?us-ascii?Q?8qZH5XMbTF72sjHych6BEosYtGQlHA+vXBMQ0BAq1UvcNKDir0RlziPgnpCW?= =?us-ascii?Q?J5yiNUyad5q4w82hoNzJJ0bl7qCIyxMgaI0hMTXw063FlsQL06yNHx9uzMCk?= =?us-ascii?Q?Kq/G12pDm7YRBNjT9siv+nADRWnI8C/9AGaimJWKz5TICRBz8mx5I6xEXtAA?= =?us-ascii?Q?n4TLrff+vTmkF+nSpWlj2+6Eipq0ezDxldjAvcrJ067sMSTHP0U6wiE6Zedr?= =?us-ascii?Q?244Gx+EypxB27SEz7zaU16bwoM3CzdyvVNd97IOitTL+7dJONqm5CnUR2ZQE?= =?us-ascii?Q?p5BS5Tm03hmyYYLKROc0qfZyTMPMCGpTpE5nKIuGN6YxyTHepf+MzebnjLMQ?= =?us-ascii?Q?wMW/igjvbZ28mzz0EgiDgOR6zlUxjWA0mcGvagb7eQ8KM3eMBKLKchHdcWwZ?= =?us-ascii?Q?w/izlCOLhihDKb6r/W+wbiEcGDAqlesfkJL0QTbegLACt5ktJvoW7TzE7dO9?= =?us-ascii?Q?1+6KxU+0AiD5aAo91hZAaTDmDiO+cwIboDigXgl2hbO9GCx8VYxrlesPEELz?= =?us-ascii?Q?L1GABJmMrO8amlBVGOOM902r8ewIbiOIUL+yuke6Vu41wlRugrwaFJODIKsR?= =?us-ascii?Q?rXhwpoGI/qTNq+JmfpTdLE8+Qyd6q+bz8jUiBWAx4rpiz7OwjLt5+K/nwTj0?= =?us-ascii?Q?fddf+7swOftGV/G5CvZhFZXB/i7fHD1O/fFaqyAUS7Kmns+hIcMiuwCKcL+t?= =?us-ascii?Q?dEmY2Hgh+gesI1eVdln/EokbvMKVDeYv41mshiC/G6Gt5N2i+Lc+1seiMyeK?= =?us-ascii?Q?G0OBGActcHu+UH3fXdNhkd8F/5CnLNUlCQd0ElaeaCg26phtZzd+1XAG/GG1?= =?us-ascii?Q?lwC4Px/SmQoT7oTpVIHW7vzpIL/XL/g2TvCwIbmzF5Cr6mFfaKjoEkzl0Yf3?= =?us-ascii?Q?nLllI/h+mF7/AURXGxj4k1w7y5X7hlA=3D?= X-Exchange-RoutingPolicyChecked: jTcXG59svKgRyvrXeGRyJOiypYGG7TPezQiTUfgBl7dtefMzezIRAkPR9ITwO1bfkIAUpPMo0H00qpjayn5tXxfG7M7d2V+I4D6/YqTfb/al2xH85CqgBKGEjy2+G0YrvUCu7ugcwipC++feLfBshnuya0N+RnXhCESq9iPz2bITVgVNdyfs8QvQtrT/7H5yYeE27FauDaKSaoutDpfMVFwa5Nu109JTwqBP7grBzDYOsltB4f9y3PiVBz76HdP46UTzG1ZA7QJ1jdf8fy2bSed7qF+27ckhSvpscdfj9PwlllsC70Tt0JoQHi2g7BQJk9WWiF51bZ9TWAdirzTNQw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: GfHB5uYkb6VOBDgrTuD/gRFPiWQ4WdVIgNIVpxaF6QjStqWzTDOu/NjNPrVbrZ0sHZ6NnRcsClK+3xhweLEW1zSffBOwtnd6YxzJxGZUKq9elDmrO2HnAVpdHF0PVuI3UZZ7bgoHMkq1eufJ6gMwIVMYvldxZNJkp5mt5jvOVKjod5Aj7nqa9Gm81o4djmla2vUlnsAITUFfGf88yDUUqR2VeMMaT39lJ1GAfkKRQBIxF14tww41RcZROtInYtHtbyJuQTYMohovLmFd3XG0dVbFau3MbDY/JYjA0CQuNqqLhEwZF1mSjm2C1u6odOKVxTQMWFbbwRsoIwpyeNnA1RiW696t9VgQpPI72rDPvJ09XbdPQSyhiXdvZBj4hcGm6Ighy5XJ6ye6ndEKHMQuEOLcrhUmT7A+XbOxs+p06cEiKDEh/9/i2VNAg8iwn5gVtHN5kTl7DIHZZJDw5lHmWl12n65lrPa/9v03z+Fob2ytJQDbjhVsOYdr1UgYejuHKoQpCRNK+FvEBsGFftLUS3qSnT5p6XuEoDZD4F7QdnZDWrd4MFosk9oDGlsqinxM9ufmJ6floyYxn8ot8nkCcGRgzrDOCPA/7DYl9XVpm5U= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 140e7a00-7b4e-430b-115f-08dea51726dd X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:18.9314 (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: 06gvbNjOxjV3yWyziID4J5gDBxQ7u0IxO2WtI5vV6HckkO0CBgDKdV6SJKEH6mR9/Ir0HD3dmyLyMN03EDJeTw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Authority-Analysis: v=2.4 cv=U7uiy+ru c=1 sm=1 tr=0 ts=69f09654 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=Aed8ZSgTGLsvUS2N6I8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX6u3VyFtqZhTX A8l4IQ9b+wt4UikNFbysncVfex/8zS8obRJkj06+tyHg9SCQBFmZYEC2lpU8+jw/6iwDmQzKLkB HwpQ/Rh6/EEQY9BD76eaguvB5dpBTcvXnJ5lSO1A9o8OTqebWkxBb0xZN/0y+57IHE/0hpYsaEW knL5anmKdgadgoFY9HZSdpAuYxQOTFP2dUmNxRdPZQIKAWd7bQG20qGhrmD32KCfJNvKMTeV6zE rmt/AUGNRbjYi+KA6aWqYv+jl3O37ychgvZuQRMQ9sL4pCgwhi/KBshilsIkdRkO341gaAOniqm 0sEhGw4aBoNMjUTGiVjeEqNzm2fyVkncRnmjsmWoNn6mewL7xXFE77DQVBHkkYR56OQQ4r243uw ffWfxq1NME8CWiFFpHrUDkGGNzTFAYKGwgqtY+COdPu8Q+xIGB7hwhd5UPZEXxj55mHSUlXznMi DgvxAhHn17o0YSi1sdg== X-Proofpoint-GUID: sxo5bUO65MuG0-dOuWZ8iTqDRvh6teyU X-Proofpoint-ORIG-GUID: sxo5bUO65MuG0-dOuWZ8iTqDRvh6teyU Content-Type: text/plain; charset="utf-8" Add a wrapper which calls into mpath_synchronize. Signed-off-by: John Garry --- drivers/nvme/host/nvme.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 01a7a25bcd254..cc63ed8131c36 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1062,6 +1062,11 @@ void nvme_mpath_ioctl_begin(struct mpath_device *mpa= th_device, unsigned int cmd, void **opaque); void nvme_mpath_ioctl_finish(void *opaque); =20 +static inline void nvme_mpath_synchronize(struct nvme_ns_head *head) +{ + mpath_synchronize(head->mpath_head); +} + static inline void nvme_trace_bio_complete(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; @@ -1094,6 +1099,9 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl= *ctrl) { return false; } +static inline void nvme_mpath_synchronize(struct nvme_ns_head *head) +{ +} static inline void nvme_failover_req(struct request *req) { } --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 737A73F0768; Tue, 28 Apr 2026 11:15:02 +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=1777374903; cv=fail; b=OH54tjP8s3iU/ownjUPPe3ivLfpbTbXKVxgn9QdUL66U3rB5/NtICOgbyCbnXzhYTk9ofOEj8yClh6FFz+i5n2ooLrdcKwqgxGgCWAv50ESVZdg8XpqL27p3NfDRm9CnnKpNTT88mDBZyASjJDmWsZsZkhoAlLpoobk4jA/tq1w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374903; c=relaxed/simple; bh=riKDEUHpdNYs9xxqBEPwqUI+x4vRDZVNJ9TURhiAv/o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sJw5On7xz1D1ag2X8O+tgyrUpYcKW+t3WnyJg1ZiGzMGMA6bsLOvdnaUIrMHGpX00/To8mqaOihHK90jUNVut4L0afEJbVzo80+psWYOExONYM9/gerkn6wmYSOoVYi7UPrHXxjlRswLaRGcGZreDvfYOWm2w0i/UEb5ZU05cyg= 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=GGM5etxq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=m3PZ8pTy; 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="GGM5etxq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="m3PZ8pTy" 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 63SAFoG52603529; Tue, 28 Apr 2026 11:13:26 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=8zySTP8VYF+iOd/YAGjBR7zoL6fZgJwFOoVmAUlLfko=; b= GGM5etxql40mVIdssbnKhKWdsbEjwdhEyYeBtZ5EnADPx/44WgQuN9qB8xDB6E7J Kmahz/Opjen1Elv9Y1C5cfQ45sIg42tL5qfOjoZMXz8nZq61ZCAWsWpJwc7N4FCG ts4EoBouy7/+e1xFA1LQMbdaBPDZF+wOXjovnS5pjwNjn0RFmOenPOYITN9ENdst Su1+cTdUtGsXzERxpr3fuC8rlZEjpooNTMb/odl5c6bCduRFg+gevGtFgd8ULc9C Z7Cpl5xIHPqm/lSeoyOmRJLH3jPeDbCHxa1HLpk/g1qrl0uhk3HvejW3m8mCiWEh XPOdF8CbT/+JNdItjG3Ceg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drm1cy8w6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:25 +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 63SBCJKW033104; Tue, 28 Apr 2026 11:13:24 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010027.outbound.protection.outlook.com [52.101.46.27]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2cufg4-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:24 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XnFtNthvShN6FhJ68eNS8KNCIvtif+e/U0uR3zMt/fSYZq8Zk2PD6ygD52hce37LIkVd5Js66L45clIkeP6GG9aNsKEGT/C2kzj0rEMqxEbNVCZirzil9nXwDCWFN6rx7uQCvyi0nx9RU3xIGXqY+9UytLfxjRjMahg7OtxXFqQa7/HsKWj1WXNt/LoEz9/wZVsUnj48Z0CMu9Ajes+BOG3eFKqU6wFq4Rnz87Awz3qAE4L7i75XsYF+otwIs3+RZJO3fh8U6ff+gqjQQBdbSPgBLrfT1+UWHr2MPRP32+KEqFA81ZUxGwPUuswQ+G7TVnutEswC7rZ1rkci3fJyzw== 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=8zySTP8VYF+iOd/YAGjBR7zoL6fZgJwFOoVmAUlLfko=; b=BvrHs9Gcq6rYUyFlNjyEj5GfR2EFA0OaIvQHauwXHQq1/nNmXL1XbimDQ3w1mMfK8ttBdBURbEi9gR3OEI3wE5WywT2hrgh1KQvv1UssgzvDNPtUiStGn8/yONQ7PGbLw6670+Ptsw4lNWjV5Qk1AheWjz61TqCPIZo9MGZ75Pz8TU1oJm1pvdnbRqcSUIXCG7rw5kZGryOsIDAFz1lX9eLoHNkIWF5af+/oXnsKzyZPFj3sKe/jVICarjB0V0X1C/PiZa4IMCGG5jxXqtsC3FiCgHCXWbRVaUNmyne7hpVPXmemGEbOR1d33WiooUBfTq8itmSuWtXQqG53Rbx1Dw== 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=8zySTP8VYF+iOd/YAGjBR7zoL6fZgJwFOoVmAUlLfko=; b=m3PZ8pTyRr4VGDaHXNFq8NoAISdkNoIwogt3Bv/pPDLwYwtFLE8y5d/vLeJFRrhC0Arg2zu2/i/mRSoPGfqGgkdHLZ52l3Z6L9V3aph0jB2UC8NU2LucTbIb89CV0WOFxlhEG0+5RgNg0vHMN8MTHPQgYMDIR07gPczkNYOjY+M= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:20 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:20 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 10/13] nvme-multipath: add nvme_{add,delete}_ns() Date: Tue, 28 Apr 2026 11:12:53 +0000 Message-ID: <20260428111256.1778475-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR17CA0022.namprd17.prod.outlook.com (2603:10b6:510:324::7) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: f14e9b71-c8cc-4478-6ead-08dea51727c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: z5M7Vt2REjXGD5dX/0wZdMVhbE3Zbr66jHUqaq4o18Xj5O/Mq/dpucWsZXHGsY6+EA/GCWLQpqSYd/U9B0NsAXPpxTP13NTzwAM/yFO4Ay/qKo46AKGS3OKE6oKe4TupfBiKH2aew0+GTQV2hzcRmElV/+JAc+Le2pCa/csCgivRWbIXrnB5Vpp/3jHoOkar8pJy55VfhY2xzF7eMz9IJ5YMc0KvbaWDoW9WuE9JYGf1aQq+zxSxXSyMQpKnVCRaPvuZfVXzoqVvKhnicpjy0OSkf4Ge3fn7UBZHeM3dBkL38m7f+N4FUofq6Rto+TITdxREFUxSlNDS5rxDIkEOJ5L/Klih3w/W2tIaehtVfCie1/f23PRteBqRNCjz6R+W5zw0ml6VOco2EE5XXsutR+HyGEUc06pvzupcXDiiKYh5Zsj44FL24WoGoUISolTZD7ZetyoXIHyZPCRMm4rd+i4JorwnKpMwji8P4F5DdsJXOTIXWTmS+0puJzywIi5rGevmjUQ8jtY0Jiif7gCaNGgMNN2RBDOrk3jxZjB/Ghh8xYaMCxFXNQN9Kc/nLTQJg/TysL33vn+SMs87MwD4B544+Q6Oh568Xvs/LB//8YKEX/p/v9Bx4DF985q0QMyiXYVrAoWjGVfkpOp8uCC7UvZClYBgMQqiXz50kx5OA0fndr2qhVNonix7NbgXDTp7ZFPoxV3tTgB6WaNDPkz42WR2TspukVLqIvegZUMXfHw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GlVaZPPG48RA9R3qaLdHEpNypv8guyRToNCxe7JCG6EQYKG6fIYG+QHZU2jn?= =?us-ascii?Q?+E411XfbcA6ew3uI4twWEvnFOH8AbXFOXa4muFB4vf41EXbR9B3cCgEsd+01?= =?us-ascii?Q?l2nVmjJaahGxSKXl7L4f92BtOoff9k54VwvJd7wvPutrfDGj72HYxisKPgBL?= =?us-ascii?Q?pCdm5qcsGadbWEZHQan2GxHnGpvA6OZFdf3ECiw4tQKdQ6fVbOVWvaiiY1xX?= =?us-ascii?Q?NCJkgTdJDfxo2kmctg6iz2ua0Fr46p3EG5uHTn3hk29/B9T2QufAuvxyt57M?= =?us-ascii?Q?i6xwAkqEwyybuS/B0qUtxL3QxPdQ2uVnW3UE9dtsuI3ThACwQVJPigfZSGHI?= =?us-ascii?Q?2bYn7q5s5/N9spJP/hHKhgguM5+JFfy8NDRcJIRTotKFneQ8oz2nszgf89XP?= =?us-ascii?Q?rwRAdnnQcLi7A5LliT14ijpa1jZFBb8tLA415SNVm3APS7VJNsKI8v58tpVO?= =?us-ascii?Q?LQxB+bdGJ4XBFxE4HuPbgBm0qtQlahZ6Ykd94rRdwo63ZjLnAkK+3AFJTGkZ?= =?us-ascii?Q?Rur3uyDc6WLNNH/94o7avWWAp02u2gNW0psyofz2X5FssUa7kDLtULiuIY4O?= =?us-ascii?Q?16Snp4Uv6EiGTUoI0QeXL3StLKTax/Hg1qNeiaL1Ym7efDbFBT7QTwXcXc7m?= =?us-ascii?Q?2ODQs7dpfh70yEYdOyxhXKWMU4ynIdXd4e2CButdwCcq0ohSuVYQZMIL2VLu?= =?us-ascii?Q?qnmG/ZyokX58uXfb5vPwksHeUe9gJNhQE304Qz0mZv54LBAxfBN4E5oqjeT1?= =?us-ascii?Q?CT1ZqGXYAguFBwlEirFoa6Tz6HKIrrWJnjTt1o6BLd30Yf2YMAt14+wlhgt6?= =?us-ascii?Q?SwdP1GL4uB+/WLotvFvU7Y18HHZlK6kMiPmV0Nvgfh4Nl+WZjwl9MtVoMqGG?= =?us-ascii?Q?ErC0ac35jbkXmNeGCbST0qkb9YoGt8X7mcNCpjZknO79efJ6fLTDrMC3fRYk?= =?us-ascii?Q?oFnDxZ1AM/J9RMcf0xJ7J9i655BDw1LIrMX+guqHzwOf7tXcYwg9Q+BBJmpX?= =?us-ascii?Q?PgPft7ljigwqZHQtd3aRJicDbUs2cBUrGDdkbKqu4MdzfozPD4WH6EPofNZr?= =?us-ascii?Q?+tfRQoq6e5uNQZw0I0PAv3cwkYZgOzpHYg5Y0mUZMPD6RQl1L9MtY8pilgGE?= =?us-ascii?Q?rFobYKGNxyTwbR9xQ2vi9RhjLEbF+qIP5F7GlG1rO35fcg2a8EOHrwIXcqzj?= =?us-ascii?Q?8IVAWFPcKhkb1Qt+StK97EMEjsla7R/FfjKm2J9w9VoEiuKYFxTbo//9b49L?= =?us-ascii?Q?iiqbUB4EKj+nIODdY3j0Jqmbc0W7mkcBqS3VDKnrgAOPbOi+W3b3Mr2+n1eO?= =?us-ascii?Q?dNWzyCxJTPbEmXhn/D59GrksNOvpc2sq/RvFJ/9qONgP11zznd+N6j6e/x38?= =?us-ascii?Q?Ec9nic879jod+5Z6Mb1sua49squpswZwHSqTulT0InygY3eV765jX/BVdqle?= =?us-ascii?Q?EGwOZu89VAZfOZsDoSZWVDgdxtFOJbroRExSU6Xpj/QglIh10wj+0NX/M1D3?= =?us-ascii?Q?JAnLz5UG//715pFgTG1TutxrPKApZtTLnsbyys+ElD+PZ0kvbOWfIfLellpz?= =?us-ascii?Q?FNJ89izxllhKxfNbVvhAgUBC3rw2jHP0bJvBdeOz+50SAbWM5j9ENUCGpJwZ?= =?us-ascii?Q?uV9wM+HE1yXsq6QZhaVZbVWhq1TMTb1R1nTJL+Zm8sA/gDbVt11K1KkojMLV?= =?us-ascii?Q?EJ/CrDT72ZfcIjKQ4JydmfAqu/chifphqATlvNF/0nJ/F8xCnkZeianW9Zd2?= =?us-ascii?Q?cParMlHud6wAzvpwFhJylUylcAoGIqA=3D?= X-Exchange-RoutingPolicyChecked: A5AhLZFfAKsg2lr2YKNYAwrXBVzPWGJD+IMoaSUZElXUUoSutUVAEMPGrHEsdf8aSZwubzShY5+oZCQJ57KiQdjsS1ETQU0rvZzm7SWMGnFM3lD58C1j21PeJqcqc0BIEkrAG8Jx64oL9pKdLcvxA6sdfbL8SUHWkn0ZEubr+pBF7D4j1GV8LV/iPo6FKKrGjplQppCA3o83nci94vqvAuB1oOSHggu1cafSQlfB2xXds+jImjPzKAbknL1UXpudnsuD98VjgLPEoneyrK1gtMTg3TxJgCFMTUfZxV6cXApVyc/ULQkbBQs5I41FmVerByNS/SNHSufKp9ALk4YEsw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: mqTgTOsnRvsaxFh9GcDg6qi+k4ZkFxu6Uo2mkw2I1VMMhZhkYWKqksaoXv7huJdvUpT6kZjecUFcJh4X7z5Y2Ij8DDYEQWMCLYX3EMbUyODGA6iKX7vv3DsZqyj6uuOvyfkmWfqjoGDTU0Km6H0IPWN78bWncprOfemrBwzeME7trW3S6AFTN0zG7CznxDD7AEMVUZELVVqhFRPr0v4clTZyfEcF4zq65Hb3mMwaAKFjBh0S6SOTutvMQ08NJkbhBZRdgOSWr7+77TXWYakNnN5a/Ckv7/qIS9+0bRLdD8+urKsMpylVJ015j1/uoxc3K+K6a4NJrqmW9g2FpeSVMllWdd71c+PByW5kBFSmdC0GhHiYa+ZF6KzQ/3ivWYPoGhZF8FkOEGFqJEAwiIJHWMeasbMYtKvqjS2VbgX7lm9bKPtuNoZoSrDj8QW8R8GfQg6gd3mr8p8sZjc6qpX/Hcp9uLtSNlO//Ia0Fz3QSvTxGTsr01s/3W287ursO015jQADu7ujchXlVJJ08uA3qU+CuTSu5lxH8QC5Jym+yfZZ+GRTRhdo7EF9J/ZFAensjl4NXsDV107fDok8qpZo4VSe7NuIKDL1FIru+44VGQ8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f14e9b71-c8cc-4478-6ead-08dea51727c4 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:20.5017 (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: A6i35crL5a2FxI59nKruht8nStL9oPqkVxsbMofkUw8f5npKGLwnYClK8KEi3GOK+N8RncIAvnt+6TIpBbzJpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-GUID: YwxvVCSCZnwd00A4ZXfm4rGGydKNR6mZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX0gBcleOf/ZYE IZ5dROhXLrCZAF2CxVV6IjHzo5ENw4zX2pYsCgV1diAFqyrdOmg9RPs2rMRKRShoCE29tDfZlAM CobZfXnM39sYtRcjq58cNGNzkScUsDO4zkSZ1/Yz5NCndgrvQCeNFnyZkIMkG7wr3xBo2yAALFh 8pm5ZFQk0h5MLtc44Xzsa5DIr6GrVcBluSR0ksdE+qnqQRxZpMF0YEQmeZNHHRH4B2vVHIQxxma tOUl59TFYJ9VhB/a04JhRKzryVGccHDPJmAiGvqz3t7V+Na/RZ2bOW8+7LS2aB4Yn/aEx9lcw+9 bk3QejeYXf9SFZTuzY7bFJ229UtS2mgEvug5J9njiWllSmxT44Sq7sa0ZktnfOEo9MUUB7MWzS+ 7JND/1oB++ZmVPjHcxcBNb1c+ldrKbZ0I/O3nMpQcFHvc2dNwfXiByGp+MxEM8XNwOuFyucM8I9 mDuyYYNX1bxI9cwH4bg== X-Authority-Analysis: v=2.4 cv=I89Vgtgg c=1 sm=1 tr=0 ts=69f09655 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=yPCof4ZbAAAA:8 a=tcljfNdi_H3tkDvoszsA:9 X-Proofpoint-ORIG-GUID: YwxvVCSCZnwd00A4ZXfm4rGGydKNR6mZ Content-Type: text/plain; charset="utf-8" Add functions to call into the mpath_add_device() and mpath_delete_device() functions. The per-NS gendisk pointer is used as the mpath_device disk pointer, which is used in libmultipath for references the per-path block device. Signed-off-by: John Garry --- drivers/nvme/host/nvme.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index cc63ed8131c36..b4fe7a7dd7f73 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1025,6 +1025,19 @@ extern const struct block_device_operations nvme_bde= v_ops; =20 void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl); struct nvme_ns *nvme_find_path(struct nvme_ns_head *head); + +static inline void nvme_add_ns(struct nvme_ns *ns) +{ + ns->mpath_device.disk =3D ns->disk; + ns->mpath_device.numa_node =3D ns->ctrl->numa_node; + mpath_add_device(ns->head->mpath_head, &ns->mpath_device); +} + +static inline bool nvme_delete_ns(struct nvme_ns *ns) +{ + return mpath_delete_device(&ns->mpath_device); +} + #ifdef CONFIG_NVME_MULTIPATH static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) { --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 1D9613FE65E; Tue, 28 Apr 2026 11:14: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=1777374849; cv=fail; b=XdPnTiGVKRa35vVrgng7lf1b+YBsuvmyc4ErwVgEG91bA9oYv86ua3zF/UCdiCivdP8+Ru4lf+DCCc63mSdgkpAimWfF7vDC9UzKsk5tWXWdCezB2LoqJAY83+44oaSvKeVmLVz9S6OLe3FffZ48OTT/Ad3jgIipHb9rpdNp7q8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374849; c=relaxed/simple; bh=sC+JfdBfwIoE0t2l5S1RDeLum4cgVCxA0VghaTPP03U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bgzvzRiuHHbNh46d8JtlWrdOBm6+Cux5UDvGoMVlPWxVWDpYL1pMzLE1apbm7ELadpNXKWKy56pR8VkLGDZHxcN3ekPvoX4k920r0t8lsSzUnulZjhkIVYuVifce6130ZZqy7EuPnpOd7dJM4++t2tcvz41wkCtlrcq7i5KHZvc= 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=bg3jGPTm; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=MwVhQQTw; 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="bg3jGPTm"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="MwVhQQTw" 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 63S9csKF720964; Tue, 28 Apr 2026 11:13:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=C1kj0ruPJUy2kWD+5a4aCka57kXGz5K11V79KMq/ztY=; b= bg3jGPTmbraXTav74hKIDu+3khM7cCAKgy17I8bKaqKWH//nOvGSwS8R9cYvNRu8 Qu6y5FeNACvGKy/hNajkdQoRdYJwGcdnecmey6nUWs2GpAx1YQc5cM4x+GM119k1 GDd2GoBvTTZ51+Q6OxibYItkICsCWhiTeM+9JX+eEnjsvtxnwYIOyY47bc7PT7S7 aTpJ+H67i9FKMr5qqFTr7hC/edamadvjulbltB2akPBMTP6KhqWW2TYT58gjsyVb g7lMvns0QyTKe6+cf8HIzXLCAvQnm2+AFN7QNU2oEmlmdojAGezP8Wx7Sz46bIDT 0kHKiPkesjGFAHCRLhoK4w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drp5syf6a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:28 +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 63SBCmIg038793; Tue, 28 Apr 2026 11:13:27 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010043.outbound.protection.outlook.com [52.101.46.43]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2ccjxt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:27 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U69wbBXVm6VAFuSgizJYVDRlRLfkxgmcDHULTymJW62bAeDIa9gZcxqDEl3ZMDVOqLP9mOrd3jJI1v4cpFsOQWLZJQPbGGopBCa2nMkdddHvsnaamUaN32qoPOeZjPmnQgnJU8+BXE+KrN/dOjDThqC6n76erNjl2uAGAtBphRFsDnhQOXFq3KdBO8NA1v0cRRR5A1VtMcktuS6C9gsaaizZ+6sVz47HxJHAasUYdZM4xO+FSKsGY6zX97DhFGGeveeGS2YDl58O+nfo4uKX0kwfvS0/PNsL3Y5L62yUoayTrzOE6x/3SIKwwoRgvNrejtfh+F4YH5f7lg1R9fGSNw== 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=C1kj0ruPJUy2kWD+5a4aCka57kXGz5K11V79KMq/ztY=; b=xlO5ahRIh7uoqY+1Bzaya/qrBCeOVexq1Fpe23RhL2bKsSQGR7v296xvJt2UJvzcYWUzzN1CDdNdbHUPGLwTGpOvk5g8SJ/kK4o27phYSsqY6/lla/XYDupiMNpTWSGlENlBViQ9uz/ssVqtpKqJrGS5pEy5QuDU39iVNHOyaOS+VMpvv8+E8hgc5vORGQMZnhBqVppV4p7xcb4OZdMdVLNk4K5rjDrQvNKBXIf52Ezv13hdpJ97yOzJ7NXYSoLex3sBH4yktacCxgfHpYRjGjna6YbtHduChw5pC1sc7/bUc38mHqADk0FtCrf1yfFubV6Yl9hfxO+MtKQV5DgTpA== 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=C1kj0ruPJUy2kWD+5a4aCka57kXGz5K11V79KMq/ztY=; b=MwVhQQTwQkXJb57gL04H7kFrrobvzGwvWFF4+XOut20tFgp4jMdivHzWy1TzeLyGUFIdDRLxn+SgyI+N69naKTzWCuyjwVD5u4HXziVV/maIYXdsh7TeKY0ZcTINNGofIZbsYmxOf7CfIyLjQPtKGYNvdjhj5PsVY4EX7ShboLo= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:23 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:23 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 11/13] nvme-multipath: add nvme_mpath_head_queue_if_no_path() Date: Tue, 28 Apr 2026 11:12:54 +0000 Message-ID: <20260428111256.1778475-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH3PEPF000040A9.namprd05.prod.outlook.com (2603:10b6:518:1::4b) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 398741df-5f67-4570-3d49-08dea5172946 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: eCKStR91YhE84DlNIXAbllJ2bTQNUkxrZa3dd3dMCqdnc8EM2/26xmN4+H67GFfFWnqYn0eUyU6cF0Cl6/I7cxp8bM1OBy3SyWPcjKq2RYlbmCjzm9/en+oQ3+a/dKWByzkaV+92FFMecodRiyS8Eg0TrHBxs2To+Rv7g2v/qIgWDXSIPCR7h81C7He+XkjdzT/5k/dxB2MSWc/rJ6haVmugwIJ5Fh2iTYnN2G1vp5YcbpK27OSNX0DpG5dK646duMNUWsjBglhX5McBcIMULFZAW289AN+wGvsSauA0e2tB0OyjyzSP9NUYzG33UdMnRDL/8Rt2RiHylamotPftjduSBLzOZ/A+UvxxTP160d+5jKJL3btdqMo5p2978PSESajo5ORPDNmg42EL331fxjVXhpbpCbshpO0K1ltkAwzP/gRf6UIklIoVMftztxA01gB94Mkg6RVTLdy5+lYoI3F8lAW73gvVsyecA+ukvlSbeRLfEOjJCK4OCtpQCN/uMqtQzKPyGkO4tbRCgDXWtHyAXXBTKTId2ja00o441imA8vlnmpAcWbXEgctr0jo5SrS+ZHUkpQJzU3DR38y87Ar05RHhSSP03olw4xPwUPmIy66eyTaUBdyTY+fDUJNFntZrxUXZPOEJt3o+w6YqelzKF8B2evfUilKTUjRDt+3yjoY3nvd0sTgxNu8/kTTNZp139gbYAzRyUFYfsWTwafeTRNnyeIdMCUQPV8c2yvY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sYOTxjzge5P+1W9SE4fLYCtt/G4U5RKKBW6PKXCwYBj8h8xRvf+g+/OMvodj?= =?us-ascii?Q?rNhopLGpDuPrnnF3HGHcc5zzoGHc1jqVOCLjSqVUJXR2+z8UaC0msOfjtsdz?= =?us-ascii?Q?/u3t7S8ZuUYeVN4xpb8j1gRghIanrPlBG2KiTIUN3Rdnz8+hei6OqZo7GY0K?= =?us-ascii?Q?WFAC8nFEiXNsRjuu42b0xRatNVeJ/U3G1RXqSio3gTv08ZOQfR+KmNkTF2/I?= =?us-ascii?Q?O/N5x9JwreGsjA7WdJUJP8q93IYufQwL5RNMdWLF7KJMHTiki9gBFPtZjNkb?= =?us-ascii?Q?4Ufh2ZlY1Ck/xdyXXoxlXRiD95MOq8PJB9O9+XSpssw+bAlwO8u2Dwpnw+4u?= =?us-ascii?Q?Pl06m/mwYRJoFeT7x5B1b4uClCbkeXFODvbfXwNpK51Cgel8KPqriYwcgJwq?= =?us-ascii?Q?8KcQWN6uKDl5XrPltFjr/dFWyoI8xRLrQB6D7tDJbqpkfceVV1hs7B4FXnbw?= =?us-ascii?Q?MnnmQ2FnrniFeZDYY6UzQC7HGRkOvq/X8y5OpMLN+Aw8QOWLpmylul3NKIHj?= =?us-ascii?Q?V8A5MkA71Uggr2yzaT3A3ShJrQ6XPpJIL0jJb5QgJWu6FH0Xc4OKzx8tSEbk?= =?us-ascii?Q?G7/qgeUSSA0LOAORes1NBBqo/HTw34Do5WFBp43IB2br/uXYjIIroRZHMXtd?= =?us-ascii?Q?HqZY+nRE4DA91Qfa+iJlehTXhhMd2Q4kXDU8lcRiqD+VmxqDTw3mVDdqFCdq?= =?us-ascii?Q?euU5xztZhl5tJvMyYIEJhJsWDrFjjOzinqAFqy3YfIkEvew9qLQscoY5nsbZ?= =?us-ascii?Q?SdZalE+MXgsTcv0OR8d+kdySu6+v2tjfCub1hkM7JnIgqC+DZ/AfzupVFBUo?= =?us-ascii?Q?+qDXHIpSdxiCdM23l4WXVai2HbhMA4mwIVxRgPVErlyYtnC/WSFEqqijOyYs?= =?us-ascii?Q?yRzYRIdV4JDKeKaFFEd2e7mtkTVd/1ru2L+myvLhgK5js4r/ijOXiTwMUtBx?= =?us-ascii?Q?S3Pp2s454GyrAgJayaIaXmvwAZTsv6kmn9TcqvhVe/UcEkGINgmx29EYapG5?= =?us-ascii?Q?swyLOLIx9SyeYBhgn7cOqA/B12qTzJvl9/XORe2vRln6qzlNgy/T2BJ+bhPS?= =?us-ascii?Q?Bgt5/lAzFZfmFwP3F1LXxv2wNNvgfv/uFKskvNvEYjhhSBtL6M/7+JIocuQf?= =?us-ascii?Q?pR+32BTGFNuVfQxZ3z0XSsx6xYLHKzBz7Z5DywXm2x5r/yg69msj5dNnh0mC?= =?us-ascii?Q?M/CWjSuqG2QJlgu0aGOsD5j2jn1ovMCNCXlU7vKfg/1hwNINmjymHjkCJuW8?= =?us-ascii?Q?G51hN7D+i45xL5tLbv9KL6oyCoeXigqCrCbr8EnHeDgU6olnIWDhAQ3RprRA?= =?us-ascii?Q?yt46FenMU23hFFQ0Vd/o6iJluDFLacfNnAP0XIdUNag/0YSXZ0hGI5nsxeBM?= =?us-ascii?Q?f2JLziYsPfhoA/9ZQtImMnbjLfx6bDldDNysImsor1YF8IdmPBmZxv6drxTT?= =?us-ascii?Q?SGmjDFq02c3KhrUhfY0OEf9kAkqWTiBGufb3rA5vuzsMHq0yhFu5vKZcjc/y?= =?us-ascii?Q?Vkax+Y2jgZ/g6nq8SyPQ6kDtoopIUFUQzQF/8+h96D5/8QPyr8o3PTWWrzuK?= =?us-ascii?Q?o4XBzS6ZbHqdhbDAKeQtZcpyxPEs4R6O/zd18pnM5oYpDWhkunTM1KH4bXj4?= =?us-ascii?Q?zT78ovTepApnQvry5l4Wj5boxszQ+6RNk1/m63kzTtH+XY2IyeVfeysio6GF?= =?us-ascii?Q?G6HSJV67R5jP3YN1v1vKp1+xDxtknDVLfkgUyAp8rTc3j/mpO4FUET31skJh?= =?us-ascii?Q?nqLH2iI2YwWdvrVsshCAbcrzqJqPCV4=3D?= X-Exchange-RoutingPolicyChecked: cLPUgbpJ65bdBFXzQlXkW6tGTOb0LrIASWd/UEOFWrt4kWJSJhmq2gqG+yUJYqemX3R1PQImegMUkGvYZsoeeW2Nc3HsCWI2Tz4IngC6V7Lujmf8N1bz7TLTSR1uLY3NjN+8bYGH9Fa3cLukvGQGLLX4ixiZHL5rpyniraNdEtXx0jV3FzWUkuHY7ZW9VaNFxicrI12+3tcCyjQAvYq4W+dZAGkkXY9fPs5o6tKwddAm6YWCavacCVabXnpkXzPEZQuX+8I3BDZ7qrO5PGc4D3X+kRHRVTVwmPbrrmY5PdAHnX0NQdkh0YzlBuW7tLtiszw5ae4h65yiJeU1DKfoRQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: mb4CHZkARPWv91OpsZNXr2Nj5Z+5XmLP0biOBnGYG1/Z4CHMm+Gz0DMMiqaWQX0mYFhwO5BGDIc/Z1HTNrUWWpQEIaFPC4TQmyz7J1wozgZ2TlDev0cUkNs01hzRfAkFjzGFkUsTTdX40knNdRYGyU0i3uHZzogoKz26TYrOtTxeE9a3An+7DEovMmeWH9WboCBWL1mBAweJzxErHPstAqZd6mCuH92tE/pquXmOwCFs1iKjGBBvaBf806PPOrBYAjO6I1X8bQg/bA3jOyhWDCPz6Xa7d9iU21PIm8J133WhkvDOUr4ZG8y2xe/52l12swCjE8G1ttavTtyWiUXSQXMZ6h1uOxtDxsJdbO8UFHvBmMdqYARqoPsaHY7DRcWFAl0WiV5icRCSXnFJQ5p4EWeHMDOMRRZLna8PTyOMD0tbD+14nueFh8gwbbEOh39GD8rAw9nmmy8gI12Qmas4QEE0nmluYFGtW9eu5PHJ+LK47dPjHUn5IAb/sAneaMFS3xIY5AnyMoQ1MgS3wC79AD9CqfmMO/zSopMGXaY2j7iDq299TqUfhDGXbAc/BNLAnHvRtxAba6U56P1shd78bqV8xugmWXgg7xr6eRztP28= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 398741df-5f67-4570-3d49-08dea5172946 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:23.0613 (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: 0gMp3KJ/F8yxg6CdcoYj16fBRmcAVVHzXso6Tbm56LyLKb1+s9NcuHdT5/rdaNwp8vwMBfxE2sXt9S21tG9zkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 bulkscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 mlxscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX0650tE0gTqoo aTxGH2rJJPFxWSndtgyq9Ao5O7AKLBM1h+lmM+DRepsULlsgpIT+Oc/d61Dd26HnlNU41B3ZZXF v1yfRvLPMafju0KAsjP/xYc6vu7NqCaoHo7ZXjPiTpPMST+5b1TBxQFfureVA57HNigh3uPxsB6 FPhENDjXRjILT1Dw7P0Tf+bO2ZLgFOH4X4aINUwO+LcmAUoSqlWaEMxp8f+b8Ns4WjX/2X/Ikut fMMwBUI+Y2i5TRu7qYQCoEHNIUfd/dhRlGpgZPdvO+QsNJLHQJm2QiRtIjFfOJ3nfJRQEZn9I99 85js/2QPwnRjNUXAJrQpOQ/uUQgh2Td14/9FeeEKPnqTEUOsN4YpKerlUrm/SXCJjE0nrnervnR iKaieWfXOmK4x9lIXSeojty+xzHCXZv1Q+NY4VzXMz90fcgsRoCI2D+WCV6frHpN05DJ8Z8tOzz q0h+WI9j5ylvRlfIzaNyJdq74Aw2mTD1MyoXp6lk= X-Proofpoint-ORIG-GUID: V3kg9NuDkcCyBv7QODo_-6rt9vNIyDSU X-Proofpoint-GUID: V3kg9NuDkcCyBv7QODo_-6rt9vNIyDSU X-Authority-Analysis: v=2.4 cv=E7v9Y6dl c=1 sm=1 tr=0 ts=69f09658 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=yPCof4ZbAAAA:8 a=Aed8ZSgTGLsvUS2N6I8A:9 cc=ntf awl=host:13844 Content-Type: text/plain; charset="utf-8" Add a wrapper to call into mpath_head_queue_if_no_path(). Signed-off-by: John Garry --- drivers/nvme/host/nvme.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index b4fe7a7dd7f73..f96ad4f890797 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1080,6 +1080,11 @@ static inline void nvme_mpath_synchronize(struct nvm= e_ns_head *head) mpath_synchronize(head->mpath_head); } =20 +static inline bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *h= ead) +{ + return mpath_head_queue_if_no_path(head->mpath_head); +} + static inline void nvme_trace_bio_complete(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; @@ -1200,6 +1205,10 @@ static inline bool nvme_mpath_queue_if_no_path(struc= t nvme_ns_head *head) { return false; } +static inline bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *h= ead) +{ + return false; +} #endif /* CONFIG_NVME_MULTIPATH */ =20 int nvme_ns_get_unique_id(struct nvme_ns *ns, u8 id[16], --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 354FC3FE641; Tue, 28 Apr 2026 11:14: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=1777374848; cv=fail; b=kNFtg7Z0xZqKvvz9OnhFDVWYLUhjXAPy62iBNjw6NIl14lrDynIk/YNglDY+7wRonex973ZtUERGeK1ChCDGP0Yjz3+3VzhVwN4YOk29AgmBvLPyBN6zBwrZUUTim9cWgHrPAaQW7cwa695dYc0zkpIdWEJFmrWuScCnpmj4GDo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374848; c=relaxed/simple; bh=TvZ6vh5BfvS/Y/X/Y1OWfzBOgV14MZkruxAs+OfRzvE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nPcnzcpQ3j9WPR+fuuZfe7UBSIqX1Gi57vx7/Uar6gfQKOJEQ+GEdlL5KKszWMDdA/MEWx7gEUgjE6TkY8JphjwWNCxCacHh4u1yfMIz2NVbpl/xDo2RrvK6h5sXTQo22eg8UKq6YEagT051gssMds9vI670jdwwW9sCaFbIstQ= 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=Q37QlJje; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Gh6arTgY; 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="Q37QlJje"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Gh6arTgY" 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 63SAIeI31905229; Tue, 28 Apr 2026 11:13:30 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=5wFOpu0X7FTsWVkHtSOcaOpDbWwzcDbaK4r43lDnoBM=; b= Q37QlJje9Ds+vTrL3na0pG1y78rWGNfLSMBng79Y9+btapOhYhgn3Bzvkarr7Nc3 iGFVBy1QqdJobX6UrMFZ8YrRluh75XruX7qlv5MmRK+GlcHX/IXQkBJbAzAJJAQk ZRZjlV9DwHpePM5VRVEbHyOU1miNmWgbVnW8QxxtwLUE3VOrfxzbd/TyB5sKkknH zOSw/dlEV5JrIFd1jEXczI01LS1P1Mims29O18dMy7VlrgaAii/93VVoRvnqa8Ct 2UovdZcmfIT9Q7oRWSh3gtkG6qHozHRueoaCrscBIr7n/gE95CSWslBDhoaFoP9H 40c5ke22clqxhmVV+qSX1g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drng8fcr3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:29 +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 63SBCmIj038793; Tue, 28 Apr 2026 11:13:28 GMT Received: from co1pr03cu002.outbound.protection.outlook.com (mail-westus2azon11010043.outbound.protection.outlook.com [52.101.46.43]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2ccjxt-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:28 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sfSikzveQT7AB9FdzZlzIrsKUzTZbf7RhcJrRXw1lE1cGIUkKYpsXyt7hkHJtxa+VQs24w1AlB69fRIVZcK2nb+OpqxoCNW21aJkAatf+ATbyz3JjX8MA5yZdMW2ETjMxXmsYEu8zNVGOm9ygX2UxvAYRDs6Fs4PShR6kbWXPz/cFqEQrb9IGS7cs3uE/I1/tu0KixvVzqu/jSZwlbFFBzncuh1VOuqbnTfu2rgWU/45J2iVBjtqGtvnMPR7pgEhzXNZnOnwGc4h+cpiriqVG2Ud1Se16ZZGobK8Okwd3NaO5WmBeYZdyrlO/Q6vk+Rs1QDDO5Z0bxnWsMwQvJ0X3g== 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=5wFOpu0X7FTsWVkHtSOcaOpDbWwzcDbaK4r43lDnoBM=; b=mnb2jZtCLBdaYdIGr0Aua7P/Nt9vHwtNOtdi1s8Yc81bXAlDTNkAcX3jH+ztKmsozs3VFP51/Gq6pWdRIagtMaLgDvc28+ys27LeZZK0JMHmkbtyP3CvXLxr/3hwNHANb/jnDxqLSq8iGOwCU7k42Jg3T5tk5rqJ291ks6WYirgqUD0HkntGs47rieti462Ii4rK9A1+XOgGLevDElbbgrWLtRGBKa9hREsGE5K96ZNlEYRUPGYHwS6nznG06dhK28h2MlPadSE3K0sCFZfCpjyw8eTLIM/rZv+GC73I8l12SpKmasrWoVuVoNMhwZ1fu7RnoUwQyYvW+ecmZE90aw== 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=5wFOpu0X7FTsWVkHtSOcaOpDbWwzcDbaK4r43lDnoBM=; b=Gh6arTgYjOWfp2mIjZGqmFE1bNwBu2hULyY2eD1fqwrcVIMiQW7rBcMh/11DxH3joP+MwoFNkg8YnzPOxZDgh9tS4C8P46LJd/buE6dQS0jReEztNP8sNkMDy7qWPTDR9DJ/Ly+0ATnn5X1TQ6sV0j6hcXnS538oye51N92G/HQ= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:25 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:24 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 12/13] nvme-multipath: add nvme_mpath_get_nr_active() Date: Tue, 28 Apr 2026 11:12:55 +0000 Message-ID: <20260428111256.1778475-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P220CA0135.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::35) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 28274525-2f5e-4ba7-bf54-08dea5172a50 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: sUGZ6KU74bsrxUo4gT7VOseN581ET1TdShXXOqs5qf55xao3h9bHqy96LEwgt4WBkuT7yPWvqXTSccoBVfKKQv9WyM5p39+dwmQe4gUS98bGk17NxJPaMDGnbd9m3819DkATEn4UUIthOpMUtr+9XMnYqhmP96s/um9M/xEqhT1WpE/P+vHF0EONRQPFmbq6xgJaEnQq5ZtPcVobzVVOEe27XBoktPMs241U1F8Ar2m1/g6qC85Kck0T9Bjg+QU+rCKU2S7ar4M8ZX+wF23fKJ2WTWBtheltIQ8jm/eA1sOcK0erBi6MAHj5n/NGKWoQ8un3N/p36c2L8EUzfnlNjSaF5+IhztGPXh6a9aUn+yXqlhgQb3Ij+znF0GWk+f4SDiLHUMAO7LWysLFLFbnp9qB7eamfG6LIk/N2HIV6khx1VyXBhWj9At94mE26Ot5aEHBAUmg0MhqS2vl216dSgLtUp0ZHbEb8yOYSUcGo40irAPkErC+p87sG7jATi89ZltTdnwfxmB2vbOyjovIv0d8pPjjrKObkL6aOJ/oTNElui5jgYIxBwuXYZ/K/4hgm2nbEzGYY69mKGG5GHO8I7M2Hz+8t2JrRMz1CpIsC6J/8TV9mSM0aULwAk5GTHuSZTPz+9QtMOHDV8pRAj6B/BWKAegbR5+2rubJmHqtoCDrJEvgPHwXQO6tS5zwjuryq3nLzctpAx66Ku5i8+TrHzU3YItICOT/rp4kOXluOHEo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?v8OHubeF8pF2BLUcofPQ5aLcExVJN8jqwoaiuUZuGwZvzU4UNBSTkFtmQr5K?= =?us-ascii?Q?oOJBbDxTBQXdT2dfSzgCuYPmwnpa6bB6fnd4bdEL6Qgh5oQAaU9fxIk6DjHR?= =?us-ascii?Q?xXq07Ai386VhiSqD1jgKnAqCiPtUJVKkWecXtORn6SvlA9MW3YvYuLyelF6w?= =?us-ascii?Q?2uMrNGfft3Cz31y2oKza8LWC9j/RNW4E5MwRkfH3r0zUYSAvAiod2XyPtWhM?= =?us-ascii?Q?zNv/7tUogjzvVtVL9LJKt8Y1tmu1UQ4fG3ukPuPViYko+E4s+Pnsd8yZwO//?= =?us-ascii?Q?F6QY4H5h8aF1ZT360UIAEuxQFF71pO1QzTAdpf6UKcumd478n7RstG7nhAZa?= =?us-ascii?Q?pfSBa42jGg4YMe7QFfoWSmvwxJaAIelK5HGhA3rRQu38d+xSr5P3EqHna4ep?= =?us-ascii?Q?71iRb8SlIVDX7b9Rn7U46/hi+0b+MEPKxugyblgyiDF2k8jZeDiwQvvIIcMc?= =?us-ascii?Q?sk0spfEmY8iA84bD3T+o2Q/DPoCNih08dA/Czf87NpXv+K4zEBrwmyVz+e7t?= =?us-ascii?Q?U6Xs+EJ2BiTED0wHeS40Ador+lJAXqDEJJLmDco3T6E0uedSc6lQmfV1YdhA?= =?us-ascii?Q?eer8bEjeQM4wRYBLbah+sx+DZcb0UI8QV0mjS0yrtwtfkQ371ZKjDcgNTzCn?= =?us-ascii?Q?70ltdY/NcXIoi1LkYVmLnydtTYEwJtOjUr6Otqa08eFQbPVAHtfhzNrLdRbj?= =?us-ascii?Q?7eAGNoRhORFBE4wE5YTLRKCVgW9CUl6rp6KLsECCg1RuSsiLd7hVEnHEO9wv?= =?us-ascii?Q?TIHtypIc368GaBoJkeISWweT6z8tietRrjAiERknbuO/iYaw5hSQhGRZTzRl?= =?us-ascii?Q?cUm3EWZSTqvsz3l5UPLLYKZAHRX2HKbtxQEEycCr/4Eu9YTk25Guy917X+K0?= =?us-ascii?Q?BMFzbl6TcvVoyXNB79KLftcGQweyq1cZSDAMO0cVJB7vGCT1cUvI4eYKWj0k?= =?us-ascii?Q?r3yLNxCL1LxQ3bRFxyN3LziAhjVNX7D/ljQCVVqY7QtU1wzVi3MVt4dFsng4?= =?us-ascii?Q?DgQt4jHx6xgDwzww9yNe+NbYD4+cDWovoR4TbLCdWOW+JsY+eYq4m3+3kq10?= =?us-ascii?Q?lJ0LaHL/LhL9fp/OK+6QpCqM43eqmbcAcak7mXecyDSdmGd2ezbg/uz4W058?= =?us-ascii?Q?ZHwaL7JRoSF2Y0f/Gve0fswJR/TKe4+Ht5jIsvQMXKjDoDa6VY4LtQ/ieu6a?= =?us-ascii?Q?oFq4tNlvKibyoWlOfCw8DySCwCiguagqVlQypQWSUMSD+1bYOjp+7Z5GA4xs?= =?us-ascii?Q?K9D8r0zZZWFG8BOz/5/Mr1K1SLbAVeKIJE08d6xcpBqAk77TMhLrrD6FjQHT?= =?us-ascii?Q?Ovf89RTQDv4KgQBioWfIiECeF3VwjF5wFynTV6cSa72aeWvCWrAzTVfTBPDY?= =?us-ascii?Q?FCJhai0lzThhsiEeN8FDYBVgn1fxrAj/tm9VzMf2bGbzN4HsG5OR56/n8Y+V?= =?us-ascii?Q?ImpfqXAdVDxBC+SeBMgqDuEGyz5TdhAmeNgpFZwYgXnYpxp70wUyr6KD99Jl?= =?us-ascii?Q?jfIM0iJ5R7IKEWqgeCFRflcotITehfbJTHdBINs9ay4HfNaaGy7xvKqbpo/k?= =?us-ascii?Q?ts5z5mWpMsd+iJFABNZ8iW9aguurZcmuQ4TyoGbxHclKBLFSXz1QBehh1/Xk?= =?us-ascii?Q?21aYkz09MNFbi/lsdtXU2I3vX7L4LdSqQq1MiO3dtSLf5B+ClQL2lagmZzHn?= =?us-ascii?Q?0ZBa2uvWwveVriSc5jB/RryNOg/Rrwv6KTFGHit+Rhfu5h0NxpWTOWk7vaUp?= =?us-ascii?Q?2jUG/3JluS16rVvBPoVbAy0vsidmgC4=3D?= X-Exchange-RoutingPolicyChecked: qFcmXyXMYQtO+8C697ijFr88wjx+j/Xgc0F4nhHRecTOlF/1hC29VBalPzQsC6ACZE/p17CBfw+16UsTalgBiupEDMUvAFrmeGOsdlda9WNXU8DE5Z5QsMSxwMmuC25ZGphVDHhlFst+a8C69DJqZvBDK5hJho60q1M/f1NoopZv1SqAX/ECMRHHqFNPj+GcQAmIXDpmctbGoCPHV5f1h10W7ZUOIOpWkLS0c+4tharER6LaqfadLwEghrjYaSrQMQl/Wnn6Y0AKj8HdGTrTlmnMLwcedTIdwBrfkAPVJQHAS4V6yTLGT5P5km4c7GvvvIvlP2JPzP6bB7f31A7IpQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: V/Hfm2tNVFI+N413S1awWVNiRvQREV7C0YwEAiALeyGhCVCOvbTs3JiniBzWaagkefjhcnPg688cth9dDEJXD14wBdNMR58ndl6s+Gu9CmpIR04O1NJ0/d0ldZ7FnMqZNqAj1sH38vK0n9LW2hQkzF8PDPqSHu5JVJyC05O9R7+fR7xJa+x50WaCXM/XFiK46+Q/RUIHwJDKOt9Q1yibWOEBkRPwle5d8I1ghy7Zv0h+ZucPJ5VCYg8FraADRxB5WFKbA/91VRWzNjrZ9tc4XO/zK/YFMkxd008HKntcHA0lDlKP56HojDII+9T9R8UwYuQ2lArZemT7sbrubVxeGOl3GsKmeYSpyOGt92aKkl6PZM08YatIsC6q+R+qDbM6FHkNn/X4cQrZmK6pf0S9CD455qU409rVlqxEPvsYgi39zRmecJRBBF5GIifa32pZcTrNze208FiaQulYisfZC3zQmvJl2iqlrEO0kr9P1pTq+V+k7vQM8t8Z3Kwg32M64Cvi5GC/+G89TlBFVWNxM2p0qOYQ1hjdXB+/4xGqBAS3DmN0lDNO6S4JB68OML2vwo8OPf/+NWNdg2LIC/vx7Tm9oJLXHs9nuX2fqVc7Qbg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28274525-2f5e-4ba7-bf54-08dea5172a50 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:24.8593 (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: zrl6ycWyBByM3pIw2JUJI5o5NkqbEkNXnK4KKPuzKGNnJkskSy773Hp4uEuiSkoGD024gGxzG4yfpFDedYaTwQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 bulkscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 mlxscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Authority-Analysis: v=2.4 cv=U7uiy+ru c=1 sm=1 tr=0 ts=69f09659 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=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=hbqJSkJ9pTsutRKaO2AA:9 cc=ntf awl=host:13844 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX+yLnWMXRpY+X rFGUa7WdxGt81lZDmkK25m+pFLZo5BWvuWokwNHv4w1PBrSfSQUXPRVm1xft6YJWMzfvQLhr0b5 JQLHE5OFuwbK388otTEbM+vLYiil1NrOZtCrrjB6KnUSQTzNbdGJJaQ5IdaLTekXv2RFPCnnYhS 4eghX9TeRwdxnBCHyHz5Gddmj/93FKMJlS6q7JoXq3QEQ2kRyyIyD9wsuqS+Kja1FQJIOnM6JnK SQzskR5E7ECXpSvJtFSiiyAQu1C2e0WiTXfBAQO975Q8TmcF+/bQSMB6U8Ybw6Vp01s13I/dfAy RDYr0Xj0gyX4hl77DpH0g5bX9Hwakfku+3X60tw/4XdPPdtwGKl5s60x6IGNhRA4ewwlmTyvjU7 DwjUWMnQNSxRf9n0/hg8q0OP/4yFrxGlc+uDTcMUbs2OBS17KP7O7mzhKCr+M4nYQXEo6P0m3yf vhcLqQmuvF/S1uVoqrPyW69RsxHTIYs8al12/W7s= X-Proofpoint-GUID: LxUKRfdDy8JhZBBEUPNIm2buGGpdxbRs X-Proofpoint-ORIG-GUID: LxUKRfdDy8JhZBBEUPNIm2buGGpdxbRs Content-Type: text/plain; charset="utf-8" Add nvme_mpath_get_nr_active(), which gets the number of active requests per controller for an mpath_device. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 8025cf3270cdc..62e13a484ff5e 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1446,6 +1446,11 @@ static enum mpath_iopolicy_e nvme_mpath_get_iopolicy( return mpath_read_iopolicy(&head->subsys->mpath_iopolicy); } =20 +static int nvme_mpath_get_nr_active(struct mpath_device *mpath_device) +{ + return atomic_read(&nvme_mpath_to_ns(mpath_device)->ctrl->nr_active); +} + __maybe_unused static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, @@ -1459,4 +1464,5 @@ static const struct mpath_head_template mpdt =3D { .chr_uring_cmd =3D nvme_mpath_chr_uring_cmd, .chr_uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, .get_iopolicy =3D nvme_mpath_get_iopolicy, + .get_nr_active =3D nvme_mpath_get_nr_active, }; --=20 2.43.5 From nobody Thu Jun 11 06:59:51 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 30B003F1672; Tue, 28 Apr 2026 11:14:00 +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=1777374844; cv=fail; b=kq364/e22xnIWtcuUezHNLeFaL6X3KZtrzzBgKm4GSjcwa3q+ZRUTKJuCGNV92bM0xZ/3w4sTNth37tbLz3MNIRn1tNHpMIkpX7KrKrG6hJgIwC9OMiF84PFHkgJ7xauCtDJJqXpa3EKnrBB+d0yhJM0OebAdOaUWdsa2HaiCfQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777374844; c=relaxed/simple; bh=g+LudNC6jc29kPE90yjJahDHQtMOepO9qaTd6sOmAyU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=V9SqajMZcF/4wI7MniutBTuX3m3g88HFGSxUwZd5MOtinzTzzC9Q0kOPSK3bbeZvZ9ys54tCcVHB1kEHxnWUkgNGsBN8UZzBFSf/4mO8E4kkO+u3PMukBDmOsjQXIu/QN8F+E688fZkfihj0A1OozFJJPWp2aXcOELoma5aOHcI= 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=WpvlRGal; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ynlb/UN5; 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="WpvlRGal"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ynlb/UN5" 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 63SA7jTp1905280; Tue, 28 Apr 2026 11:13:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=xqSwWDoNXnAASUvw1dGQlUqfgqUVrMRkp2cptIht14Q=; b= WpvlRGaltjic66YjPqOk7aSg/q6ln0HrLJ7eDPvPQ+steMQ3bS/7xTSAZah+W2lI a/FrcBNVRkMes48QifCwU++pIxTYLkmQR0cYHWPk0NJshzQrvAKGQfNnraUVAPYk +9bHsT84XPVuwmYMyDDp/lQXbjDLRji77ThgL8UaowMPr5487MszxvcmgU3cdSsJ yKnXuK2aS87oDx6an1zU0weNplSTNN611GShOACFx+gM74zWNgiIPWVj2f3IhkTK PhifSA/yFmT1r7DNYaVzDGW0jWna/brF2e9x2/KwhM7dM3JRk729lpJOXToPfezn qhyLwyAMXVF9eg7WDCRLpg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4drng8fcr8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:33 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 63SBCkSE004731; Tue, 28 Apr 2026 11:13:32 GMT Received: from byapr05cu005.outbound.protection.outlook.com (mail-westusazon11010019.outbound.protection.outlook.com [52.101.85.19]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4drm2jm3mc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Apr 2026 11:13:31 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d+3Hful1viE3whDJSIh74QrZMWlDCC4tfZwihzQUNKcIqcH/fq/MpV+JE/JQFWsVkrMJdPFMnC2X6pPF7m7krviivb2sEYKGO/s/p2fz1cbe8xNAWENVMD/inDPpRfuJAubkv4NvLNbTPK5yiRoId7vfvStZ8UPc0MKdoJPTahFxYG2kyKxY2ssrwXRL5oBZ5HYXRgSaqh4XwznwkXhnta9NWkhUH53YqWITo3KWQlPJ2TI+dhvCYAcJlu6/egX18L83ICa9AYI0CFoPuwRGvHiGxGIEA9bXbH6qOKTjcemUl/Yi1NVfFFoyt4QPr8+iBqYOox7wrWSJmSnvNx+RgQ== 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=xqSwWDoNXnAASUvw1dGQlUqfgqUVrMRkp2cptIht14Q=; b=xi/a9JwP1nH2fKXNhGLIgoxS/9uTIBFDHz9ufozuex7gchFs+6zPyiDad4tZNLK/fVOU/Axmv7bpEmvBsyGoDZACi/b/voK5vorOOzjUBMGsiqrJtW7iwJTo5EU0U75f3CZfYiXbcSZ7oYtm5TmlQoVQNCu1aGbm38e43amdqeN9bGEP790SFh3IqNWtWsfg1ZBOaxadw8ZhwvuTJT8IHFbAQT5b216oxLrD8AiKHmig5dMaHcBZn7XNUCtFrHazfLDK7ADcTW9YRs9idRhTehgEVuf6QUGqnIwMPNmn6/Qkt/nvFX+6dmUxCIUuhs/oM1kHzl8nSL9nYzK1mk2Eag== 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=xqSwWDoNXnAASUvw1dGQlUqfgqUVrMRkp2cptIht14Q=; b=ynlb/UN525b872wd6EeynF8AdPBJt8CQeaDQctS2ZTx6lmLVoxGNv4w+Z6/eJK2nTvO1njWHIJGea1Tz+XG3cYRuUNe28rZXc5/lx66rB+Urt5QsTgsSIeJw3oJ/FJvUCcLFYzZcORfSlYqwOasmGc18hXAnPy6LyQ8LM8s8GaU= Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr 2026 11:13:27 +0000 Received: from PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16]) by PH3PPFEDB06D67A.namprd10.prod.outlook.com ([fe80::234c:e047:21c1:6d16%8]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026 11:13:27 +0000 From: John Garry To: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com, martin.petersen@oracle.com, james.bottomley@hansenpartnership.com, hare@suse.com, bmarzins@redhat.com, nilay@linux.ibm.com Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH v2 13/13] nvme-multipath: switch to use libmultipath Date: Tue, 28 Apr 2026 11:12:56 +0000 Message-ID: <20260428111256.1778475-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260428111256.1778475-1-john.g.garry@oracle.com> References: <20260428111256.1778475-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR07CA0021.namprd07.prod.outlook.com (2603:10b6:510:2cd::10) To PH3PPFEDB06D67A.namprd10.prod.outlook.com (2603:10b6:518:1::7d6) 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: PH3PPFEDB06D67A:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: fb6f0f42-b093-436f-0c5b-08dea5172b85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: VIpp44UQ8FxudcbmyE9Xn1dwNFBy3nISISbmSaOVdDPat/nJ+b8s0z/DAFMFonenXR2vW61Pu9EcWAfcDAQXTB7mVFIlc/Gq/zWwBedrs6qRKJyAAg+8nkmjOc9jzu/SP6xcBZ1kQ0VZjPg66lJERjYUxnQcHRSfaGfRAmib4J/p8QYEy0evAhxxjS97WikffmFySz98/8s022IvEDZwUkHs6Li3li/sw1ZrvJoNzaVbwHscE3pFCyatzPVAujABgfx2sv/uOrMVhASc5fYZcx/8ZGRzXqoszOM0jxF7mrzoZA9LdMaoHJePlr7Jf+897hVhXY4duQXR+LaAVXj9usDWUMq0/tj5rSHHedE7kyjNRB7wXAbSQzXuQUeeidMotXZ9kZpSwTnWDL2FOfjgK7bZ+LiRhq7N49V5dyov+8uc+804MsXl1eYF54isoDhMEQM4jFLiSRagTep1ID4unBzxNwpjmrsb0TD2CHmaSNAKdwmTRJ4pTqc/YiddFNQn6pNvUZLK+4Q0dDI+9Uj7rAwwpqriXVR8Vbd4kFlO35UCD2DFiPQ8Ho6DK6RKTsPyjYwIJtiyKeZU6opAkwc4iu8WEF+rg/Wj5Ck7iy21m1FPujjVSJdHQYpk9Zo86NDhmLPSglN1GpW7hL0l8jyINNQJ098bUsjtS8kLCf2BO1dq+6b6Y3o35ipet6KctQn2OzDPB//S8fhIcy7Vt6s8u2ghjaNGx9YvHvsNtrOZBcs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPFEDB06D67A.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?64ViN+AZCBexrUvTaSBPpiJ94paOZ6noN0RzT4kJyqhbb+cuhCaiv7YoWuLv?= =?us-ascii?Q?hPnSzG0qzu4hKKSvpPN2Iw7WWXs5Ogdf9Rx8MjqqqiIh/VKqCpGBtKZlOYD2?= =?us-ascii?Q?q9qYMw5WCos3YmEl9Mq29MYyoScBwrfiEzhiBwzAKm/aqxUr6CtxYa+X5LsJ?= =?us-ascii?Q?y+2IBJ6k1TpPV07IMmFx6FwedjmPydugi8wUM7p9C+FFfs8lg6eJ21B/UIES?= =?us-ascii?Q?TqgtbcK7JjluL/8YJbkKe5f8xvVaP/JhUr08EAA66pNV4dhHB6bdxRwQznTl?= =?us-ascii?Q?oEuPsN4ldRsVc7lkP+7C/7usnl/Vui5R9Zsk5vqze/1DFzkXIPgB8y/q0DQL?= =?us-ascii?Q?3b2vuDWH9ObJQeo9J0TuKCUPzRu5q1/cZoHT+10hKxDCUnDIRfczFnSx2c3e?= =?us-ascii?Q?pHZcVaIlpImGgOlBqvJZsYAG05eRaCVMf2L130+/fB2vUwy/kHW1LsE6zj4+?= =?us-ascii?Q?Fcd9xECbm3GBkQNKk8Jx3qZ50P/79ZFm69ltLUt+RK0Qr24mtCT6DWFSRwmB?= =?us-ascii?Q?PRpsQdIDGJby3CeSFV0YMVV2Fz2+1QayXBI0E0PgQCwt3r1D2pDKpHaLN+Ey?= =?us-ascii?Q?AsHPuaMgj51J+5lcokTnAtuuRZIl8O+IqRz0SfpcYOtRHO/ZM3Fwojvdhrux?= =?us-ascii?Q?+v7/yAeURwZnIShvfWs9XlJH0v9OXjMB3tNYeIhD9l3NADsPrNdYj5e4BTp0?= =?us-ascii?Q?/f8GLB0WKYFOqkkxWpH0z0+IwHrNjxqJK67gk3TY09WbhxIUm9+Jq58/BsBN?= =?us-ascii?Q?jc8Yr1r2WiSYZG9xId1yCv5rEOPayUeaen0teE38dpUlPUXG/BPPay1ZUOVg?= =?us-ascii?Q?pp+zf0vtb0CS7/r/ErhA5rJV8qxIDLjZiQiRc3cTuXtM3BZAxTLrkA9FOKX/?= =?us-ascii?Q?7YNUV6lYfg+nG5dG+fozIxe4nh8Qmo99+zi6jer8FzRMwVHzPayGym9AuyIT?= =?us-ascii?Q?ZskFFz6zf8ZFTgOMOKj4E2m7As/bjOVUhclWT8luLg2BQcCoB4C0A11e1r5n?= =?us-ascii?Q?VyOeFPXGC6RI7tUKj1RVzv/IoU3zaPIRE1PAaczolw1DTcvyrRszL3Fiudfc?= =?us-ascii?Q?l8c1WvpJq3s1I92QanS15GKiYpm5UFRrThb6jjP4u4zrFLpv69JdyB/X/21B?= =?us-ascii?Q?Rb9FN8trIkvFV3t7vRTqIIKOBXKPPPcchibOao6IzwrzXwO2IwScd08ngWKC?= =?us-ascii?Q?Gybr229iYNkfOVGW7IeJJ5IE1HD50DuliddJwG77WCIEwyIvzLxTVrns/gXV?= =?us-ascii?Q?raxvsSgSpO/qSZa3Vg55zA/w/rAoHsqc19HmdBVQEXoIMVhyH+v+3TIh3OtU?= =?us-ascii?Q?8Kueq08KSnyCMi/ZYXZ6MBxelXkRxQynodil41nVOI6dPj7x0iF+rAOHXnAz?= =?us-ascii?Q?6pr7wfy8j0arl2FpHXiBWItTQcyXShkEnfIypDwVWh0h7vdhqagWfKL7CPES?= =?us-ascii?Q?MV7OeExzrt/MGdWl1gRMj7wwKKHrMo72nWgajDjHaUlRy6Y9vFF54f3oiOJe?= =?us-ascii?Q?Zf643qDD+3GZ4OXRLdOJ5tbqsUkWE2YC4cmIHvvp18BtZ3icLf+NIjD+pMjX?= =?us-ascii?Q?9yj0dvDJ3fnM9SI6RtnBux/FjifDg13xjR/Y1QbTQcu+AE+ke7pvyHrK59cx?= =?us-ascii?Q?VNXjivrPRWvmUvXIxnrNN8NaAfX6uamjes+HmqZUHIxv291bzB7QaP4rly4x?= =?us-ascii?Q?B2GAgmIK4Dqq3V+u6yY+tRYU0FuUkzN/JVa7nXMzOPgEdxkrN5TeCgsmqp+2?= =?us-ascii?Q?eq7UnjZrbQq1RFxGbVoYiFbdDZnBKdA=3D?= X-Exchange-RoutingPolicyChecked: mnaZVGxWt2fuQUKCx7UnIexKjsgvDMXvjHuwI8BI2Zr6Mt6EGqmQxPJDoyGXMCqH4MxfhvNEm8bR6sJxNc6obsQXaQT2t+ZlIrSxQqnMhtnau9cd86N9i2CG2Q3o7js8xUIjuU/dtHkbcQtmHIFOkgoVFMI4WXtubmL3MRPsSlqiUCaPX617yoUKblcaMCuEP+QQgU+KnpA/BLdgfv2bE6jX4DBG4Qtq2ayt9aY1UrciXXdMYFSH9FkOk8YYh9eKQyYaUHeZReateRww/Iw0j2xxGEwsrcpTXbXfBQG8pNfidnOabQcKTqGBM8Ni1JqhTlUfXMSxPPgIiblHt69DmQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: JFOBcQBKJ7x4PWTnfT9CQ1jGg3SfXYTD72l2A5VSFtkudYjvs4Ovj7xOS6Ti1wYV31kyiqfTs5/Vk1qfS3OUFfQnDre/pg2XjnUqYHeJGj8xa8lBdxcqOv/BqziMX/VCCbYMobzQ4Dv4LFnt9quya6CEpdnIGOViyFrjhz9I7ckUe/7Zu2m0VHR0DW/Uz92cOYF/5jl1oEKAsgpNJAfqFJ8M77ytPnDtA9Iu0rPAUSWEYfdMoUJLEHO3kNwkjyY750U2o1jzN+XQQgAvka0mh8voKNK+4q3XFrABJMJquoyDivNRpIehPwLuY1T0sQA05xSSar/WOicL3P7dq6at4Sh/LdsFgvQcaJyogCCPc0onYHzAi74QSsFZAek1eYrjXOIUTdD8awaBEEoUsgau3/ST65sw1a99c0NxtrYm35ElEmEdjYXg1rwob1yQPYQbUn1rq+w0hPEPfe/BCLtw3+jnL1oo5oYTRCgm/ahZXkp9doHQmI/F2STTWJ3qmyXFIOvubUeYbey32WkPDB0/2fWhhTA+BmfsY0s1GuX1R2rqS3m2/WLPj5XNe3PUHZSFHQK+MjYjEs2IDEDzHVakx/UmFmoYX9iIRa2Rb37dA5M= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb6f0f42-b093-436f-0c5b-08dea5172b85 X-MS-Exchange-CrossTenant-AuthSource: PH3PPFEDB06D67A.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2026 11:13:26.9681 (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: oLbTtPGQr9DVtY9wrhfMwmzgYvHF3XVeMt6DJqvrotA74x874HBnPmD1sPU5WKox+xrC9f7i+C/YpmkBBuO+AA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-28_03,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2604200000 definitions=main-2604280101 X-Authority-Analysis: v=2.4 cv=U7uiy+ru c=1 sm=1 tr=0 ts=69f0965d b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=yPCof4ZbAAAA:8 a=jqjUz5srVNKpEaAUXaEA:9 a=oiXxVkHBtBvkL9RF:21 cc=ntf awl=host:12309 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI4MDEwMSBTYWx0ZWRfX348OkRVTdcIz nsgr/jKJpWuIMLkgT7SpPkmA3qpd8kkBZ1ihorijL/BrZeAGHhDCpDEOSM39wa83iTxEh/YUDt5 sBbfAZg8QY+Z07IFD8Bg6rirOkPmPUlddCSR/ZsFnAwAoMnG/R75D0fZRLEyEdbw+PvyJFDIy6v lbbSYyEvfv+TYYYham/VwzyOyR3zQpRHuLC0ca8rW+PWpRKUxfKPiBZ8fnhLVDKnAkqdLJIm9ro wlQYw//4Yduz5iVT2e6UkqnHyHAP+ZriV0Y7dHe92ClJeZSPguc1cYEYLKeO/GqIrCIRNbgAdco U2QPPfxoy6V5pvHha72R7N2zImxarQIRsCE6ajF2rgT6e8K8TfjFGL1SRs2R0nzMBPtI/sEFn1H mqh+FuejogKy6ZcrLEquIcCQC6MKR27xsMm4Q0ukYh6wnAoKjeE7Mwb86+c6/y094jUe0d7ynqi Q3CRYBAvGONZGLxhDNCCH+PQxncBOS09RxyrGCsc= X-Proofpoint-GUID: A6ebyt74w0OUjpFArdrOxJIoDH_pZ0fN X-Proofpoint-ORIG-GUID: A6ebyt74w0OUjpFArdrOxJIoDH_pZ0fN Content-Type: text/plain; charset="utf-8" Now that much unused libmulipath-based code has been added, do the full switch over. The major change is that the multipath management is moved out of the nvme_ns_head structure and into the mpath_head structure. The check for ns->head->disk is now replaced with a ns->head->mpath_head->disk check, to decide whether we are really in multipath mode. Signed-off-by: John Garry --- drivers/nvme/host/core.c | 86 ++-- drivers/nvme/host/ioctl.c | 89 ---- drivers/nvme/host/multipath.c | 873 +++++----------------------------- drivers/nvme/host/nvme.h | 99 +--- drivers/nvme/host/pr.c | 18 - drivers/nvme/host/sysfs.c | 86 +--- 6 files changed, 215 insertions(+), 1036 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index bb687295c2c67..11349d2f8923d 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -409,7 +409,7 @@ static inline enum nvme_disposition nvme_decide_disposi= tion(struct request *req) if ((nvme_req(req)->status & NVME_SCT_SC_MASK) =3D=3D NVME_SC_AUTH_REQUIR= ED) return AUTHENTICATE; =20 - if (req->cmd_flags & REQ_NVME_MPATH) { + if (is_mpath_request(req)) { if (nvme_is_path_error(nvme_req(req)->status) || blk_queue_dying(req->q)) return FAILOVER; @@ -442,7 +442,7 @@ static inline void __nvme_end_req(struct request *req) } nvme_end_req_zoned(req); nvme_trace_bio_complete(req); - if (req->cmd_flags & REQ_NVME_MPATH) + if (is_mpath_request(req)) nvme_mpath_end_request(req); } =20 @@ -674,7 +674,7 @@ static void nvme_free_ns_head(struct kref *ref) =20 nvme_mpath_put_disk(head); ida_free(&head->subsys->ns_ida, head->instance); - cleanup_srcu_struct(&head->srcu); + mpath_put_head(head->mpath_head); nvme_put_subsystem(head->subsys); kfree(head->plids); kfree(head); @@ -767,7 +767,7 @@ blk_status_t nvme_fail_nonready_command(struct nvme_ctr= l *ctrl, state !=3D NVME_CTRL_DELETING && state !=3D NVME_CTRL_DEAD && !test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ctrl->flags) && - !blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH)) + !blk_noretry_request(rq) && !is_mpath_request(rq)) return BLK_STS_RESOURCE; =20 if (!(rq->rq_flags & RQF_DONTPREP)) @@ -2523,11 +2523,12 @@ static int nvme_update_ns_info(struct nvme_ns *ns, = struct nvme_ns_info *info) =20 if (!ret && nvme_ns_head_multipath(ns->head)) { struct queue_limits *ns_lim =3D &ns->disk->queue->limits; + struct gendisk *disk =3D ns->head->mpath_head->disk; struct queue_limits lim; unsigned int memflags; =20 - lim =3D queue_limits_start_update(ns->head->disk->queue); - memflags =3D blk_mq_freeze_queue(ns->head->disk->queue); + lim =3D queue_limits_start_update(disk->queue); + memflags =3D blk_mq_freeze_queue(disk->queue); /* * queue_limits mixes values that are the hardware limitations * for bio splitting with what is the device configuration. @@ -2548,20 +2549,20 @@ static int nvme_update_ns_info(struct nvme_ns *ns, = struct nvme_ns_info *info) lim.io_min =3D ns_lim->io_min; lim.io_opt =3D ns_lim->io_opt; queue_limits_stack_bdev(&lim, ns->disk->part0, 0, - ns->head->disk->disk_name); + disk->disk_name); if (unsupported) - ns->head->disk->flags |=3D GENHD_FL_HIDDEN; + disk->flags |=3D GENHD_FL_HIDDEN; else nvme_init_integrity(ns->head, &lim, info); lim.max_write_streams =3D ns_lim->max_write_streams; lim.write_stream_granularity =3D ns_lim->write_stream_granularity; - ret =3D queue_limits_commit_update(ns->head->disk->queue, &lim); + ret =3D queue_limits_commit_update(disk->queue, &lim); =20 - set_capacity_and_notify(ns->head->disk, get_capacity(ns->disk)); - set_disk_ro(ns->head->disk, nvme_ns_is_readonly(ns, info)); + set_capacity_and_notify(disk, get_capacity(ns->disk)); + set_disk_ro(disk, nvme_ns_is_readonly(ns, info)); nvme_mpath_revalidate_paths(ns->head); =20 - blk_mq_unfreeze_queue(ns->head->disk->queue, memflags); + blk_mq_unfreeze_queue(disk->queue, memflags); } =20 return ret; @@ -3917,14 +3918,11 @@ static int nvme_add_ns_cdev(struct nvme_ns *ns) static struct nvme_ns_head *nvme_alloc_ns_head(struct nvme_ctrl *ctrl, struct nvme_ns_info *info) { + struct nvme_subsystem *subsys =3D ctrl->subsys; struct nvme_ns_head *head; size_t size =3D sizeof(*head); int ret =3D -ENOMEM; =20 -#ifdef CONFIG_NVME_MULTIPATH - size +=3D num_possible_nodes() * sizeof(struct nvme_ns *); -#endif - head =3D kzalloc(size, GFP_KERNEL); if (!head) goto out; @@ -3932,10 +3930,7 @@ static struct nvme_ns_head *nvme_alloc_ns_head(struc= t nvme_ctrl *ctrl, if (ret < 0) goto out_free_head; head->instance =3D ret; - INIT_LIST_HEAD(&head->list); - ret =3D init_srcu_struct(&head->srcu); - if (ret) - goto out_ida_remove; + head->subsys =3D ctrl->subsys; head->ns_id =3D info->nsid; head->ids =3D info->ids; @@ -3948,22 +3943,32 @@ static struct nvme_ns_head *nvme_alloc_ns_head(stru= ct nvme_ctrl *ctrl, if (head->ids.csi) { ret =3D nvme_get_effects_log(ctrl, head->ids.csi, &head->effects); if (ret) - goto out_cleanup_srcu; + goto out_ida_free; } else head->effects =3D ctrl->effects; =20 + head->mpath_head =3D mpath_alloc_head(); + if (IS_ERR(head->mpath_head)) + goto out_ida_free; + + head->mpath_head->drvdata =3D head; + head->mpath_head->drv_module =3D THIS_MODULE; + head->mpath_head->disk_groups =3D nvme_ns_attr_groups; + head->mpath_head->parent =3D &subsys->dev; + ret =3D nvme_mpath_alloc_disk(ctrl, head); if (ret) - goto out_cleanup_srcu; + goto out_mpath_head_free; =20 list_add_tail(&head->entry, &ctrl->subsys->nsheads); =20 kref_get(&ctrl->subsys->ref); =20 return head; -out_cleanup_srcu: - cleanup_srcu_struct(&head->srcu); -out_ida_remove: + +out_mpath_head_free: + mpath_put_head(head->mpath_head); +out_ida_free: ida_free(&ctrl->subsys->ns_ida, head->instance); out_free_head: kfree(head); @@ -4002,7 +4007,7 @@ static int nvme_global_check_duplicate_ids(struct nvm= e_subsystem *this, static int nvme_init_ns_head(struct nvme_ns *ns, struct nvme_ns_info *info) { struct nvme_ctrl *ctrl =3D ns->ctrl; - struct nvme_ns_head *head =3D NULL; + struct nvme_ns_head *head; int ret; =20 ret =3D nvme_global_check_duplicate_ids(ctrl->subsys, &info->ids); @@ -4061,7 +4066,7 @@ static int nvme_init_ns_head(struct nvme_ns *ns, stru= ct nvme_ns_info *info) } else { ret =3D -EINVAL; if ((!info->is_shared || !head->shared) && - !list_empty(&head->list)) { + !mpath_head_devices_empty(head->mpath_head)) { dev_err(ctrl->device, "Duplicate unshared namespace %d\n", info->nsid); @@ -4083,14 +4088,10 @@ static int nvme_init_ns_head(struct nvme_ns *ns, st= ruct nvme_ns_info *info) } } =20 - list_add_tail_rcu(&ns->siblings, &head->list); ns->head =3D head; + nvme_add_ns(ns); mutex_unlock(&ctrl->subsys->lock); =20 -#ifdef CONFIG_NVME_MULTIPATH - if (cancel_delayed_work(&head->remove_work)) - module_put(THIS_MODULE); -#endif return 0; =20 out_put_ns_head: @@ -4229,18 +4230,18 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, s= truct nvme_ns_info *info) synchronize_srcu(&ctrl->srcu); out_unlink_ns: mutex_lock(&ctrl->subsys->lock); - list_del_rcu(&ns->siblings); - if (list_empty(&ns->head->list)) { + + if (nvme_delete_ns(ns)) { list_del_init(&ns->head->entry); /* * If multipath is not configured, we still create a namespace - * head (nshead), but head->disk is not initialized in that + * head (nshead), but mpath_head->disk is not initialized in that * case. As a result, only a single reference to nshead is held * (via kref_init()) when it is created. Therefore, ensure that * we do not release the reference to nshead twice if head->disk * is not present. */ - if (ns->head->disk) + if (ns->head->mpath_head->disk) last_path =3D true; } mutex_unlock(&ctrl->subsys->lock); @@ -4255,6 +4256,7 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, str= uct nvme_ns_info *info) =20 static void nvme_ns_remove(struct nvme_ns *ns) { + struct nvme_ns_head *head =3D ns->head; bool last_path =3D false; =20 if (test_and_set_bit(NVME_NS_REMOVING, &ns->flags)) @@ -4268,23 +4270,23 @@ static void nvme_ns_remove(struct nvme_ns *ns) * Ensure that !NVME_NS_READY is seen by other threads to prevent * this ns going back into current_path. */ - synchronize_srcu(&ns->head->srcu); + nvme_mpath_synchronize(head); =20 /* wait for concurrent submissions */ if (nvme_mpath_clear_current_path(ns)) - synchronize_srcu(&ns->head->srcu); + nvme_mpath_synchronize(head); =20 mutex_lock(&ns->ctrl->subsys->lock); - list_del_rcu(&ns->siblings); - if (list_empty(&ns->head->list)) { - if (!nvme_mpath_queue_if_no_path(ns->head)) + if (nvme_delete_ns(ns)) { + + if (!nvme_mpath_head_queue_if_no_path(ns->head)) list_del_init(&ns->head->entry); last_path =3D true; } mutex_unlock(&ns->ctrl->subsys->lock); =20 /* guarantee not available in head->list */ - synchronize_srcu(&ns->head->srcu); + nvme_mpath_synchronize(head); =20 if (!nvme_ns_head_multipath(ns->head)) nvme_cdev_del(&ns->cdev, &ns->cdev_device); diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index 07509a03d2ef4..3e0ea40494da6 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -727,95 +727,6 @@ int nvme_mpath_chr_uring_cmd(struct mpath_device *mpat= h_device, issue_flags); } =20 -static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns, unsigned int cmd, - void __user *argp, struct nvme_ns_head *head, int srcu_idx, - bool open_for_write) - __releases(&head->srcu) -{ - struct nvme_ctrl *ctrl =3D ns->ctrl; - int ret; - - nvme_get_ctrl(ns->ctrl); - srcu_read_unlock(&head->srcu, srcu_idx); - ret =3D nvme_ctrl_ioctl(ns->ctrl, cmd, argp, open_for_write); - - nvme_put_ctrl(ctrl); - return ret; -} - -int nvme_ns_head_ioctl(struct block_device *bdev, blk_mode_t mode, - unsigned int cmd, unsigned long arg) -{ - struct nvme_ns_head *head =3D bdev->bd_disk->private_data; - bool open_for_write =3D mode & BLK_OPEN_WRITE; - void __user *argp =3D (void __user *)arg; - struct nvme_ns *ns; - int srcu_idx, ret =3D -EWOULDBLOCK; - unsigned int flags =3D 0; - - if (bdev_is_partition(bdev)) - flags |=3D NVME_IOCTL_PARTITION; - - srcu_idx =3D srcu_read_lock(&head->srcu); - ns =3D nvme_find_path(head); - if (!ns) - goto out_unlock; - - /* - * Handle ioctls that apply to the controller instead of the namespace - * separately and drop the ns SRCU reference early. This avoids a - * deadlock when deleting namespaces using the passthrough interface. - */ - if (is_ctrl_ioctl(cmd)) - return nvme_ns_head_ctrl_ioctl(ns, cmd, argp, head, srcu_idx, - open_for_write); - - ret =3D nvme_ns_ioctl(ns, cmd, argp, flags, open_for_write); -out_unlock: - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} - -long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - bool open_for_write =3D file->f_mode & FMODE_WRITE; - struct cdev *cdev =3D file_inode(file)->i_cdev; - struct nvme_ns_head *head =3D - container_of(cdev, struct nvme_ns_head, cdev); - void __user *argp =3D (void __user *)arg; - struct nvme_ns *ns; - int srcu_idx, ret =3D -EWOULDBLOCK; - - srcu_idx =3D srcu_read_lock(&head->srcu); - ns =3D nvme_find_path(head); - if (!ns) - goto out_unlock; - - if (is_ctrl_ioctl(cmd)) - return nvme_ns_head_ctrl_ioctl(ns, cmd, argp, head, srcu_idx, - open_for_write); - - ret =3D nvme_ns_ioctl(ns, cmd, argp, 0, open_for_write); -out_unlock: - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} - -int nvme_ns_head_chr_uring_cmd(struct io_uring_cmd *ioucmd, - unsigned int issue_flags) -{ - struct cdev *cdev =3D file_inode(ioucmd->file)->i_cdev; - struct nvme_ns_head *head =3D container_of(cdev, struct nvme_ns_head, cde= v); - int srcu_idx =3D srcu_read_lock(&head->srcu); - struct nvme_ns *ns =3D nvme_find_path(head); - int ret =3D -EINVAL; - - if (ns) - ret =3D nvme_ns_uring_cmd(ns, ioucmd, issue_flags); - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} #endif /* CONFIG_NVME_MULTIPATH */ =20 int nvme_dev_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_fla= gs) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 62e13a484ff5e..96a3d39746867 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -65,33 +65,17 @@ module_param_cb(multipath_always_on, &multipath_always_= on_ops, MODULE_PARM_DESC(multipath_always_on, "create multipath node always except for private namespace with non-uniqu= e nsid; note that this also implicitly enables native multipath support"); =20 -static const char *nvme_iopolicy_names[] =3D { - [NVME_IOPOLICY_NUMA] =3D "numa", - [NVME_IOPOLICY_RR] =3D "round-robin", - [NVME_IOPOLICY_QD] =3D "queue-depth", -}; =20 -static int iopolicy =3D NVME_IOPOLICY_NUMA; +static int iopolicy =3D MPATH_IOPOLICY_NUMA; =20 static int nvme_set_iopolicy(const char *val, const struct kernel_param *k= p) { - if (!val) - return -EINVAL; - if (!strncmp(val, "numa", 4)) - iopolicy =3D NVME_IOPOLICY_NUMA; - else if (!strncmp(val, "round-robin", 11)) - iopolicy =3D NVME_IOPOLICY_RR; - else if (!strncmp(val, "queue-depth", 11)) - iopolicy =3D NVME_IOPOLICY_QD; - else - return -EINVAL; - - return 0; + return mpath_set_iopolicy(val, &iopolicy); } =20 static int nvme_get_iopolicy(char *buf, const struct kernel_param *kp) { - return sprintf(buf, "%s\n", nvme_iopolicy_names[iopolicy]); + return mpath_get_iopolicy(buf, iopolicy); } =20 module_param_call(iopolicy, nvme_set_iopolicy, nvme_get_iopolicy, @@ -101,7 +85,7 @@ MODULE_PARM_DESC(iopolicy, =20 void nvme_mpath_default_iopolicy(struct nvme_subsystem *subsys) { - subsys->iopolicy =3D iopolicy; + subsys->mpath_iopolicy.iopolicy =3D iopolicy; } =20 void nvme_mpath_unfreeze(struct nvme_subsystem *subsys) @@ -110,8 +94,9 @@ void nvme_mpath_unfreeze(struct nvme_subsystem *subsys) =20 lockdep_assert_held(&subsys->lock); list_for_each_entry(h, &subsys->nsheads, entry) - if (h->disk) - blk_mq_unfreeze_queue_nomemrestore(h->disk->queue); + if (h->mpath_head->disk) + blk_mq_unfreeze_queue_nomemrestore( + h->mpath_head->disk->queue); } =20 void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys) @@ -120,8 +105,8 @@ void nvme_mpath_wait_freeze(struct nvme_subsystem *subs= ys) =20 lockdep_assert_held(&subsys->lock); list_for_each_entry(h, &subsys->nsheads, entry) - if (h->disk) - blk_mq_freeze_queue_wait(h->disk->queue); + if (h->mpath_head->disk) + blk_mq_freeze_queue_wait(h->mpath_head->disk->queue); } =20 void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) @@ -130,13 +115,14 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *s= ubsys) =20 lockdep_assert_held(&subsys->lock); list_for_each_entry(h, &subsys->nsheads, entry) - if (h->disk) - blk_freeze_queue_start(h->disk->queue); + if (h->mpath_head->disk) + blk_freeze_queue_start(h->mpath_head->disk->queue); } =20 void nvme_failover_req(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; + struct mpath_head *mpath_head =3D ns->head->mpath_head; u16 status =3D nvme_req(req)->status & NVME_SCT_SC_MASK; unsigned long flags; struct bio *bio; @@ -153,23 +139,24 @@ void nvme_failover_req(struct request *req) queue_work(nvme_wq, &ns->ctrl->ana_work); } =20 - spin_lock_irqsave(&ns->head->requeue_lock, flags); + + spin_lock_irqsave(&mpath_head->requeue_lock, flags); for (bio =3D req->bio; bio; bio =3D bio->bi_next) - bio_set_dev(bio, ns->head->disk->part0); - blk_steal_bios(&ns->head->requeue_list, req); - spin_unlock_irqrestore(&ns->head->requeue_lock, flags); + bio_set_dev(bio, mpath_head->disk->part0); + blk_steal_bios(&mpath_head->requeue_list, req); + spin_unlock_irqrestore(&mpath_head->requeue_lock, flags); =20 nvme_req(req)->status =3D 0; nvme_end_req(req); - kblockd_schedule_work(&ns->head->requeue_work); + mpath_schedule_requeue_work(mpath_head); } =20 void nvme_mpath_start_request(struct request *rq) { struct nvme_ns *ns =3D rq->q->queuedata; - struct gendisk *disk =3D ns->head->disk; + struct gendisk *disk =3D ns->head->mpath_head->disk; =20 - if ((READ_ONCE(ns->head->subsys->iopolicy) =3D=3D NVME_IOPOLICY_QD) && + if (mpath_qd_iopolicy(&ns->head->subsys->mpath_iopolicy) && !(nvme_req(rq)->flags & NVME_MPATH_CNT_ACTIVE)) { atomic_inc(&ns->ctrl->nr_active); nvme_req(rq)->flags |=3D NVME_MPATH_CNT_ACTIVE; @@ -194,7 +181,7 @@ void nvme_mpath_end_request(struct request *rq) =20 if (!(nvme_req(rq)->flags & NVME_MPATH_IO_STATS)) return; - bdev_end_io_acct(ns->head->disk->part0, req_op(rq), + bdev_end_io_acct(ns->head->mpath_head->disk->part0, req_op(rq), blk_rq_bytes(rq) >> SECTOR_SHIFT, nvme_req(rq)->start_time); } @@ -207,11 +194,11 @@ void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl) srcu_idx =3D srcu_read_lock(&ctrl->srcu); list_for_each_entry_srcu(ns, &ctrl->namespaces, list, srcu_read_lock_held(&ctrl->srcu)) { - if (!ns->head->disk) + if (!ns->head->mpath_head->disk) continue; - kblockd_schedule_work(&ns->head->requeue_work); + mpath_schedule_requeue_work(ns->head->mpath_head); if (nvme_ctrl_state(ns->ctrl) =3D=3D NVME_CTRL_LIVE) - disk_uevent(ns->head->disk, KOBJ_CHANGE); + disk_uevent(ns->head->mpath_head->disk, KOBJ_CHANGE); } srcu_read_unlock(&ctrl->srcu, srcu_idx); } @@ -225,21 +212,6 @@ static const char *nvme_ana_state_names[] =3D { [NVME_ANA_CHANGE] =3D "change", }; =20 -bool nvme_mpath_clear_current_path(struct nvme_ns *ns) -{ - struct nvme_ns_head *head =3D ns->head; - bool changed =3D false; - int node; - - for_each_node(node) { - if (ns =3D=3D rcu_access_pointer(head->current_path[node])) { - rcu_assign_pointer(head->current_path[node], NULL); - changed =3D true; - } - } - return changed; -} - void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl) { struct nvme_ns *ns; @@ -249,29 +221,19 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ct= rl) list_for_each_entry_srcu(ns, &ctrl->namespaces, list, srcu_read_lock_held(&ctrl->srcu)) { nvme_mpath_clear_current_path(ns); - kblockd_schedule_work(&ns->head->requeue_work); + mpath_schedule_requeue_work(ns->head->mpath_head); } srcu_read_unlock(&ctrl->srcu, srcu_idx); } =20 -void nvme_mpath_revalidate_paths(struct nvme_ns_head *head) +static void nvme_mpath_revalidate_paths_cb(struct mpath_device *mpath_devi= ce) { - sector_t capacity =3D get_capacity(head->disk); - struct nvme_ns *ns; - int node; - int srcu_idx; - - srcu_idx =3D srcu_read_lock(&head->srcu); - list_for_each_entry_srcu(ns, &head->list, siblings, - srcu_read_lock_held(&head->srcu)) { - if (capacity !=3D get_capacity(ns->disk)) - clear_bit(NVME_NS_READY, &ns->flags); - } - srcu_read_unlock(&head->srcu, srcu_idx); + clear_bit(NVME_NS_READY, &nvme_mpath_to_ns(mpath_device)->flags); +} =20 - for_each_node(node) - rcu_assign_pointer(head->current_path[node], NULL); - kblockd_schedule_work(&head->requeue_work); +void nvme_mpath_revalidate_paths(struct nvme_ns_head *head) +{ + mpath_revalidate_paths(head->mpath_head, nvme_mpath_revalidate_paths_cb); } =20 static bool nvme_path_is_disabled(struct nvme_ns *ns) @@ -296,142 +258,6 @@ static bool nvme_mpath_is_disabled(struct mpath_devic= e *mpath_device) return nvme_path_is_disabled(nvme_mpath_to_ns(mpath_device)); } =20 -static struct nvme_ns *__nvme_find_path(struct nvme_ns_head *head, int nod= e) -{ - int found_distance =3D INT_MAX, fallback_distance =3D INT_MAX, distance; - struct nvme_ns *found =3D NULL, *fallback =3D NULL, *ns; - - list_for_each_entry_srcu(ns, &head->list, siblings, - srcu_read_lock_held(&head->srcu)) { - if (nvme_path_is_disabled(ns)) - continue; - - if (ns->ctrl->numa_node !=3D NUMA_NO_NODE && - READ_ONCE(head->subsys->iopolicy) =3D=3D NVME_IOPOLICY_NUMA) - distance =3D node_distance(node, ns->ctrl->numa_node); - else - distance =3D LOCAL_DISTANCE; - - switch (ns->ana_state) { - case NVME_ANA_OPTIMIZED: - if (distance < found_distance) { - found_distance =3D distance; - found =3D ns; - } - break; - case NVME_ANA_NONOPTIMIZED: - if (distance < fallback_distance) { - fallback_distance =3D distance; - fallback =3D ns; - } - break; - default: - break; - } - } - - if (!found) - found =3D fallback; - if (found) - rcu_assign_pointer(head->current_path[node], found); - return found; -} - -static struct nvme_ns *nvme_next_ns(struct nvme_ns_head *head, - struct nvme_ns *ns) -{ - ns =3D list_next_or_null_rcu(&head->list, &ns->siblings, struct nvme_ns, - siblings); - if (ns) - return ns; - return list_first_or_null_rcu(&head->list, struct nvme_ns, siblings); -} - -static struct nvme_ns *nvme_round_robin_path(struct nvme_ns_head *head) -{ - struct nvme_ns *ns, *found =3D NULL; - int node =3D numa_node_id(); - struct nvme_ns *old =3D srcu_dereference(head->current_path[node], - &head->srcu); - - if (unlikely(!old)) - return __nvme_find_path(head, node); - - if (list_is_singular(&head->list)) { - if (nvme_path_is_disabled(old)) - return NULL; - return old; - } - - for (ns =3D nvme_next_ns(head, old); - ns && ns !=3D old; - ns =3D nvme_next_ns(head, ns)) { - if (nvme_path_is_disabled(ns)) - continue; - - if (ns->ana_state =3D=3D NVME_ANA_OPTIMIZED) { - found =3D ns; - goto out; - } - if (ns->ana_state =3D=3D NVME_ANA_NONOPTIMIZED) - found =3D ns; - } - - /* - * 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. - */ - if (!nvme_path_is_disabled(old) && - (old->ana_state =3D=3D NVME_ANA_OPTIMIZED || - (!found && old->ana_state =3D=3D NVME_ANA_NONOPTIMIZED))) - return old; - - if (!found) - return NULL; -out: - rcu_assign_pointer(head->current_path[node], found); - return found; -} - -static struct nvme_ns *nvme_queue_depth_path(struct nvme_ns_head *head) -{ - struct nvme_ns *best_opt =3D NULL, *best_nonopt =3D NULL, *ns; - unsigned int min_depth_opt =3D UINT_MAX, min_depth_nonopt =3D UINT_MAX; - unsigned int depth; - - list_for_each_entry_srcu(ns, &head->list, siblings, - srcu_read_lock_held(&head->srcu)) { - if (nvme_path_is_disabled(ns)) - continue; - - depth =3D atomic_read(&ns->ctrl->nr_active); - - switch (ns->ana_state) { - case NVME_ANA_OPTIMIZED: - if (depth < min_depth_opt) { - min_depth_opt =3D depth; - best_opt =3D ns; - } - break; - case NVME_ANA_NONOPTIMIZED: - if (depth < min_depth_nonopt) { - min_depth_nonopt =3D depth; - best_nonopt =3D ns; - } - break; - default: - break; - } - - if (min_depth_opt =3D=3D 0) - return best_opt; - } - - return best_opt ? best_opt : best_nonopt; -} - static inline bool nvme_path_is_optimized(struct nvme_ns *ns) { return nvme_ctrl_state(ns->ctrl) =3D=3D NVME_CTRL_LIVE && @@ -443,64 +269,6 @@ static bool nvme_mpath_is_optimized(struct mpath_devic= e *mpath_device) return nvme_path_is_optimized(nvme_mpath_to_ns(mpath_device)); } =20 -static struct nvme_ns *nvme_numa_path(struct nvme_ns_head *head) -{ - int node =3D numa_node_id(); - struct nvme_ns *ns; - - ns =3D srcu_dereference(head->current_path[node], &head->srcu); - if (unlikely(!ns)) - return __nvme_find_path(head, node); - if (unlikely(!nvme_path_is_optimized(ns))) - return __nvme_find_path(head, node); - return ns; -} - -inline struct nvme_ns *nvme_find_path(struct nvme_ns_head *head) -{ - switch (READ_ONCE(head->subsys->iopolicy)) { - case NVME_IOPOLICY_QD: - return nvme_queue_depth_path(head); - case NVME_IOPOLICY_RR: - return nvme_round_robin_path(head); - default: - return nvme_numa_path(head); - } -} - -static bool nvme_available_path(struct nvme_ns_head *head) -{ - struct nvme_ns *ns; - - if (!test_bit(NVME_NSHEAD_DISK_LIVE, &head->flags)) - return false; - - list_for_each_entry_srcu(ns, &head->list, siblings, - srcu_read_lock_held(&head->srcu)) { - if (test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ns->ctrl->flags)) - continue; - switch (nvme_ctrl_state(ns->ctrl)) { - case NVME_CTRL_LIVE: - case NVME_CTRL_RESETTING: - case NVME_CTRL_CONNECTING: - return true; - default: - break; - } - } - - /* - * If "head->delayed_removal_secs" is configured (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 NVME_NSHEAD_QUEUE_IF_NO_PATH. When delayed_removal_secs is - * non-zero, this flag is set to true. When zero, the flag is cleared. - */ - return nvme_mpath_queue_if_no_path(head); -} - static bool nvme_mpath_available_path(struct mpath_device *mpath_device) { struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); @@ -520,104 +288,6 @@ static bool nvme_mpath_available_path(struct mpath_de= vice *mpath_device) return false; } =20 -static void nvme_ns_head_submit_bio(struct bio *bio) -{ - struct nvme_ns_head *head =3D bio->bi_bdev->bd_disk->private_data; - struct device *dev =3D disk_to_dev(head->disk); - struct nvme_ns *ns; - int srcu_idx; - - /* - * The namespace might be going away and the bio might be moved to a - * different queue via blk_steal_bios(), 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(&head->srcu); - ns =3D nvme_find_path(head); - if (likely(ns)) { - bio_set_dev(bio, ns->disk->part0); - bio->bi_opf |=3D REQ_NVME_MPATH; - trace_block_bio_remap(bio, disk_devt(ns->head->disk), - bio->bi_iter.bi_sector); - submit_bio_noacct(bio); - } else if (nvme_available_path(head)) { - dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n"); - - spin_lock_irq(&head->requeue_lock); - bio_list_add(&head->requeue_list, bio); - spin_unlock_irq(&head->requeue_lock); - } else { - dev_warn_ratelimited(dev, "no available path - failing I/O\n"); - - bio_io_error(bio); - } - - srcu_read_unlock(&head->srcu, srcu_idx); -} - -static int nvme_ns_head_open(struct gendisk *disk, blk_mode_t mode) -{ - if (!nvme_tryget_ns_head(disk->private_data)) - return -ENXIO; - return 0; -} - -static void nvme_ns_head_release(struct gendisk *disk) -{ - nvme_put_ns_head(disk->private_data); -} - -static int nvme_ns_head_get_unique_id(struct gendisk *disk, u8 id[16], - enum blk_unique_id type) -{ - struct nvme_ns_head *head =3D disk->private_data; - struct nvme_ns *ns; - int srcu_idx, ret =3D -EWOULDBLOCK; - - srcu_idx =3D srcu_read_lock(&head->srcu); - ns =3D nvme_find_path(head); - if (ns) - ret =3D nvme_ns_get_unique_id(ns, id, type); - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} - -#ifdef CONFIG_BLK_DEV_ZONED -static int nvme_ns_head_report_zones(struct gendisk *disk, sector_t sector, - unsigned int nr_zones, struct blk_report_zones_args *args) -{ - struct nvme_ns_head *head =3D disk->private_data; - struct nvme_ns *ns; - int srcu_idx, ret =3D -EWOULDBLOCK; - - srcu_idx =3D srcu_read_lock(&head->srcu); - ns =3D nvme_find_path(head); - if (ns) - ret =3D nvme_ns_report_zones(ns, sector, nr_zones, args); - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} -#else -#define nvme_ns_head_report_zones NULL -#endif /* CONFIG_BLK_DEV_ZONED */ - -const struct block_device_operations nvme_ns_head_ops =3D { - .owner =3D THIS_MODULE, - .submit_bio =3D nvme_ns_head_submit_bio, - .open =3D nvme_ns_head_open, - .release =3D nvme_ns_head_release, - .ioctl =3D nvme_ns_head_ioctl, - .compat_ioctl =3D blkdev_compat_ptr_ioctl, - .getgeo =3D nvme_getgeo, - .get_unique_id =3D nvme_ns_head_get_unique_id, - .report_zones =3D nvme_ns_head_report_zones, - .pr_ops =3D &nvme_pr_ops, -}; - static int nvme_mpath_add_cdev(struct mpath_head *mpath_head) { struct nvme_ns_head *head =3D mpath_head->drvdata; @@ -638,211 +308,25 @@ static void nvme_mpath_del_cdev(struct mpath_head *m= path_head) nvme_cdev_del(&mpath_head->cdev, &mpath_head->cdev_device); } =20 -static inline struct nvme_ns_head *cdev_to_ns_head(struct cdev *cdev) -{ - return container_of(cdev, struct nvme_ns_head, cdev); -} - -static int nvme_ns_head_chr_open(struct inode *inode, struct file *file) -{ - if (!nvme_tryget_ns_head(cdev_to_ns_head(inode->i_cdev))) - return -ENXIO; - return 0; -} - -static int nvme_ns_head_chr_release(struct inode *inode, struct file *file) -{ - nvme_put_ns_head(cdev_to_ns_head(inode->i_cdev)); - return 0; -} - -static const struct file_operations nvme_ns_head_chr_fops =3D { - .owner =3D THIS_MODULE, - .open =3D nvme_ns_head_chr_open, - .release =3D nvme_ns_head_chr_release, - .unlocked_ioctl =3D nvme_ns_head_chr_ioctl, - .compat_ioctl =3D compat_ptr_ioctl, - .uring_cmd =3D nvme_ns_head_chr_uring_cmd, - .uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, -}; - -static int nvme_add_ns_head_cdev(struct nvme_ns_head *head) -{ - int ret; - - head->cdev_device.parent =3D &head->subsys->dev; - ret =3D dev_set_name(&head->cdev_device, "ng%dn%d", - head->subsys->instance, head->instance); - if (ret) - return ret; - ret =3D nvme_cdev_add(&head->cdev, &head->cdev_device, - &nvme_ns_head_chr_fops, THIS_MODULE); - return ret; -} - -static void nvme_partition_scan_work(struct work_struct *work) -{ - struct nvme_ns_head *head =3D - container_of(work, struct nvme_ns_head, partition_scan_work); - - if (WARN_ON_ONCE(!test_and_clear_bit(GD_SUPPRESS_PART_SCAN, - &head->disk->state))) - return; - - mutex_lock(&head->disk->open_mutex); - bdev_disk_changed(head->disk, false); - mutex_unlock(&head->disk->open_mutex); -} - -static void nvme_requeue_work(struct work_struct *work) -{ - struct nvme_ns_head *head =3D - container_of(work, struct nvme_ns_head, requeue_work); - struct bio *bio, *next; - - spin_lock_irq(&head->requeue_lock); - next =3D bio_list_get(&head->requeue_list); - spin_unlock_irq(&head->requeue_lock); - - while ((bio =3D next) !=3D NULL) { - next =3D bio->bi_next; - bio->bi_next =3D NULL; - - submit_bio_noacct(bio); - } -} - static void nvme_remove_head(struct nvme_ns_head *head) { - if (test_and_clear_bit(NVME_NSHEAD_DISK_LIVE, &head->flags)) { - /* - * requeue I/O after NVME_NSHEAD_DISK_LIVE has been cleared - * to allow multipath to fail all I/O. - */ - kblockd_schedule_work(&head->requeue_work); - - nvme_cdev_del(&head->cdev, &head->cdev_device); - synchronize_srcu(&head->srcu); - del_gendisk(head->disk); - } + mpath_remove_disk(head->mpath_head); nvme_put_ns_head(head); } =20 -static void nvme_remove_head_work(struct work_struct *work) +static void nvme_mpath_remove_head(struct mpath_head *mpath_head) { - struct nvme_ns_head *head =3D container_of(to_delayed_work(work), - struct nvme_ns_head, remove_work); + struct nvme_ns_head *head =3D mpath_head->drvdata; bool remove =3D false; =20 mutex_lock(&head->subsys->lock); - if (list_empty(&head->list)) { + if (mpath_head_devices_empty(mpath_head)) { list_del_init(&head->entry); remove =3D true; } mutex_unlock(&head->subsys->lock); if (remove) nvme_remove_head(head); - - module_put(THIS_MODULE); -} - -int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *hea= d) -{ - struct queue_limits lim; - - mutex_init(&head->lock); - bio_list_init(&head->requeue_list); - spin_lock_init(&head->requeue_lock); - INIT_WORK(&head->requeue_work, nvme_requeue_work); - INIT_WORK(&head->partition_scan_work, nvme_partition_scan_work); - INIT_DELAYED_WORK(&head->remove_work, nvme_remove_head_work); - head->delayed_removal_secs =3D 0; - - /* - * If "multipath_always_on" is enabled, a multipath node is added - * regardless of whether the disk is single/multi ported, and whether - * the namespace is shared or private. If "multipath_always_on" is not - * enabled, a multipath node is added only if the subsystem supports - * multiple controllers and the "multipath" option is configured. In - * either case, for private namespaces, we ensure that the NSID is - * unique. - */ - if (!multipath_always_on) { - if (!(ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) || - !multipath) - return 0; - } - - if (!nvme_is_unique_nsid(ctrl, head)) - return 0; - - 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; - if (head->ids.csi =3D=3D NVME_CSI_ZNS) - lim.features |=3D BLK_FEAT_ZONED; - - head->disk =3D blk_alloc_disk(&lim, ctrl->numa_node); - if (IS_ERR(head->disk)) - return PTR_ERR(head->disk); - head->disk->fops =3D &nvme_ns_head_ops; - head->disk->private_data =3D head; - - /* - * We need to suppress the partition scan from occuring within the - * controller's scan_work context. If a path error occurs here, the IO - * will wait until a path becomes available or all paths are torn down, - * but that action also occurs within scan_work, so it would deadlock. - * Defer the partition scan to a different context that does not block - * scan_work. - */ - set_bit(GD_SUPPRESS_PART_SCAN, &head->disk->state); - sprintf(head->disk->disk_name, "nvme%dn%d", - ctrl->subsys->instance, head->instance); - nvme_tryget_ns_head(head); - return 0; -} - -static void nvme_mpath_set_live(struct nvme_ns *ns) -{ - struct nvme_ns_head *head =3D ns->head; - int rc; - - if (!head->disk) - return; - - /* - * test_and_set_bit() is used because it is protecting against two nvme - * paths simultaneously calling device_add_disk() on the same namespace - * head. - */ - if (!test_and_set_bit(NVME_NSHEAD_DISK_LIVE, &head->flags)) { - rc =3D device_add_disk(&head->subsys->dev, head->disk, - nvme_ns_attr_groups); - if (rc) { - clear_bit(NVME_NSHEAD_DISK_LIVE, &head->flags); - return; - } - nvme_add_ns_head_cdev(head); - queue_work(nvme_wq, &head->partition_scan_work); - } - - nvme_mpath_add_sysfs_link(ns->head); - - mutex_lock(&head->lock); - if (nvme_path_is_optimized(ns)) { - int node, srcu_idx; - - srcu_idx =3D srcu_read_lock(&head->srcu); - for_each_online_node(node) - __nvme_find_path(head, node); - srcu_read_unlock(&head->srcu, srcu_idx); - } - mutex_unlock(&head->lock); - - synchronize_srcu(&head->srcu); - kblockd_schedule_work(&head->requeue_work); } =20 static int nvme_parse_ana_log(struct nvme_ctrl *ctrl, void *data, @@ -894,14 +378,29 @@ static inline bool nvme_state_is_live(enum nvme_ana_s= tate state) return state =3D=3D NVME_ANA_OPTIMIZED || state =3D=3D NVME_ANA_NONOPTIMI= ZED; } =20 +static void nvme_mpath_update_ana_state(struct nvme_ns *ns, + enum nvme_ana_state ana_state) +{ + ns->ana_state =3D ana_state; + if (ana_state =3D=3D NVME_ANA_OPTIMIZED) + ns->mpath_device.access_state =3D MPATH_STATE_OPTIMIZED; + else if (ana_state =3D=3D NVME_ANA_NONOPTIMIZED) + ns->mpath_device.access_state =3D MPATH_STATE_NONOPTIMIZED; + else + ns->mpath_device.access_state =3D MPATH_STATE_OTHER; +} + static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc, struct nvme_ns *ns) { + struct mpath_head *mpath_head =3D ns->head->mpath_head; + ns->ana_grpid =3D le32_to_cpu(desc->grpid); - ns->ana_state =3D desc->state; + nvme_mpath_update_ana_state(ns, desc->state); clear_bit(NVME_NS_ANA_PENDING, &ns->flags); + /* - * nvme_mpath_set_live() will trigger I/O to the multipath path device + * mpath_device_set_live() will trigger I/O to the multipath path device * and in turn to this path device. However we cannot accept this I/O * if the controller is not live. This may deadlock if called from * nvme_mpath_init_identify() and the ctrl will never complete @@ -911,16 +410,16 @@ static void nvme_update_ns_ana_state(struct nvme_ana_= group_desc *desc, */ if (nvme_state_is_live(ns->ana_state) && nvme_ctrl_state(ns->ctrl) =3D=3D NVME_CTRL_LIVE) - nvme_mpath_set_live(ns); + mpath_device_set_live(&ns->mpath_device); else { /* * Add sysfs link from multipath head gendisk node to path * device gendisk node. * If path's ana state is live (i.e. state is either optimized * or non-optimized) while we alloc the ns then sysfs link would - * be created from nvme_mpath_set_live(). In that case we would + * be created from mpath_device_set_live(). In that case we would * not fallthrough this code path. However for the path's ana - * state other than live, we call nvme_mpath_set_live() only + * state other than live, we call mpath_device_set_live() only * after ana state transitioned to the live state. But we still * want to create the sysfs link from head node to a path device * irrespctive of the path's ana state. @@ -928,8 +427,8 @@ static void nvme_update_ns_ana_state(struct nvme_ana_gr= oup_desc *desc, * is not live but still create the sysfs link to this path from * head node if head node of the path has already come alive. */ - if (test_bit(NVME_NSHEAD_DISK_LIVE, &ns->head->flags)) - nvme_mpath_add_sysfs_link(ns->head); + if (test_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) + mpath_add_sysfs_link(mpath_head); } } =20 @@ -1056,48 +555,23 @@ static ssize_t nvme_subsys_iopolicy_show(struct devi= ce *dev, struct nvme_subsystem *subsys =3D container_of(dev, struct nvme_subsystem, dev); =20 - return sysfs_emit(buf, "%s\n", - nvme_iopolicy_names[READ_ONCE(subsys->iopolicy)]); + return mpath_iopolicy_show(&subsys->mpath_iopolicy, buf); } =20 -static void nvme_subsys_iopolicy_update(struct nvme_subsystem *subsys, - int iopolicy) +static ssize_t nvme_subsys_iopolicy_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) { + struct nvme_subsystem *subsys =3D + container_of(dev, struct nvme_subsystem, dev); struct nvme_ctrl *ctrl; - int old_iopolicy =3D READ_ONCE(subsys->iopolicy); - - if (old_iopolicy =3D=3D iopolicy) - return; =20 - WRITE_ONCE(subsys->iopolicy, iopolicy); - - /* iopolicy changes clear the mpath by design */ + if (!mpath_iopolicy_store(&subsys->mpath_iopolicy, buf, count)) + return -EINVAL; mutex_lock(&nvme_subsystems_lock); list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) nvme_mpath_clear_ctrl_paths(ctrl); mutex_unlock(&nvme_subsystems_lock); - - pr_notice("subsysnqn %s iopolicy changed from %s to %s\n", - subsys->subnqn, - nvme_iopolicy_names[old_iopolicy], - nvme_iopolicy_names[iopolicy]); -} - -static ssize_t nvme_subsys_iopolicy_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - struct nvme_subsystem *subsys =3D - container_of(dev, struct nvme_subsystem, dev); - int i; - - for (i =3D 0; i < ARRAY_SIZE(nvme_iopolicy_names); i++) { - if (sysfs_streq(buf, nvme_iopolicy_names[i])) { - nvme_subsys_iopolicy_update(subsys, i); - return count; - } - } - - return -EINVAL; + return count; } SUBSYS_ATTR_RW(iopolicy, S_IRUGO | S_IWUSR, nvme_subsys_iopolicy_show, nvme_subsys_iopolicy_store); @@ -1123,7 +597,7 @@ static ssize_t queue_depth_show(struct device *dev, { struct nvme_ns *ns =3D nvme_get_ns_from_dev(dev); =20 - if (ns->head->subsys->iopolicy !=3D NVME_IOPOLICY_QD) + if (!mpath_qd_iopolicy(&ns->head->subsys->mpath_iopolicy)) return 0; =20 return sysfs_emit(buf, "%d\n", atomic_read(&ns->ctrl->nr_active)); @@ -1133,69 +607,25 @@ DEVICE_ATTR_RO(queue_depth); static ssize_t numa_nodes_show(struct device *dev, struct device_attribute= *attr, char *buf) { - int node, srcu_idx; - nodemask_t numa_nodes; - struct nvme_ns *current_ns; struct nvme_ns *ns =3D nvme_get_ns_from_dev(dev); - struct nvme_ns_head *head =3D ns->head; - - if (head->subsys->iopolicy !=3D NVME_IOPOLICY_NUMA) - return 0; =20 - nodes_clear(numa_nodes); - - srcu_idx =3D srcu_read_lock(&head->srcu); - for_each_node(node) { - current_ns =3D srcu_dereference(head->current_path[node], - &head->srcu); - if (ns =3D=3D current_ns) - node_set(node, numa_nodes); - } - srcu_read_unlock(&head->srcu, srcu_idx); - - return sysfs_emit(buf, "%*pbl\n", nodemask_pr_args(&numa_nodes)); + return mpath_numa_nodes_show(&ns->mpath_device, + &ns->head->subsys->mpath_iopolicy, buf); } DEVICE_ATTR_RO(numa_nodes); =20 -static ssize_t delayed_removal_secs_show(struct device *dev, +static ssize_t delayed_removal_secs_show(struct device *bd_device, struct device_attribute *attr, char *buf) { - struct gendisk *disk =3D dev_to_disk(dev); - struct nvme_ns_head *head =3D disk->private_data; - int ret; - - mutex_lock(&head->subsys->lock); - ret =3D sysfs_emit(buf, "%u\n", head->delayed_removal_secs); - mutex_unlock(&head->subsys->lock); - return ret; + return mpath_delayed_removal_secs_show( + mpath_bd_device_to_head(bd_device), buf); } =20 -static ssize_t delayed_removal_secs_store(struct device *dev, +static ssize_t delayed_removal_secs_store(struct device *bd_device, struct device_attribute *attr, const char *buf, size_t count) { - struct gendisk *disk =3D dev_to_disk(dev); - struct nvme_ns_head *head =3D disk->private_data; - unsigned int sec; - int ret; - - ret =3D kstrtouint(buf, 0, &sec); - if (ret < 0) - return ret; - - mutex_lock(&head->subsys->lock); - head->delayed_removal_secs =3D sec; - if (sec) - set_bit(NVME_NSHEAD_QUEUE_IF_NO_PATH, &head->flags); - else - clear_bit(NVME_NSHEAD_QUEUE_IF_NO_PATH, &head->flags); - mutex_unlock(&head->subsys->lock); - /* - * Ensure that update to NVME_NSHEAD_QUEUE_IF_NO_PATH is seen - * by its reader. - */ - synchronize_srcu(&head->srcu); - - return count; + return mpath_delayed_removal_secs_store( + mpath_bd_device_to_head(bd_device), buf, count); } =20 DEVICE_ATTR_RW(delayed_removal_secs); @@ -1212,85 +642,6 @@ static int nvme_lookup_ana_group_desc(struct nvme_ctr= l *ctrl, return -ENXIO; /* just break out of the loop */ } =20 -void nvme_mpath_add_sysfs_link(struct nvme_ns_head *head) -{ - struct device *target; - int rc, srcu_idx; - struct nvme_ns *ns; - struct kobject *kobj; - - /* - * Ensure head disk node is already added otherwise we may get invalid - * kobj for head disk node - */ - if (!test_bit(GD_ADDED, &head->disk->state)) - return; - - kobj =3D &disk_to_dev(head->disk)->kobj; - - /* - * loop through each ns chained through the head->list and create the - * sysfs link from head node to the ns path node - */ - srcu_idx =3D srcu_read_lock(&head->srcu); - - list_for_each_entry_srcu(ns, &head->list, siblings, - srcu_read_lock_held(&head->srcu)) { - /* - * Ensure that ns path disk node is already added otherwise we - * may get invalid kobj name for target - */ - if (!test_bit(GD_ADDED, &ns->disk->state)) - continue; - - /* - * Avoid creating link if it already exists for the given path. - * When path ana state transitions from optimized to non- - * optimized or vice-versa, the nvme_mpath_set_live() is - * invoked which in truns call this function. Now if the sysfs - * link already exists for the given path and we attempt to re- - * create the link then sysfs code would warn about it loudly. - * So we evaluate NVME_NS_SYSFS_ATTR_LINK flag here to ensure - * that we're not creating duplicate link. - * The test_and_set_bit() is used because it is protecting - * against multiple nvme paths being simultaneously added. - */ - if (test_and_set_bit(NVME_NS_SYSFS_ATTR_LINK, &ns->flags)) - continue; - - target =3D disk_to_dev(ns->disk); - /* - * Create sysfs link from head gendisk kobject @kobj to the - * ns path gendisk kobject @target->kobj. - */ - rc =3D sysfs_add_link_to_group(kobj, nvme_ns_mpath_attr_group.name, - &target->kobj, dev_name(target)); - if (unlikely(rc)) { - dev_err(disk_to_dev(ns->head->disk), - "failed to create link to %s\n", - dev_name(target)); - clear_bit(NVME_NS_SYSFS_ATTR_LINK, &ns->flags); - } - } - - srcu_read_unlock(&head->srcu, srcu_idx); -} - -void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) -{ - struct device *target; - struct kobject *kobj; - - if (!test_bit(NVME_NS_SYSFS_ATTR_LINK, &ns->flags)) - return; - - target =3D disk_to_dev(ns->disk); - kobj =3D &disk_to_dev(ns->head->disk)->kobj; - sysfs_remove_link_from_group(kobj, nvme_ns_mpath_attr_group.name, - dev_name(target)); - clear_bit(NVME_NS_SYSFS_ATTR_LINK, &ns->flags); -} - void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 anagrpid) { if (nvme_ctrl_use_ana(ns->ctrl)) { @@ -1312,13 +663,13 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 = anagrpid) queue_work(nvme_wq, &ns->ctrl->ana_work); } } else { - ns->ana_state =3D NVME_ANA_OPTIMIZED; - nvme_mpath_set_live(ns); + nvme_mpath_update_ana_state(ns, NVME_ANA_OPTIMIZED); + mpath_device_set_live(&ns->mpath_device); } =20 #ifdef CONFIG_BLK_DEV_ZONED - if (blk_queue_is_zoned(ns->queue) && ns->head->disk) - ns->head->disk->nr_zones =3D ns->disk->nr_zones; + if (blk_queue_is_zoned(ns->queue) && ns->head->mpath_head) + ns->head->mpath_head->disk->nr_zones =3D ns->disk->nr_zones; #endif } =20 @@ -1326,7 +677,7 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head) { bool remove =3D false; =20 - if (!head->disk) + if (!head->mpath_head->disk) return; =20 mutex_lock(&head->subsys->lock); @@ -1339,17 +690,10 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *hea= d) * head->list here. If it is no longer empty then we skip enqueuing the * delayed head removal work. */ - if (!list_empty(&head->list)) + if (!mpath_head_devices_empty(head->mpath_head)) goto out; =20 - /* - * Ensure that no one could remove this module while the head - * remove work is pending. - */ - if (head->delayed_removal_secs && try_module_get(THIS_MODULE)) { - mod_delayed_work(nvme_wq, &head->remove_work, - head->delayed_removal_secs * HZ); - } else { + if (mpath_can_remove_head(head->mpath_head)) { list_del_init(&head->entry); remove =3D true; } @@ -1359,17 +703,6 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head) nvme_remove_head(head); } =20 -void nvme_mpath_put_disk(struct nvme_ns_head *head) -{ - if (!head->disk) - return; - /* make sure all pending bios are cleaned up */ - kblockd_schedule_work(&head->requeue_work); - flush_work(&head->requeue_work); - flush_work(&head->partition_scan_work); - put_disk(head->disk); -} - void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl) { mutex_init(&ctrl->ana_lock); @@ -1451,9 +784,9 @@ static int nvme_mpath_get_nr_active(struct mpath_devic= e *mpath_device) return atomic_read(&nvme_mpath_to_ns(mpath_device)->ctrl->nr_active); } =20 -__maybe_unused static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, + .remove_head =3D nvme_mpath_remove_head, .add_cdev =3D nvme_mpath_add_cdev, .del_cdev =3D nvme_mpath_del_cdev, .is_disabled =3D nvme_mpath_is_disabled, @@ -1466,3 +799,45 @@ static const struct mpath_head_template mpdt =3D { .get_iopolicy =3D nvme_mpath_get_iopolicy, .get_nr_active =3D nvme_mpath_get_nr_active, }; + +int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *hea= d) +{ + struct queue_limits lim; + int ret; + + head->mpath_head->mpdt =3D &mpdt; + + /* + * If "multipath_always_on" is enabled, a multipath node is added + * regardless of whether the disk is single/multi ported, and whether + * the namespace is shared or private. If "multipath_always_on" is not + * enabled, a multipath node is added only if the subsystem supports + * multiple controllers and the "multipath" option is configured. In + * either case, for private namespaces, we ensure that the NSID is + * unique. + */ + if (!multipath_always_on) { + if (!(ctrl->subsys->cmic & NVME_CTRL_CMIC_MULTI_CTRL) || + !multipath) + return 0; + } + + if (!nvme_is_unique_nsid(ctrl, head)) + return 0; + + 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; + if (head->ids.csi =3D=3D NVME_CSI_ZNS) + lim.features |=3D BLK_FEAT_ZONED; + + ret =3D mpath_alloc_head_disk(head->mpath_head, &lim, ctrl->numa_node); + if (ret) + return ret; + + sprintf(head->mpath_head->disk->disk_name, "nvme%dn%d", + ctrl->subsys->instance, head->instance); + nvme_tryget_ns_head(head); + return 0; +} diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index f96ad4f890797..b687cbd906729 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -252,11 +252,6 @@ struct nvme_request { struct nvme_ctrl *ctrl; }; =20 -/* - * Mark a bio as coming in through the mpath node. - */ -#define REQ_NVME_MPATH REQ_DRV - enum { NVME_REQ_CANCELLED =3D (1 << 0), NVME_REQ_USERCMD =3D (1 << 1), @@ -474,11 +469,6 @@ static inline enum nvme_ctrl_state nvme_ctrl_state(str= uct nvme_ctrl *ctrl) return READ_ONCE(ctrl->state); } =20 -enum nvme_iopolicy { - NVME_IOPOLICY_NUMA, - NVME_IOPOLICY_RR, - NVME_IOPOLICY_QD, -}; =20 struct nvme_subsystem { int instance; @@ -501,7 +491,6 @@ struct nvme_subsystem { u16 vendor_id; struct ida ns_ida; #ifdef CONFIG_NVME_MULTIPATH - enum nvme_iopolicy iopolicy; struct mpath_iopolicy mpath_iopolicy; #endif }; @@ -524,8 +513,6 @@ struct nvme_ns_ids { * only ever has a single entry for private namespaces. */ struct nvme_ns_head { - struct list_head list; - struct srcu_struct srcu; struct nvme_subsystem *subsys; struct nvme_ns_ids ids; u8 lba_shift; @@ -549,33 +536,15 @@ struct nvme_ns_head { =20 struct ratelimit_state rs_nuse; =20 - struct cdev cdev; - struct device cdev_device; - - struct gendisk *disk; - u16 nr_plids; u16 *plids; =20 struct mpath_head *mpath_head; -#ifdef CONFIG_NVME_MULTIPATH - struct bio_list requeue_list; - spinlock_t requeue_lock; - struct work_struct requeue_work; - struct work_struct partition_scan_work; - struct mutex lock; - unsigned long flags; - struct delayed_work remove_work; - unsigned int delayed_removal_secs; -#define NVME_NSHEAD_DISK_LIVE 0 -#define NVME_NSHEAD_QUEUE_IF_NO_PATH 1 - struct nvme_ns __rcu *current_path[]; -#endif }; =20 static inline bool nvme_ns_head_multipath(struct nvme_ns_head *head) { - return IS_ENABLED(CONFIG_NVME_MULTIPATH) && head->disk; + return IS_ENABLED(CONFIG_NVME_MULTIPATH) && head->mpath_head->disk; } =20 enum nvme_ns_features { @@ -595,7 +564,6 @@ struct nvme_ns { enum nvme_ana_state ana_state; u32 ana_grpid; #endif - struct list_head siblings; struct kref kref; struct nvme_ns_head *head; =20 @@ -997,34 +965,28 @@ void nvme_cdev_del(struct cdev *cdev, struct device *= cdev_device); int nvme_ioctl(struct block_device *bdev, blk_mode_t mode, unsigned int cmd, unsigned long arg); long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long = arg); -int nvme_ns_head_ioctl(struct block_device *bdev, blk_mode_t mode, - unsigned int cmd, unsigned long arg); -long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd, - unsigned long arg); + long nvme_dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg); int nvme_ns_chr_uring_cmd_iopoll(struct io_uring_cmd *ioucmd, struct io_comp_batch *iob, unsigned int poll_flags); int nvme_ns_chr_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags); -int nvme_ns_head_chr_uring_cmd(struct io_uring_cmd *ioucmd, - unsigned int issue_flags); +int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, + struct io_uring_cmd *ioucmd, unsigned int issue_flags); int nvme_identify_ns(struct nvme_ctrl *ctrl, unsigned nsid, struct nvme_id_ns **id); int nvme_getgeo(struct gendisk *disk, struct hd_geometry *geo); int nvme_dev_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_fla= gs); =20 extern const struct attribute_group *nvme_ns_attr_groups[]; -extern const struct attribute_group nvme_ns_mpath_attr_group; extern const struct pr_ops nvme_pr_ops; -extern const struct block_device_operations nvme_ns_head_ops; extern const struct attribute_group nvme_dev_attrs_group; extern const struct attribute_group *nvme_subsys_attrs_groups[]; extern const struct attribute_group *nvme_dev_attr_groups[]; extern const struct block_device_operations nvme_bdev_ops; =20 void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl); -struct nvme_ns *nvme_find_path(struct nvme_ns_head *head); =20 static inline void nvme_add_ns(struct nvme_ns *ns) { @@ -1051,35 +1013,43 @@ void nvme_mpath_default_iopolicy(struct nvme_subsys= tem *subsys); void nvme_failover_req(struct request *req); void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl); int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl,struct nvme_ns_head *head= ); -void nvme_mpath_add_sysfs_link(struct nvme_ns_head *ns); -void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns); void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 anagrpid); -void nvme_mpath_put_disk(struct nvme_ns_head *head); int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *= id); void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl); void nvme_mpath_update(struct nvme_ctrl *ctrl); void nvme_mpath_uninit(struct nvme_ctrl *ctrl); void nvme_mpath_stop(struct nvme_ctrl *ctrl); -bool nvme_mpath_clear_current_path(struct nvme_ns *ns); void nvme_mpath_revalidate_paths(struct nvme_ns_head *head); void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl); void nvme_mpath_remove_disk(struct nvme_ns_head *head); void nvme_mpath_start_request(struct request *rq); void nvme_mpath_end_request(struct request *rq); -int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, - struct io_uring_cmd *ioucmd, unsigned int issue_flags); - long nvme_mpath_cdev_ioctl(struct mpath_device *mpath_device, unsigned int= cmd, unsigned long arg, bool open_for_write); void nvme_mpath_ioctl_begin(struct mpath_device *mpath_device, unsigned int cmd, void **opaque); void nvme_mpath_ioctl_finish(void *opaque); =20 +static inline void nvme_mpath_put_disk(struct nvme_ns_head *head) +{ + mpath_put_disk(head->mpath_head); +} + +static inline void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) +{ + mpath_remove_sysfs_link(&ns->mpath_device); +} + static inline void nvme_mpath_synchronize(struct nvme_ns_head *head) { mpath_synchronize(head->mpath_head); } =20 +static inline bool nvme_mpath_clear_current_path(struct nvme_ns *ns) +{ + return mpath_clear_current_path(&ns->mpath_device); +} + static inline bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *h= ead) { return mpath_head_queue_if_no_path(head->mpath_head); @@ -1089,8 +1059,9 @@ static inline void nvme_trace_bio_complete(struct req= uest *req) { struct nvme_ns *ns =3D req->q->queuedata; =20 - if ((req->cmd_flags & REQ_NVME_MPATH) && req->bio) - trace_block_bio_complete(ns->head->disk->queue, req->bio); + if (is_mpath_request(req) && req->bio) + trace_block_bio_complete(ns->head->mpath_head->disk->queue, + req->bio); } =20 extern bool multipath; @@ -1101,16 +1072,6 @@ extern struct device_attribute dev_attr_numa_nodes; extern struct device_attribute dev_attr_delayed_removal_secs; extern struct device_attribute subsys_attr_iopolicy; =20 -static inline bool nvme_disk_is_ns_head(struct gendisk *disk) -{ - return disk->fops =3D=3D &nvme_ns_head_ops; -} -static inline bool nvme_mpath_queue_if_no_path(struct nvme_ns_head *head) -{ - if (test_bit(NVME_NSHEAD_QUEUE_IF_NO_PATH, &head->flags)) - return true; - return false; -} #else #define multipath false static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) @@ -1137,9 +1098,7 @@ static inline void nvme_mpath_add_disk(struct nvme_ns= *ns, __le32 anagrpid) static inline void nvme_mpath_put_disk(struct nvme_ns_head *head) { } -static inline void nvme_mpath_add_sysfs_link(struct nvme_ns *ns) -{ -} + static inline void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) { } @@ -1197,14 +1156,6 @@ static inline void nvme_mpath_start_request(struct r= equest *rq) static inline void nvme_mpath_end_request(struct request *rq) { } -static inline bool nvme_disk_is_ns_head(struct gendisk *disk) -{ - return false; -} -static inline bool nvme_mpath_queue_if_no_path(struct nvme_ns_head *head) -{ - return false; -} static inline bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *h= ead) { return false; @@ -1243,7 +1194,7 @@ static inline struct nvme_ns *nvme_get_ns_from_dev(st= ruct device *dev) { struct gendisk *disk =3D dev_to_disk(dev); =20 - WARN_ON(nvme_disk_is_ns_head(disk)); + WARN_ON(is_mpath_disk(disk)); return disk->private_data; } =20 @@ -1263,7 +1214,7 @@ static inline void nvme_hwmon_exit(struct nvme_ctrl *= ctrl) =20 static inline void nvme_start_request(struct request *rq) { - if (rq->cmd_flags & REQ_NVME_MPATH) + if (is_mpath_request(rq)) nvme_mpath_start_request(rq); blk_mq_start_request(rq); } diff --git a/drivers/nvme/host/pr.c b/drivers/nvme/host/pr.c index fe7dbe2648158..65e4dc74833e9 100644 --- a/drivers/nvme/host/pr.c +++ b/drivers/nvme/host/pr.c @@ -49,22 +49,6 @@ static enum pr_type block_pr_type_from_nvme(enum nvme_pr= _type type) return 0; } =20 -static int nvme_send_ns_head_pr_command(struct block_device *bdev, - struct nvme_command *c, void *data, unsigned int data_len) -{ - struct nvme_ns_head *head =3D bdev->bd_disk->private_data; - int srcu_idx =3D srcu_read_lock(&head->srcu); - struct nvme_ns *ns =3D nvme_find_path(head); - int ret =3D -EWOULDBLOCK; - - if (ns) { - c->common.nsid =3D cpu_to_le32(ns->head->ns_id); - ret =3D nvme_submit_sync_cmd(ns->queue, c, data, data_len); - } - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; -} - static int nvme_send_ns_pr_command(struct nvme_ns *ns, struct nvme_command= *c, void *data, unsigned int data_len) { @@ -101,8 +85,6 @@ static int __nvme_send_pr_command(struct block_device *b= dev, u32 cdw10, c.common.cdw10 =3D cpu_to_le32(cdw10); c.common.cdw11 =3D cpu_to_le32(cdw11); =20 - if (nvme_disk_is_ns_head(bdev->bd_disk)) - return nvme_send_ns_head_pr_command(bdev, &c, data, data_len); return nvme_send_ns_pr_command(bdev->bd_disk->private_data, &c, data, data_len); } diff --git a/drivers/nvme/host/sysfs.c b/drivers/nvme/host/sysfs.c index e59758616f277..39a80f000839b 100644 --- a/drivers/nvme/host/sysfs.c +++ b/drivers/nvme/host/sysfs.c @@ -64,8 +64,8 @@ static inline struct nvme_ns_head *dev_to_ns_head(struct = device *dev) { struct gendisk *disk =3D dev_to_disk(dev); =20 - if (nvme_disk_is_ns_head(disk)) - return disk->private_data; + if (is_mpath_disk(disk)) + return mpath_gendisk_to_head(disk)->drvdata; return nvme_get_ns_from_dev(dev)->head; } =20 @@ -183,31 +183,28 @@ static ssize_t metadata_bytes_show(struct device *dev, } static DEVICE_ATTR_RO(metadata_bytes); =20 -static int ns_head_update_nuse(struct nvme_ns_head *head) +static int ns_head_update_nuse_cb(struct mpath_device *mpath_device) { + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); struct nvme_id_ns *id; - struct nvme_ns *ns; - int srcu_idx, ret =3D -EWOULDBLOCK; - - /* Avoid issuing commands too often by rate limiting the update */ - if (!__ratelimit(&head->rs_nuse)) - return 0; - - srcu_idx =3D srcu_read_lock(&head->srcu); - ns =3D nvme_find_path(head); - if (!ns) - goto out_unlock; + int ret; =20 - ret =3D nvme_identify_ns(ns->ctrl, head->ns_id, &id); + ret =3D nvme_identify_ns(ns->ctrl, ns->head->ns_id, &id); if (ret) - goto out_unlock; + return ret; =20 - head->nuse =3D le64_to_cpu(id->nuse); + ns->head->nuse =3D le64_to_cpu(id->nuse); kfree(id); + return 0; +} =20 -out_unlock: - srcu_read_unlock(&head->srcu, srcu_idx); - return ret; +static int ns_head_update_nuse(struct nvme_ns_head *head) +{ + /* Avoid issuing commands too often by rate limiting the update */ + if (!__ratelimit(&head->rs_nuse)) + return 0; + + return mpath_call_for_device(head->mpath_head, ns_head_update_nuse_cb); } =20 static int ns_update_nuse(struct nvme_ns *ns) @@ -235,7 +232,7 @@ static ssize_t nuse_show(struct device *dev, struct dev= ice_attribute *attr, struct gendisk *disk =3D dev_to_disk(dev); int ret; =20 - if (nvme_disk_is_ns_head(disk)) + if (is_mpath_disk(disk)) ret =3D ns_head_update_nuse(head); else ret =3D ns_update_nuse(disk->private_data); @@ -288,19 +285,19 @@ static umode_t nvme_ns_attrs_are_visible(struct kobje= ct *kobj, #ifdef CONFIG_NVME_MULTIPATH if (a =3D=3D &dev_attr_ana_grpid.attr || a =3D=3D &dev_attr_ana_state.att= r) { /* per-path attr */ - if (nvme_disk_is_ns_head(dev_to_disk(dev))) + if (is_mpath_disk(dev_to_disk(dev))) return 0; if (!nvme_ctrl_use_ana(nvme_get_ns_from_dev(dev)->ctrl)) return 0; } if (a =3D=3D &dev_attr_queue_depth.attr || a =3D=3D &dev_attr_numa_nodes.= attr) { - if (nvme_disk_is_ns_head(dev_to_disk(dev))) + if (is_mpath_disk(dev_to_disk(dev))) return 0; } if (a =3D=3D &dev_attr_delayed_removal_secs.attr) { struct gendisk *disk =3D dev_to_disk(dev); =20 - if (!nvme_disk_is_ns_head(disk)) + if (!is_mpath_disk(disk)) return 0; } #endif @@ -312,49 +309,10 @@ static const struct attribute_group nvme_ns_attr_grou= p =3D { .is_visible =3D nvme_ns_attrs_are_visible, }; =20 -#ifdef CONFIG_NVME_MULTIPATH -/* - * NOTE: The dummy attribute does not appear in sysfs. It exists solely to= allow - * control over the visibility of the multipath sysfs node. Without at lea= st one - * attribute defined in nvme_ns_mpath_attrs[], the sysfs implementation do= es not - * invoke the multipath_sysfs_group_visible() method. As a result, we woul= d not - * be able to control the visibility of the multipath sysfs node. - */ -static struct attribute dummy_attr =3D { - .name =3D "dummy", -}; - -static struct attribute *nvme_ns_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); - - return nvme_disk_is_ns_head(dev_to_disk(dev)); -} - -static bool multipath_sysfs_attr_visible(struct kobject *kobj, - struct attribute *attr, int n) -{ - return false; -} - -DEFINE_SYSFS_GROUP_VISIBLE(multipath_sysfs) - -const struct attribute_group nvme_ns_mpath_attr_group =3D { - .name =3D "multipath", - .attrs =3D nvme_ns_mpath_attrs, - .is_visible =3D SYSFS_GROUP_VISIBLE(multipath_sysfs), -}; -#endif - const struct attribute_group *nvme_ns_attr_groups[] =3D { &nvme_ns_attr_group, #ifdef CONFIG_NVME_MULTIPATH - &nvme_ns_mpath_attr_group, + &mpath_attr_group, #endif NULL, }; --=20 2.43.5