From nobody Tue Apr 7 12:21:55 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 3A3D43ED11B; Wed, 25 Feb 2026 15:40:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034050; cv=fail; b=gOoACZTRhtyn18CYOY90uAAmfae+SkB+UggadDJGRkexqhMJHqUrsHL3gCALJVD/wOgY1lh5bA8/f/Jb2DvQq2mMyu/VAQ1kTI20Qt3LZ0bfF8ip1EZNcKjqSqztUZOXw1eoqur1koMc5j3XgNtwZs8HzQsc3G4f0PXp2o8+sEM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034050; c=relaxed/simple; bh=0K9gGkBobkRnm0AgT92If3luEBQmU0fMYOPlJY3h8+U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CoBJ+1kOrtPwegTbAr7ogYXPOFWWaddDwY3l2h2NsZ5bYErsO6eElSH/4eqafiniEQhxUGEHFiEHUGu1utauhE9gsqpO57rH/PnrSrQ8J2j0XpzGrEX/b2Dv0VrskFHt4vGGiiAH30ltvKYiRoTDKLm3YJ3itzL4yL8lqhlcZig= 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=itushvEZ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=G5+D75j5; 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="itushvEZ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="G5+D75j5" 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 61PAdBgN817942; Wed, 25 Feb 2026 15:40: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=QcblJYyW38+86A8vK+xtzRCaO0dLQA8tafh3IYEyBXA=; b= itushvEZcVBbl2SCQteyuY//cyZPnglYmzwS9ox39vrm4L9gW6fbAgXksyw/0Mf8 ZtcL1ZRnh+pCFAAKl/+xgZMSJewQ3Hqqg1DcofXuvHoaZg0J5z1pnucfjR9iBpiw QE8tlmnLA+hhXpVwbEKLTHPIZsCl6oCBfLOILs1/Fo51gxTls1YyeqMbddsBD29P lEliQrdCSDRn535//ctpy25ROPcq8LKBcH3uFjVs3+CJ/yThbZG85FKrn373ekJ7 1kdbeoYc3dUlum63X6RsWpAAbWNHAWHfqGUh71GZm0+7QDhMLe+E36O/0jt+kvX+ /25wOSnXZmv3J+Q/0z0+uQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areet0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:29 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFAHrP027842; Wed, 25 Feb 2026 15:40:28 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011039.outbound.protection.outlook.com [40.107.208.39]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35g8xf6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eItcm7o2tQagMh+U7PfZUnbCga6ESFptat8W+tett737N/eGjmYTpdCcKC2P4opOfwjB99wvvQ8vyNJJaivlPl6dLCi6wn3Z2ib4FnS7onkEgKqTnHaXb6OZA8hxFQOi2Ku0leQbrI+aZ7F0xrUSbow7Z5vOg4Pa65/nQofKtnHol3fWN/JjHnDUfK9r9vhcIFcANmY6Zl6Eh/aUK1bc1+r7nnaLI5j9FQo1thqTBN6AmmcbKuzHgbe1W3pxMiRmYmvEYd+6v4HRNNLzcCv3plSKPkv8AaExR/IqcSpf9pIaJJLsOjhsbeYYNfx7oRh3dlbdFgA8N85Wn/afZTbLjQ== 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=QcblJYyW38+86A8vK+xtzRCaO0dLQA8tafh3IYEyBXA=; b=eEVKTMQgqvPs6ZQQR5q0vXgGb0dAj1biH5TyWwmQihoLd2vssGOcso+u3dkDbggQHzDftx6egGG96tASHoIEIOSaXdzklu2rEvAIrwT/opGXTJfU4feKXgfF1S+c1puQ0rbdhRPVASSpQMuFDIACfrdOCBA34byV9Exxj/7k6NPCbIB3Ajycl1l/FeZQncL2HMGTt2zh7xqVe119S7yODCC5TOSFl1IOWBk+ntYV21fFHe4HETVXwqZ0Df9pzul/fThnnOwcGhvkOnx8nASUvEwIPShVVXel9dSXiwI69mb9Mrnb8kaXMErp7BkgUKiTecqza8HXc2FsEP4o5u8BGA== 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=QcblJYyW38+86A8vK+xtzRCaO0dLQA8tafh3IYEyBXA=; b=G5+D75j5Jce/jAPbABqhFyIO368BJvgn345hh/fZ5d1yp22YsRY0zkRbRvrjt+jIzginDbDWNn2Fqk5/x7pCXf9fgwD46LxkVjlyWyH0mG5LNhUeh2MYnuAtP4nK5Jk6ifYIGyp/Iu8w0eBmC4vA1bOZ8i+7cZO+jfUqZaMP980= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:22 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:22 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 01/19] nvme-multipath: pass NS head to nvme_mpath_revalidate_paths() Date: Wed, 25 Feb 2026 15:39:49 +0000 Message-ID: <20260225154007.1033735-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132F1.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::34) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 2dd6e2e4-d607-4084-0b1f-08de74843004 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: zeweYNpolYBeO/Shpion3kb3Y9/r0z/SyJ20xwpP9xWSSLpSCmnyVoupzWwp8gRck0TepPOhfWPtUvdPO9CBr3TjULS6/+/cc/gHhjdYB/292YZXqqzpqpkNc20Xtf/eSgrMEmdpfdL2JGV71ZQ5sCZKMVB0yRjIk6Na1BxQXKWSb+tOQ1c18WeR0zTJIBotBgVhVSGnHELLKzKy5p4oVyOPV4PAAk4SR90ORoxC9sTkt/jVjXmkbM6atEsaTK5G5+h/rNDrlX2K2y71EKexFQktqbsWuxmVc9DXmO0GM+BJOJVMRkKInZscQw2NdpQo1UEbpNobMUUNRYiI8Yv/p7J+iF6Hd1Q2EGyeS+fc90VXZKtunrPg+Y8WMP98V0Hodz1hX8ekWZlXHDMXR7PiGHN4V2X/PUHuo8aWvpqE//VLZvCDY2b4HO2bEyJXbFG/8uxVMXL7GK5ncZ3o/cQd1+fNGUg+P7CGNZ8E+OQvBA8yami5BiljKvUpprdV0U7An+R6+25okm8XZw2yRU+PjVdqkuzWdLtQZS05z/BptGe9PtUwcxxQZetUQJllLdPsvyQhCZdOh4a3q2R3skfrxF8SPxyg9X1lJEZcsP+7Ot069sz8qPQzZV+QzOLqtN/Ui0qQ67SlVgwGyeJtIf43ejh1p2PbsXfFd/dJ4huE4+0HU7Dtu6JkHRE7cuG42IxulAMceHgouZR2HWiKbgF5L8HjoyqOtFbMogNvvPqxxy8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Yy+dhYQMZvLKE3N8b6kjk/nqbWwXlRVOi6xjRHtKuZcWepnT10h3/xk1zAtq?= =?us-ascii?Q?FER64kNUdZr5L4lJL8mCMquwKaHUTCHXnwLt4nER5/OE/X143/l8E4F6Mwm4?= =?us-ascii?Q?eVlw5lPjPEreCWMhEdc3GhdktYpdnIXQVLlLpkJWDsCXSVMFrc+6oO8ILhrS?= =?us-ascii?Q?TCB2jlLUJf8CmaKVFbR4Mnj0SXFNhgK+SWpkRYZCWyU4lFcOz2+OJl0UViZi?= =?us-ascii?Q?Reeat3zA5DLlfeWPWcUULUtHD/L5aUmwDMFLo9lc4H2JVtHKAhmguhPElQFv?= =?us-ascii?Q?XwoMYPy0uo0iDyFOUPuUIjv1TBYmBzgJvPjZmsqR/Tf5SGBElZHgckhJ1E59?= =?us-ascii?Q?+19qi0gZXGnVkrqqnlpf6w+0ihYhQ3n6PqQj+T2zKE/1/TVD2/x/tZ6dypBz?= =?us-ascii?Q?RfqGaW6ybhUihMb+Sh0ZlYdWlvM4Ggm5FjZfHlH6DILNRBKgL5r0s8pW0iLt?= =?us-ascii?Q?O0yGUChmXGCIE3sLwKZMK0tfGszrNcuyUG5hOCDkicY3l9H8rQVG/SFjRk+k?= =?us-ascii?Q?OKonTiIt9C23fT3z+CTAp7PVQb7MTkiq/JHmlq8DCtSK9/17MEU5dQzgv3x1?= =?us-ascii?Q?j7d8pJu29TPgtq5cmPsRgzlEeGCPEXvVpfP/FrrXDjndz2OLLj6cKu5bhARq?= =?us-ascii?Q?N3DX97bmar9OTD9FP/a8PSik/psElNYN3Du25/kbcgSlRWZ0OYAx1NZB+Irs?= =?us-ascii?Q?Upn4cd8+IjIA75EHPpXmMYF4R08XXqfRcCR8OzYv8PGDALHfJhGc9QTd+uiV?= =?us-ascii?Q?nNMWNHkgzQKqfnsCBymGQ4jBKe//9kPxBJ89KDYu7VZs09Py1FzQgWMZXd2H?= =?us-ascii?Q?qLaz17PehLoS2l8nnvoe6iHb/kykcgJQpOupjLp8kbFHANFqxw10DnIcjpCO?= =?us-ascii?Q?ZygbTUqZG6FYo6YrL0eR411ZgPYPx2zKP4lb9iDsU6jlAN4SKEeFwlKuUrlR?= =?us-ascii?Q?4hAN3FcjELTr54GkYjY83HmOGZNVtg9RGVbodiSbwq3ZI+cZyLeFERLbOvI/?= =?us-ascii?Q?Ky9ilCqWe/EpJgfyI5zHjo+uJjgoN0PntOv23v2TQ5OtySSANUkpFczp/1HB?= =?us-ascii?Q?b8t9XuBdSCJYpzH8vMjFLMtaZbZ4agzWUSstvWgzUHLnYK0sVkfSIPTpy2Gq?= =?us-ascii?Q?LoOc/AVxmscJrSob7QfnQZcruYa3V/KmBPzGHu0Ht46y35dF2Pf7/9lNqzsC?= =?us-ascii?Q?9dF7rTRSH5rFgJnU9IxM8btXqM+lcqUzYakjExYHybKQ/Gl/zyZC2LCbQZyM?= =?us-ascii?Q?X1l0q4QOMueRVCTmDS82c1vCzBvMEz0XNfWx31gtapF9Q4zcXGeO+WC7Gd44?= =?us-ascii?Q?GNC3OKPrV3ZiX1X2VuUUvD52iVNPs3HcCzYPNvPsuwRos/u9aVyUNLWT26DP?= =?us-ascii?Q?t60S4tpgTJ5fpJNji8Tz8LNdm8OcLuDlCnAReATpA0nWxURg4ElEXfo06HMo?= =?us-ascii?Q?9EJcJymJtaTv7oP7Gddcex7t2hD4bY5EeSO4JOqlK4LJwEKPr6wJRTtiJtpv?= =?us-ascii?Q?LTQHiBen5YumsWUKhAPcJeOCrqBF5adyVyI7Ue/MrWv3oG2kXTsRg8FzR61B?= =?us-ascii?Q?VQa10nX0Cc5Q2JPbxlRi0BfU5lCXcYLm/h0xqAMIOvPsgpaAYKXh973zn0cn?= =?us-ascii?Q?tppD9s8QjWDGjJD+7mOkPLGZ0n0Xnl0GJzu7n33eOn5WYp78Xs6+2qvngDRb?= =?us-ascii?Q?nh1AGW+mjRzCIEitJwUvFIJV71mlkR8aZsLup58vN/Lf4VylNyjHbeU62k45?= =?us-ascii?Q?n85bPv00s+BYkmpAy7WSzjl1NdNmQGk=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: zCHQngQu4xVh9+Pvrrx+ktC+dJNzeQTv4NM1T08XzZmVaDvX6/bRlUm1nTIoLlAZizAusIwTcoXhHMaOBSopncY/wZyR8xBn5FmeWzGcZKUorItYxphPLVq/LycNs0mK14AloxeEfEpGFmaWLgn3bfHe+ZHqcagBi4wUaZ2mSO55Ni30DCqQMnmvp7dLT+wKuRSFFD5l5IwIxfFxgk/URoxRJgLMb1uPUQa/5VgIfzjDixUgT7A2NsorMplsH1lYus8j443TpsPVU/DHZfBPQl/Tnf7dIn6fM+cftnm2l/Axw87kgYm1Y8jZDxln65ctdsJESiShuIvW/AfsQyQrw0p6DH4uZe/2IImutXoywUluVxSckwuWZ5or9nZIsOZZ+fsyetGXrbHDA6ZorIuxJI/2lBgpJoSfcNsGbf883hzDh6uZHq86kuCEjR9vEAoDt0H1Zh/WzT1qNsrZyQdjbi3+8fGARuizTtBbXKXZT2i0iDLWDvrAZjZQICULAJoLXBr7RZ3PBhrjfVfUGLPTwQXYw/Eg2mc4H9tMXw2/Z6IgA03wXNGfxdbYAy2D9E+RbFHbUyHzVQ7XuIppyO66+03NWPYNvkkK4/fnemutMek= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2dd6e2e4-d607-4084-0b1f-08de74843004 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:22.5101 (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: PzF/U1FADp3obDRuiIIdyKNyLzdUccsBrJy5SYPE0WS2U8kJ2R9CmQRCq44rjJqSUQf7HAdezfpF9kN/Cbpc0A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=829 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17ed b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=pRep3gAyX0dtP_3rn2kA:9 cc=ntf awl=host:12262 X-Proofpoint-ORIG-GUID: 5167WXvQ8AXhfORMW8FJnaYflgDWkadp X-Proofpoint-GUID: 5167WXvQ8AXhfORMW8FJnaYflgDWkadp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX9hWOui3JA1j0 tarcfoJ9xY0ci7rbYwDAGipqjQzHxgxzCzGgDk6vWrZliVNgYW36FJfDphOGokmeFNH6caupm1z zx/26Ed2++ICXAkDCFrgma3qaxBK9//PbOXQnYwMI9YtPT9AwcdmkNzLsTltUQn5EGuKtOpPAQr kzjX0cW2zaLHba/j0HISn/MaJnWgB8UgrPWdnMLzB4YNFQjC56IPrT7hKaYj/cw7CU3AQY8TwBN aRITcCqmREdue9i+1EZZBUoZMh8+g82k3hOBxVHgka8uV+J8SBWA9ywlT8Oz6v9vgrFZ8eNIjAi SOsb5mv+4FE6Ut6YSfhb70XxQX4HQN1onnjDiJ2yPJlXHwlDyyBQrZNChZK+xgDReCf9djy0nYP cIXZIZqxg9bh0KpD7Hy97oCxmdvhghDwZZMZsCDBGl7gfhB3Hcr8V2FPiUvd/EbY5xwBWqSVhf/ 3tJxUwH5ZPTYYj2xhU15LGjroB7BUZfDBppfRUDM= 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 3a2126584a236..37e30caff4149 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2522,7 +2522,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 bfcc5904e6a26..c70fff58b5698 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -271,10 +271,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 9971045dbc05e..057d051ef925d 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1035,7 +1035,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); @@ -1100,7 +1100,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 Tue Apr 7 12:21:55 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 970723E9F7B; Wed, 25 Feb 2026 15:40:42 +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=1772034043; cv=fail; b=ZdmZ+V6gkYJ7G7Qir0gP1z0traddu1oXmefC/5EXC0cPyZW4iF+M8WaXD5fdaUPHhoY0n/GSdxyY9IgKFJ/HHdp9ClmZx6x3/tGsKgP1hIrDLfwZcg3qMhfFymPUi2IxEMpV1aDYOTf9E/a9WvCTXHE3ouySPURZnDqeMues+0g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034043; c=relaxed/simple; bh=5/4IXUIdbTwATrJOwyIug3slFQDfL069r2e2qV4XSjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UjwK+S+QMaF/x36xSCSmRfPIHLdJWDsjoSKF+xWsT/OMnugaRmY4vJt/IWHmDMxwdUtI3AtG54nYqQJuda2OtVCc7GKvsEDWoc6f+tH8tqTSLBoMO2nesqA4KRWwmCRFsPsfo+UbjL1FpXRqSO8IsORTJDeS/dr7FHfouCZeHLY= 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=lFC0yicW; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bmkaLbFp; 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="lFC0yicW"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bmkaLbFp" 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 61PETBJC2703463; Wed, 25 Feb 2026 15:40: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=t4F1YgsZSr8VwnaPPP60oFYQYXTHavIf5RkCIbWMIyo=; b= lFC0yicWD3I0vBjdK5pUltIsrz5tUPSx7XL79WWe3KHHIHGbxuonkA98efJYmq5V iideauq9rLtrLRx0WnJ3xmOkVmf6el6ez3KMDoWy21MN/dgo+NAlfqoPSf5xT2mE /zU6w6U1p1I3yATwtwVX28I4Rifx3uY0mqMMEazq8uVeQnvd6wwVwyYUJve6LlHk SMVrOpIqMbLFqZ+ClJjyybyiiOYuxgJyJpDXAGc2BhGhqSGYxrMahP0NslxNC/Qx IwVKgiJRiSasqjxQKe6e7i7SSNNzVtxz0JfYjJ5UAzQDGbD3rDvxZE1hNWM3+rfj qWoATvLppJJsAJ8B6TATiQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4rbegpn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:29 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFAHrQ027842; Wed, 25 Feb 2026 15:40:29 GMT Received: from ph0pr06cu001.outbound.protection.outlook.com (mail-westus3azon11011039.outbound.protection.outlook.com [40.107.208.39]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35g8xf6-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Img315Uxb+7uwOtn6wlSJBfPzit4BvYsnk87OLESAx6sjHOpg9Z+jEDbfIQ3Rx+9KSpFkQqfDsjmq+LSjXpFHR4MfFYOFc8uYYXlexL5G0b+Y2UGjPpf//iqOpg9Jn9Ic1bcpjS6OhjJhBUlWQy6q8WK2tIBHte4jCJzPQI9nfw1XXpLiUVNxNO3ijVrUPMf4e/SNvw9DxuDMC4f5jKxm1xzy3aZwHISCvzIS6zXc6drNG1b7Q9QydxR+g6doRIcMjOk3sS7PAPZCQYewv8l+BCUHOTivbeHQ9GNUmKEc+Qk5CzNMzq/51El54Lj0z7W2xBIglgQ59E+PJZLkFgLZQ== 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=t4F1YgsZSr8VwnaPPP60oFYQYXTHavIf5RkCIbWMIyo=; b=OBceJDjN/U28qqM1ncGwM0WILUVedM2iHP9zljVFPgMtbImzBm2vIoCl8HqzgoDrtek555u0aP1mNkprAS0d4JUtkUj50yu4bCjDmNFxbxiWDj9yEgO2f1YbAotJZRRbxLmDfT/YbwW7FV1mqs8CKbdPZjpLHTNj36TvYDxbdhz/fJ2BtcAa/4At7lMnshR8zpRDHiHXgZ4V/1zBLQCWnsdSYpe3VqyZOusDaG5Np5JmM0rIpxIIQZB8TrlkbLVtH8rgXhbvrPrqFRamZmz68Mt1WAwzJx51JlJguJvSeMuOfEKpZDqkdDdE55ON+kyjIuaB6DQqUI51rFDL0ZUobw== 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=t4F1YgsZSr8VwnaPPP60oFYQYXTHavIf5RkCIbWMIyo=; b=bmkaLbFpasfQFVvgRjvHwh8/MZzz/IVCP7J54uV1wUXVV9edThovSwilzSmjtVyXnWEEH0e5RlNF+0QRe0Iajqz+F2yGbWZ8vVBDgX3/GEFOtFhp8v9Ws22CQQzR+eAKGzupgsx0QdiCoK3iPH1CI0PWs7diRttTvVDRxlFzx4o= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:24 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40: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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 02/19] nvme: introduce a namespace count in the ns head structure Date: Wed, 25 Feb 2026 15:39:50 +0000 Message-ID: <20260225154007.1033735-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132FA.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::2b) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: a040e8ae-e3da-466f-c2f1-08de74843142 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: jlFVitFvO7uR+e9jjpfNOOhDQX5lEF5u5FfJnK/l9K6JajFuwHK/C+TZNApM5FOsjrOQISaurfFhP97JhgObskukpP1PNuXlcgWCU4S0Pz47sMeVONCsemmmGz+UdjCjkWqDdp9+2Jxa7+jTTRqmncw3wxEmlCIW8RJLTJu7srLjKsKQwTUfOcJ83n7PB9p2M63yg6yIh3r9sDYipJ7CVYRKybBVRe5kAzEwJDZ295Hfq+GFtVhSRkONsar7lXxSVYRj5z9ovgfpHerrFb4pUfD77rQsrnLT5hNWmMQoVCTqZ2CCrMd1lOAK66JBhAJfXBnFIhNvp/dbFjQa5m9YJ5DP0GZaNc8HqR3jH7G2L9ZiHMoVZRo7lkmqTkh268CabaAdj2HJysTsGt0Tzp1MZmpTVlRnwCLhK5zGmqSXVpkO9vS3sQP6+tBzeEFj6WOVUaVayZiOc6hXYuarXnhyNOD9sYa0QNiPlUJhCcKRsdAbDqDo7J7lQwLnUxVZ9gT80dXIqLUuqzTN5U00yOmonkaNKL+tZkOO2S/Sl65kVlHZ3B3bO9DRMcLPVoO8QvH1WSB8dR83uCd7pvFv6XKyKDGOm2vqac2Wejt3xOU9WjP3fGva84pm94vTqTk+KAuvkbSzLKoFQ9WUm3W7ngFwFAqcykE5MMnrL6BunDksBDncN7IL3BqmwBWadamoDygVCBZoxw+FFtck4E0v+XCWWEFmuAJSIl+RkjzlAnz89Uw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?W64zz468OKGusERyEvhLr06zro7v3a4EwOvS0pCPRlrjKuAa5rPDObTgfY9I?= =?us-ascii?Q?/BiKBq3eHknwXcnGYaKr3DI44aJylYdnHXbtHwgqAAc0FC0CNIhP8cI0hIog?= =?us-ascii?Q?a8HyryB3YbOFhO8WdZZxBA+XI8DNoN/BVslnvveYaKag1d6ImJLXh/11DWJY?= =?us-ascii?Q?YSrhnGMS/9Yj/Wz8g6hU/QqUxySPSZyRo7HNIrQ2eo6pSW/9XTCL4lvzwXlm?= =?us-ascii?Q?g/0ZJoCnRch2v/scOH53mT5NHVYog5gfwKRNcPpa2d5ktBihSvW1VTni7+YW?= =?us-ascii?Q?xEIdQt2aULbZtGwKoYG8wZb/ylhnTz3zhBkKlEX0L5bqLOlc725E7XFWrhup?= =?us-ascii?Q?u75o/2yt+k7mp+07V99yx5rLHaJRxne/+lUs4KrAiq0z99CCUnv+nDa7954L?= =?us-ascii?Q?rBfx4Kbx/x0apE+MXayBjdYbkydipsAcK2D75Qua16LxOj7CkN7KhE330Lnp?= =?us-ascii?Q?fRNUvnzYyZak7rpC5WffAKK35NF5110zCPtL+8ZtbxLJJsyv2xSrQim6OYDr?= =?us-ascii?Q?yZ58I+Hmqi7SVbA3Mt6lfUaICdRtNBYRxllC1/X7UZTXT9BYy8uIhVRhLUVQ?= =?us-ascii?Q?Ekvj3GR4ZAMJWu3Hl+jskciaKsPrlDxrkdeSuD+C0OcILhwgdN8cZbGAMaoI?= =?us-ascii?Q?fxnaTrV/y22MtfXpnpcZiHoCkq3jb7cOi9XbZIBy7/CVs1hjDdWTk2HAGg5Q?= =?us-ascii?Q?rpEvBQ+prE5VuBJhDQY5Cb7gB2rF4B34tQgniGMwlbZ7whf7wU7yIxd0FpPO?= =?us-ascii?Q?64zlOvm2l5Plq05D1LegFJTYu+V9pX3PTZebdny9M0cW42nC/pKc50Gcwkjd?= =?us-ascii?Q?xDxwocqdjgknKb3brtqCwzzvCYFehWuzdKBD5s3iBEmLtSiVeVbN1tvsnIrq?= =?us-ascii?Q?suEiJoISeZTLBnrZAh4/DEemv+8IhEtA7TmxMg4saqUB5OLmyJ8m7P/oW1QC?= =?us-ascii?Q?HQ35c1sfi/GBYHS9n6mmrM2HcANTo6CU4GtPdsIV3Ys66A3KKFOoPu8FiTFc?= =?us-ascii?Q?zs/a1qB7YjQlOkXbnnDi04lxukqViytkRwXmWUlFyRQeUYulY+ctGRhcBCI1?= =?us-ascii?Q?Rbf/YToAk8ogRjq8aVNVQXUkIja+KhzQdkcp4VzupyF73zS53ERAIriX+nUX?= =?us-ascii?Q?IHo5+xYF7Y6VJLaN2foOEoa9erkypryLL5cB52PezHCuZro0+N+lEeDFSHEe?= =?us-ascii?Q?E+e4HaBuXHOgR0SBqgjzo9kWQeinlUeg8PJWu9Aew2wLLeiZ7727rBARx11e?= =?us-ascii?Q?77cbBSGygdZERpyqKYpCOBrI8snnfxrwOaD81hV9aAutPGXtbmvyY+3fDeCy?= =?us-ascii?Q?0uF62XJ26nmg6bIzjssw7+IbdkT2i/GAfkZvN7LmMaN76tIIlGsCM2KexrER?= =?us-ascii?Q?qvr/K5PlXnW4687/nKj70y4q7rsWT/7GHwMAmt4AfguIIN5pc2i8LOX8Pc86?= =?us-ascii?Q?rvp1Apm+0QsGRsaa4XzV7rusJ/Qa7YEEbfcko7+53FZlGyMrnlxiPrUwGts2?= =?us-ascii?Q?GhFfSS0guwYvtunM49pkxjnqL9g9lqMrIyvPoL6+08GQYGtALphB28jY0i17?= =?us-ascii?Q?DYXsnbDNEhSqDaR7qp0VhawlKOFdE/J6bo9hrnBNxx9GFx08e+qOwkOStjs3?= =?us-ascii?Q?pnKHlGyy2l8T3zYZswdryqBOu3q2XR34zJZl5rf+hIMn2vvEQQeN4ToeQhql?= =?us-ascii?Q?qyT2+rD6XiJgv+xYvsKD9SEY8mfGqLncDhOlAvMwdlZDUQnXgvr6JmlkCBIF?= =?us-ascii?Q?5VAmPK4JkRQRR84IM/l3kEl6Zw03u0Q=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: e5fzOc4uhM48vxrKztohGDRT7C1K6pb4Rv8NLSzTFVdROlU52sS1y3u5V3AnfG2YGxyihoxT9Jm2I3CQD2rF1GmMySRE0tukDb5S11D+biKjvC+v3Y0h9MWT2D4XEnBq4zRKTIMxSkGrFeysryJKa53gHSJqitYsU6ReR4Bz4u5lTVeQrx5tms4b3gj/SF9/wUMKO54y6O3lsGfeThDbYfd1NYLgNMaEcm89RNEvtz6zSbz53/8f1ct0zadPFBrDi7Pab62zmwsaFxSVZEiGbuj5tWxc+KAVVdHgRm6hz4UjSZPiKBQpGeIEyKBD8gOAd4LrXxqsJLj5y1z/jgRRB3POoPqeyBL/ajY2Jk9YdhjN7i+NH3j/mABenuMNjEO0NE/FXgFqP5Bu3qhr7uLiTZoX4aNJf+qjrnCm4qy5RNwuHENYlZgXJJC4zzQosWxeKVYYoDINCbG/nOwuXXww43T4kn1B4VoG1voLgiDJFap7yEmSXRD/rwayrvA+8AMswlr1YMITrcyLiwYl0mjW4lroof5BJmjq+frCrcr/152veGAXrtL0jdZEPgQnmDei6rDVLbf/P8x0edxOLs0yCk8Rvsz2HNnJxSmIWmUlJG4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a040e8ae-e3da-466f-c2f1-08de74843142 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:24.6690 (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: pDyYY6kPHmuWXHtCX8rbeNQ9PbJ8jr4vDCbRJsIt4PM27T7jnJcBgY3+Kb04nZcgwGhgb7XhJx5uY0AlNoc1Ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX4VtpJu87Z6Gi PVpRRYnd5dQpxbfaQAr1H4bXw6X7v86kd6gWfWBmWdYr4+afujYypkwNSidRKcHlRTm9QX4wbM6 FXbBpYjKDdwPCtgZkYwD3ClvtT8MbXm3gjD2o1B0BJZw9V2w+lwgrQNelFzg1phYjFmejRUH8Ay IDFxL4cuzPRQ2lUn10eo97M09yPuSHwewDbKq4pSQnsh9+p+xY7cyhEQP7VIOlvQ64FJyUGT1wL 4pEwIy7uPjaaDy/SI+GYkHu6eOIOP38gMIGNUylUiTgia42s9Xb11Bxzd1cgLAdqscBmZdK5WjP u6OVX7nr0OfCGXqA+Tkqs+FV/fC2B034d9lw1lEdb2SzOCrUpYAxDLdWrA+q1FOm2zFfWVBrkwn m0+LGWnPSUGrGdZrow5wcH0lBcFmfJ7geJyvZKDsVBWxV528gQD29qw61F3J/aTHJSLLqQYSgC2 mQBGpni5OS1Cw23FJ9ow3b8qzHMhmpz2KPSJP70I= X-Authority-Analysis: v=2.4 cv=S/fUAYsP c=1 sm=1 tr=0 ts=699f17ed b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=QmXYmMcIHYlnA2eLRDcA:9 cc=ntf awl=host:12262 X-Proofpoint-ORIG-GUID: H_hDjpr-94MrEksRFLWGpvfNWkjkkBfs X-Proofpoint-GUID: H_hDjpr-94MrEksRFLWGpvfNWkjkkBfs Content-Type: text/plain; charset="utf-8" For switching to use libmultipath, the per-namespace sibling list entry in nvme_ns.sibling will be replaced with multipath_device.sibling list pointer. For when CONFIG_LIBMULTIPATH is disabled, that list of namespaces would no longer be maintained. However the core code checks in many places whether there is any namespace in the head list, like in nvme_ns_remove(). Introduce a separate count of the number of namespaces for the namespace head and use that count for the places where the per-namespace head list of namespaces is checked to be empty. Signed-off-by: John Garry --- drivers/nvme/host/core.c | 10 +++++++--- drivers/nvme/host/multipath.c | 4 ++-- drivers/nvme/host/nvme.h | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 37e30caff4149..76249871dd7c2 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -4024,7 +4024,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)) { + head->ns_count) { dev_err(ctrl->device, "Duplicate unshared namespace %d\n", info->nsid); @@ -4047,6 +4047,7 @@ static int nvme_init_ns_head(struct nvme_ns *ns, stru= ct nvme_ns_info *info) } =20 list_add_tail_rcu(&ns->siblings, &head->list); + head->ns_count++; ns->head =3D head; mutex_unlock(&ctrl->subsys->lock); =20 @@ -4192,7 +4193,8 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, str= uct nvme_ns_info *info) out_unlink_ns: mutex_lock(&ctrl->subsys->lock); list_del_rcu(&ns->siblings); - if (list_empty(&ns->head->list)) { + ns->head->ns_count--; + if (!ns->head->ns_count) { list_del_init(&ns->head->entry); /* * If multipath is not configured, we still create a namespace @@ -4217,6 +4219,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)) @@ -4238,7 +4241,8 @@ static void nvme_ns_remove(struct nvme_ns *ns) =20 mutex_lock(&ns->ctrl->subsys->lock); list_del_rcu(&ns->siblings); - if (list_empty(&ns->head->list)) { + head->ns_count--; + if (!head->ns_count) { if (!nvme_mpath_queue_if_no_path(ns->head)) list_del_init(&ns->head->entry); last_path =3D true; diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index c70fff58b5698..0d540749b16ee 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -703,7 +703,7 @@ static void nvme_remove_head_work(struct work_struct *w= ork) bool remove =3D false; =20 mutex_lock(&head->subsys->lock); - if (list_empty(&head->list)) { + if (!head->ns_count) { list_del_init(&head->entry); remove =3D true; } @@ -1307,7 +1307,7 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head) * head->list here. If it is no longer empty then we skip enqueuing the * delayed head removal work. */ - if (!list_empty(&head->list)) + if (head->ns_count) goto out; =20 if (head->delayed_removal_secs) { diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 057d051ef925d..397e8685f6c38 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -539,6 +539,7 @@ struct nvme_ns_head { struct nvme_effects_log *effects; u64 nuse; unsigned ns_id; + int ns_count; int instance; #ifdef CONFIG_BLK_DEV_ZONED u64 zsze; --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 E79E83E9F9E; Wed, 25 Feb 2026 15:40:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034047; cv=fail; b=CecJcBshnfy+Sj+vySu9yRW7QwKxtRX2jgjT9f4hzIDotklPlR+tCn5nXlDRFXzgDSD9kFS7KtzQ8RLhSEazUEbu8eL1fQN28CJ2e29FHbI8OdhldhbMxchfkjC9wGaMDFBnREfhlasPLfWxFaGTAaz8YOqhpL5GVjJ8DsglEbw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034047; c=relaxed/simple; bh=1TuSyjaYt8go4svX7PJ7YT6Cgb+iAsjqNvqojLUNCzM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=c6PdqSHNDy4IScOv9siDfqnqqISmiqo8gf3r+gjA8dpCX2zuRtSX0KXDHDWhwh3DEVkg2HfNODk5rTOa6FSo55Hd/PqZinaQZPafRPbzW+U5DB6cTL7NV6ipUYXPlR2iomYL8o8nS3ZJnodKoaLEcHCGzqPM9RxZOhyV6cy3fcE= 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=DoHMwwRh; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=sR8MR62H; 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="DoHMwwRh"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="sR8MR62H" 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 61P9mnO7553428; Wed, 25 Feb 2026 15:40:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=nDD+SJdPeXSy8kBwX41p9UZwe5TP6F5b8bo8Fsa0BOA=; b= DoHMwwRhLafH6lg/1b3qsTZkfD4UZPyGhyQF3+gf14VNwbQlG5V72fSB+8AuICgK N1HpDRTthMP+bTUbNB2Kctn4LIl7zo3SOkiPxMEnFfK3HfoCxYIHhaqLd2PChwTy N+jBVGV9rF6+yzFNCLTVkpYPCevEb4q12FXZtdP0jFifeyOJ+pFSY8UfPbzCACGX iHvc3GXYK/m1YXuoTLVkNakSoyb7Gy5XYjMz6DYdghVSdHFQJCnDjwjj4lnI6pX0 FPvbrASyrXjeNSyw4B9CpHoyood9b5g1MxQXSuWry2XQM/G8QJpykg2rWHZD/Z76 ebZRKE8raZMUmaljOXQIlw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3g3pgf9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:31 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PE699H027955; Wed, 25 Feb 2026 15:40:30 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010007.outbound.protection.outlook.com [40.93.198.7]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35g8xgs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ubaglernFDuZPGAk/dORoy3Ce8VDld3pfse6DGi8EM5N10ALkF0yUgM4HFMWxCCzg0f3ktdwkgwUMLSA/zoa2H30Jf5V6CgscbQYid9J89aUcChVGHLVDkqCsddfmhXyQpBXy1eHK3/na2KaOkDqiiPl98pKCAHv2VqjBZcmpupgvEpp6fJxlt3PfY0egluWJBd9veMoRjZGcDFHmwe8nxbnXoChzoqZiQdebLCbmbQtRAlYv0leJVXZJ86v5BCGPfk5zGw1aSCMLMzsbpwr14FTbjS91l2tnB1+NbgHmrRGO142B5DqMBaLRdv0e7JbVTTBWXeyuZTplJxJdtLPcQ== 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=nDD+SJdPeXSy8kBwX41p9UZwe5TP6F5b8bo8Fsa0BOA=; b=jw7AYH4W8klU5qTcUIm/r1r/phHxLxQEKuIQYI0UAEV6lVkhcp2/QRrOwMSAX2xtITLt6gNLmeZwmEyZEn6DpGTUAMbqXtfjLCkmnl6KJ7oGprzfHNHacVhM8Qakc7mDiXx6LH/RNa8ywBIjiUP/ilUPkXvekwvG3BpjcA9gjY3QxnhbZFTny0F0pBdubIm4nj3pHSK9VLFoYCXsgdRin3uVQF9rj/5tb59Areo5eewtLvFwd4aHPDOCWqqFEwQB7zwbJYUPWbt6zO/iHZLUqhnXMm1cVvryVocb50qyYqDs1WlUYlfVvhj/OIe1RK1LwPU1DhLMaCKK5k8aUicgEg== 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=nDD+SJdPeXSy8kBwX41p9UZwe5TP6F5b8bo8Fsa0BOA=; b=sR8MR62HEvSS6WUKciOrWZxWR0Nv5ibBxeTPZC71Wc8Oqs5sUk3PsAWTN5mTtV6yrmfqKDqoGLr02I3NWuYVNC420WJ40yZg3Rnh4/qBHqGiyW6iGE+YnFpXqjBQZg6lj1cDRvN+QtpEM6WqBzfbiPvoBKESxDS/Pr4Swqx/ngo= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by SA1PR10MB6319.namprd10.prod.outlook.com (2603:10b6:806:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:26 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:26 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 03/19] nvme-multipath: add nvme_is_mpath_request() Date: Wed, 25 Feb 2026 15:39:51 +0000 Message-ID: <20260225154007.1033735-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P220CA0016.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:326::15) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|SA1PR10MB6319:EE_ X-MS-Office365-Filtering-Correlation-Id: 7cef83c0-50c2-4067-d30c-08de74843289 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: pAJIEfS7Pm/Wl3GBakEoCZIIJk+CWEo4e1yTUqo8MHttskx2WPcdo3p+fbtbqMg9BLx3dD40Db0VxUk7IPka7XYNbJO9FzZzEIBtts08uJm/+GkQyI3YCmuz1yFQKYknDFcHO7E4bgXvL0O8wZkCcXJSvQOmw5DJmNHqWtG1qLwqCel5mnzVavoCHrThLzGBb/6MJ6MUQ/5jv3BODHfxvkQt7GBJ44UV+mAbj/EWHkKym5dr3/cjs9u3CwwQ58Hd+tSHo1vX4f1eCLewmH3ly08rrwlNB+MDRPFzKkrcJnfbgt+3hYk5JQ5at0EXQzI27piBmkyDs4H1KKuXQHJHi0XW+PRTcwtkKKIvvKN/PYXwKfXOngSlh1mq3jJcj7I7zMZWo3iBhx1KTuUZX7YyV8OzVoGrsVrSvL6/pJBK3PZW0k/rvcqLA2FgFPkg4Td2P3D8OwZTnlw45onrCqBj0lzdgcJcwtdvr3R5ivIzn1C2az3614IYQB3T9c+bGRfwcyvLGPUzTKcCKBOYhbEq/wPSztF642QHgyj4jms3JbSoXbwumXCqJ+HcQT09DgcOZ9st1PVhiNUg1MFZa7crthzQqrmgR8HZ5G235Sk1UhO92ucr4gokPlcvXrv58KzK77hjWzCFV83ccCoGyZlsb2xnA4e4iCfHxTuOYoEAjRVV5Yo+W0TCEq6DmyjVvku3AkVH7o7TFbkC+BsDBdidsjQNnq/vjYBhPTD7uRY0ymc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/Felf+VvNUZ5IuCEG4imZaEeUk4R+DkPZWpnyMvl9oXDkFaLV7DUPdh1WvOK?= =?us-ascii?Q?R5wcerc+dok7cLduQgpTPkYDc5JTEeyN22p/4vXgAGRzS2Q+oC/AUQlL0Ih4?= =?us-ascii?Q?/F4LmSDdKlVvUov46St28WcQ3gSKwUApF5Pa+LhNkwpSnfHIt5EfxSg+KXoB?= =?us-ascii?Q?iFff+7NammpdMgRIssoi0Vt3OJd2WDTfXwvlWI7BpZvB4gAkBCdXus0wgkIM?= =?us-ascii?Q?tI9LM1n+ZDWRoC0f4vvz/xWflNTL0Qrv1s2+XPAGySpfOTfSusEcdbX3TDKJ?= =?us-ascii?Q?bQZPIAJy7P3Mn1iXt+OLpc9U9wNh3F0omuNnNv2b/rWUv+d8q/tfta7SDoBl?= =?us-ascii?Q?+S5tfQjHFkG+WhC3jzOtfUb1sTUIpwVNMAJTXCXVNjEwWJvcazhRJNuHlIF0?= =?us-ascii?Q?7uTDrDSWQGKwnjvXTV1pGylv+I8pxu9xZHhspTectVRmWTmKcQhQB0PUdEbk?= =?us-ascii?Q?m32EYbDH87C+HXLPtGHUFK6EvT2ykZyk1RhbdMQd2HHYqsM9hwyz/gVnN5p3?= =?us-ascii?Q?Fm/CIvm+M7jXE1+cCq5RWxz3flbVe7xD7j3dqjuhegeCiOc3AogW6Qh/HOdB?= =?us-ascii?Q?WslTug258SYPFbvhGBsO2l6P0Ooos5N9z/hnJMx/QrQ9nWxtNQc6jWF6jIEN?= =?us-ascii?Q?dAEvSBqjRAU+xXmZCwHdXtDH0iS1E8F/pHK0mxSLirebok5oxu6OPitrEOKo?= =?us-ascii?Q?SzMHARbtiNR8LlvKYArrIJZU4gi59wjmtFUwhibM1522yHUCZhiiwnoFoSX9?= =?us-ascii?Q?yTDlyt/lUgm8Qgoq+kWCAQSxTAjQaJnGmIVBrH2tw2uX+Zp2u3stXkXz/cjm?= =?us-ascii?Q?J8a+WyetninRnGTsYAJGykUoB9oZl1kMMXg05rpBOBpcj5SN2cuo7KMLY98Y?= =?us-ascii?Q?JgfSXVhoxLqzPLChEVQytw5mn5NrUYdw4zbdcCjSwiY/pMMQ9ok70zEqlEKE?= =?us-ascii?Q?x3v9XG7ptZmFy+anPTMvxEHjyxVlDoTjZnl8vT4VnP7HqwUe+i8mF5qS6NkB?= =?us-ascii?Q?f6mkKm0bf+xfM8LUjXVQf5LrD6ZIqAtd8S7UjLm3JLhN6MUGg4TjV73fHr0R?= =?us-ascii?Q?lyOGs/IUw4pg/bbtUP8/MAAjpELg/Va/GERF/lNH7yIaDIUSmYGTAElWqs28?= =?us-ascii?Q?U1TmndwEjVc4VznntAJg2OzfAM4eKv/lF1NDiH8ry7RjNW82b+0cQyyEOhYb?= =?us-ascii?Q?NquCSkbc8vqjLBVeTPtTaodOydDadA+9+cAIjUIiljDShrFJevSp6351jGAM?= =?us-ascii?Q?UogsWobn9tRVQo66Z8Dny/Xg5BJqYVIUNSEMIKFVCxB9FTE8trjqFJGQ8QL9?= =?us-ascii?Q?CcYaluWLHc7mhhPv7gPdeTlAEAosbEGv16ctwd1CwTXrFN7dmFu5BFSDrb7S?= =?us-ascii?Q?HrkAmkD9kAup1gqQ+HiGgkrqhW0SZzM5R+gwegdiZ66feeUlvN5ao0A2pV5R?= =?us-ascii?Q?j42F+1kLnfl6PvwqDkviFxtynC1UJSGpY0nSsAAzYCbu9ctD39P4x7puXBQn?= =?us-ascii?Q?t1PuOGRwwurCajgGveN3Nj2ILy+23vXf5jyV7AbX9ye35R+O81/OpBLQUAWm?= =?us-ascii?Q?QdLgV3k2dsRpsoXBVIvdAsUmX6TR7JiQxgjOMQwk7nOZTrofxDsT696+RnY4?= =?us-ascii?Q?nQmPzETxmlFOUCl+MNgL0+QRDnyAQOsFkjvvTLPMkCYrv2iUxFe2hRgpWoqb?= =?us-ascii?Q?/HZLQoXipWb4WsQlsSc9/fGphzRUgI4LuH6S19LlYSuQZbhwhaUJ0zNSCse0?= =?us-ascii?Q?npscIBiSVhyujXYGs1IFgbB7uglMeN8=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 73bH4UKx7lrpc1ztGTZvhq9OBtaURQcuMbEhO99QBJ+TuIAsocVo9mJnbcQ01eAUPyMQagZsWFkAfx/vCYC0FMTsugngG6U43hjEU86RWEgJtScTFFNtjrjk6yN/8Aosl3+jzrNFhlEy6fgYt63DkXWgRRE/vJIbJcJOu4bdzp91+0npy7MfzA1zIGLtF2clhgvd/Xc7n8WR6B+z1qdc8LPx9UhtEuZvZnUNiIK+6VuUvI85Mk562ecFWA6ZeY/WKqMS0nTEOh/vo2xV3506QGjeOKPdJF7qMql3MVtnLmbSaGBinYuMuAIYBTIXw5V2hKIASOUku/y/7iEXp5sCVqnUwN1mus6fZix8wlQzBohG5GcPaOCknznaBsOgizFzqn32tUaunnFVkJADPdTbN16dDb6t3fJZMMy6eDDBQ64LuD/pvwLAqmrLFImC8rqCG6QB/tgDBT9TFo6PhSbOssIDI5jy97QhZyeLk9uhoOJWi6l3tLlfr3kytpUIRORvNeb4uWvrS+eqx8V1OuLL5NkBcWINi3eRD3CPqRn7RYpYoQ0lrL+x4TsRg/hF1DdXrTVGhmydGhkNoDLnhYtYERI/4puNboSLXAYnoX6L8OY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cef83c0-50c2-4067-d30c-08de74843289 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:26.7640 (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: VKSZUal/eY8KT1hic1lHNKOo6FsMvSRC7NryizjihBoNvS2hHYZDweWXhLZZEqBRpZKHQY7ZZQ+SmMBcFV/yrg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6319 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=Y6r1cxeN c=1 sm=1 tr=0 ts=699f17ef b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=k9v3cy8zUit5vjCvc-wA:9 cc=ntf awl=host:12262 X-Proofpoint-ORIG-GUID: MAp1_rlE5hZPkmR1ZBoass3TxSRMD0fK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX8WLRFuk+iKb3 GCxqRtQkeOrtcRIALFi3LblOTi9ZHbJYtD4NL8ZtauSY99IIWbs44lb/Er/cyMV6zaSQGh2msl7 ixDyL5ZZH7HvXDOC+gBNKLiOGBf4Z+POAjJNalL8lDMcWQpA1a3yf/JDj7ESkemuWuZKnLyPXMq Ql/s0gfNpHDoAow6rZlJafYmvbHnfKWROE//WvazXf1eolcaJTS0Idgha3TZk2fCWwwxskDTza7 LhDYfre4QzqKwGOl7mmdWHcXeUaiziil7Q3jmcE0vFdh88OobxgSDw1pIXyKc8oFdKu9PCBYr/n QdOI1XxGtE+dZeZd7sxT8DESeYXhXAIOE7mt3GGi+4RHKw4Ag46lnFzxl1bAAPGSFXld3lEV7Da TbEBUjoMF/pqo6bUthT7agm1090R3eUyQBD/eREvlB7qkzyGk++ptvUqXxEVRZ4uSbXis+gW/7g veiNGFykHiyhuLKYlZvgf20keo8GjCJ7wZyxrL2U= X-Proofpoint-GUID: MAp1_rlE5hZPkmR1ZBoass3TxSRMD0fK Content-Type: text/plain; charset="utf-8" Add a helper to find if a request has flag REQ_NVME_MPATH set. An advantage of this is that for !CONFIG_NVME_MULTIPATH, the code is compiled out, so we avoid the check. Signed-off-by: John Garry --- drivers/nvme/host/core.c | 6 +++--- drivers/nvme/host/nvme.h | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 76249871dd7c2..2d0faec902eb2 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 (nvme_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 (nvme_is_mpath_request(req)) nvme_mpath_end_request(req); } =20 @@ -762,7 +762,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) && !nvme_is_mpath_request(rq)) return BLK_STS_RESOURCE; =20 if (!(rq->rq_flags & RQF_DONTPREP)) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 397e8685f6c38..6b5977610d886 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1042,11 +1042,16 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *he= ad); void nvme_mpath_start_request(struct request *rq); void nvme_mpath_end_request(struct request *rq); =20 +static inline bool nvme_is_mpath_request(struct request *req) +{ + return req->cmd_flags & REQ_NVME_MPATH; +} + static inline void nvme_trace_bio_complete(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; =20 - if ((req->cmd_flags & REQ_NVME_MPATH) && req->bio) + if (nvme_is_mpath_request(req) && req->bio) trace_block_bio_complete(ns->head->disk->queue, req->bio); } =20 @@ -1145,6 +1150,10 @@ static inline void nvme_mpath_start_freeze(struct nv= me_subsystem *subsys) static inline void nvme_mpath_default_iopolicy(struct nvme_subsystem *subs= ys) { } +static inline bool nvme_is_mpath_request(struct request *req) +{ + return false; +} static inline void nvme_mpath_start_request(struct request *rq) { } @@ -1213,7 +1222,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 (nvme_is_mpath_request(rq)) nvme_mpath_start_request(rq); blk_mq_start_request(rq); } --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 EBAB73E9F8D; Wed, 25 Feb 2026 15:40:44 +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=1772034046; cv=fail; b=AHvijllfUGohMoO5kd/WZmz0TqU8pXWNxP1wlA2KYAftJa+WTS51LbPojocr9Hc8nLhHEWJAekBdFLV1LolRsXXUVqBG+rwLhZhi48q9P1IzMgj7sLkGgQVjUR+40mw8qWPqy1VyTiGwBquZddL/ViyY+kWBlQjKcV3rh58E/AM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034046; c=relaxed/simple; bh=f1AOHp8yqgubT0tFiYGGFno58A84kWfEJ8L1DxqXsHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=L1aEOYXmQudGpzbyJYHWaRhGB8Ak68Q0Cuh1FKNY+4NfciOYYbqk8fzk77lWGQXsFdvUNk4xBngoWEcjWHREanznfKaNBTxFDQu7ESnIAz6Y39cO/lEqa/budWvDsE+Ig0ZPMC4cd7pzS0l90bpw1du9e0DeK+kZi9HDD0PpigE= 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=BpqhEe1N; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=r83ZQW7b; 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="BpqhEe1N"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="r83ZQW7b" 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 61PASJNP817877; Wed, 25 Feb 2026 15:40:32 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=cP+zhrZkUAu5wNZbMTyzGLTQcPnbQJbSBS6B9u5YGX0=; b= BpqhEe1N/lTTSlfiF8RE9Mc7bw3M+6o+Qop6PHmfk5WK2H7AvNytLftasnc82zja LRxnZKsUqxkZXnP7fTHLMJjK1EcwIPaYC5YkWxXydu1oVe9+S4YyTizeHJPuB00k I0YVfv08TeoyZM9vkMuAHxiE2HjHAygXt6FxJwr/wzCwQDSQIHnaeDeTmK8Nurum 60cMLAFqTy9LlPEyvODXAmNghTf48+va3fLXfvKzda9h/NMwznIKeCE3n7zspqkd dkfj1tpkqH43ggMB5WfIuF7N0FG+p69MaF1u3sFBPoiVRS7JM0s2IegWiR58JXbq aAbcPF4W6wUUVYp+cM4QoQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areet7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:31 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PE699J027955; Wed, 25 Feb 2026 15:40:31 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010007.outbound.protection.outlook.com [40.93.198.7]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35g8xgs-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Vl0tAlO8Evwnym0WnUodbuqyxAz0UfItP8XH+ZxckhcRynEGIrdVJy49Ov4J+82M7hoWA1JcHQRb2ZND7p4QHv+nlCKlKexE8n5H80KzyZxc0ALfyPY6Esg6KOf8lfqkb+GacWGURvzCtm6okyDereiuxoqH8CQ6qWrJTbdv1VWDAKalOd4x6FJLz4CbG1d24xgtNuSRk7MQjFKbJv3sIjhbd4WlxU3AkQlMoVjitF8H40y+/gnlgM2cgmfjJPktrk/fcupQLBm7LbQWQMbGsq2UmdysLnaCdf5sfeVgD57ewYHRYV5eReIo0dW2TsiBfRXdiR1UqolDiE17BoBBsg== 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=cP+zhrZkUAu5wNZbMTyzGLTQcPnbQJbSBS6B9u5YGX0=; b=Zc+OcII0ZDoO8ESxNeVUqMPjaAmGlu/n8+/EdTTCnS+FcUTQp5Y3T/G7mhjT5GLEuvZN4g5RNLWh6ahqeMsEINDzE1MVzyZ8jZN841MbXVtkE6JWMkqL5BCa9HvbezRNYCBP2/PooCfY+JRGdtJkh9mRffAz2uRs7MkiuSP7+HSJwW3LDqyPpKbrSSH3ZsuwQRD6/ewb5L7P1Jb6FO9r5BXbKQVMGhKGWhikiqJgTWxbfpKv8I0D8Na+WgAFbfqVuSsVJ1l2OJzqIq/OEBw4OoTpKN0FLdJuTP/sarDBBiIz4HYqeTXvhCpt+MdYgiwEY50Pq+HPRhW+FtFl2s0Rug== 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=cP+zhrZkUAu5wNZbMTyzGLTQcPnbQJbSBS6B9u5YGX0=; b=r83ZQW7bmRK2ZvmGUWkscsUlaPx6GdGXn+2n63AVAhU8x1c9XsGxCOQT8nfRMLlRHgAx3qg3NvC9MgwA/2Tu59bBfhmJLnJZbm1UePIq0vu5nWL2s4XYYADD/bL7+PfOzceV7Rlh3OHNs5uTIZltOQcBtbsUrct9C+vx38khj+o= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by SA1PR10MB6319.namprd10.prod.outlook.com (2603:10b6:806:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:28 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:28 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 04/19] nvme-multipath: add initial support for using libmultipath Date: Wed, 25 Feb 2026 15:39:52 +0000 Message-ID: <20260225154007.1033735-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P222CA0027.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:2d7::28) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|SA1PR10MB6319:EE_ X-MS-Office365-Filtering-Correlation-Id: 9318d984-6d92-41f3-9377-08de748433c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: 4wQkNAWdc0GZKL9Q3GQw7BtPoVxCkBIiDH0jRlzf+h6v9xzam5KrUi37totqM5TSlkPsii/MEcO9+iFLlzY8PapXynd/YfjoiglEpZeZrpCXcQvMRSKIpPV4M/6UEMdAwLA1jF7FGrDXEWdYOSCigkZNB8dCb+FkYjoYIpPFWVxwIjt39h4JuEd06q9oxs9lTGD8soOyYU8kjhHyR2XnVyvGYvZGNyUgGMPhYT1QGZ0Rltdv9BPZa45ZMcgLACtijscLK1Zij1l/SZRzpvTYesXFHxgYpJLE1NTPOFd561s28kUmPbflDM/+rBVMxdN4VZtJdtpPyR8p2cVPHQfLFlvOUzUIXQZ1cWhe6U6UQ03nqjNqAt32j8op5QgHTzD8uq3nVCY1aLb7gly+1of89lrQ8kx/rI8//5hgb2BZLwU5fjMifcdO1v66181MbJzgOokULbzgK3I83TIx9+edlekMDA9w6/2t/Fy3xweQblk+l1F1Rsyi6nbmbn/nFdFM7+QUsdhFRes6AHZsAxowZGhFvzP5Tm4dFQNh5CaqIFHjlGNbSRjvuxbmQ9WWPDj8QUBaPQSfJ8ARXEWSp/L0LrPlK0e0vANNp9CnLuAPaaTbJrYBZSZxU4AkSTYRN+4+k+4U9K5H4V3lHEQoDJSr8YLnIdzGQ7GLI6ydvU8KtvUVjIQd456B9Hz2e2DuoAyJdT0EsMqHTDxXnQcMjRj67glyYPoByzNX6xGAYzcDXFE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GQTNamHX0NAymZ2TKI7zNQkxK/wmuR/nprxQS4KZes7cWH0sO1p2iWNaB7m9?= =?us-ascii?Q?/icaet3iKS6vNoA3YjtDEELL3Ha6Fg2SZr0t4kB9OeCI9xp3vLOuKzzLjv1q?= =?us-ascii?Q?r55G3AWixklGupjE3t/Ka5tbsYg8asozEnIdcT3xfpuEDw2X4Eev08OPrl5E?= =?us-ascii?Q?V9e6niBmzWrIsiFSy2y9it9di5kYlYofaLFoWTEPDMm2pHkYWhoiEva6yIYE?= =?us-ascii?Q?TPAh2OExsCTblh9LA7ffYaQ00lsQljx8EsoxEyACMucyufATQnEzHS8yVikn?= =?us-ascii?Q?b6kFgLWRJ5FqEREfir0+I9RCHC/BVPOFJAUsRbB7wC3+Bv6W5y4mpL/xCLyw?= =?us-ascii?Q?FuzIjAlc9jfZOIq/TK+zADvMEh/W5169HFTx2Ft6YEgTq8ynbxP4jAOZ/Ova?= =?us-ascii?Q?1+IIaYnfSSYgHdVlrtcWXgF+t6NceXPVZUHe4ZKwp2a7OPjY/2me6MdDdqxV?= =?us-ascii?Q?1pBDsxJtU/1wsBZ9pw0HJiwpL++zWImR+PQylXPrxT7cQbSC3ISOCFP2H/OL?= =?us-ascii?Q?1hXowul3VwJblT3RqedMNW2fIrO+LNAoLtnEVmgP+UQ331c6R6tPOBVBq0jz?= =?us-ascii?Q?2FTDDXy0WLc1f0Bw03djvXd+0Gy/k/wEoQ+JDzHZ64ZyyZcwkwocNbTWgeqS?= =?us-ascii?Q?cL84AJOtS0MdfNHxevPO6kQn1f+H4Myi7CRU/uMqQbCLcPH/cKt/HbLb/ahX?= =?us-ascii?Q?l85p6TuHJ1uwlV+wyS81f/EAP3uH6uFMCKoUnSjuxFX9aJtGYQa+88AWarMD?= =?us-ascii?Q?yrrgU2XkBEp/XhiP7bjRvqbC2j3nZiDdkiAj4NH3M103rPVppdjwjElVDd5m?= =?us-ascii?Q?4v1G3pZ7n2ClDapvq3/CH6ZhAzjkAi+iRTDdiF8wADEJdRd7yx/8TG4kwBu5?= =?us-ascii?Q?Ha3xnfbP1XYVeTD0sdD7ecCWZEVqICJLYRO3Ha/4oGBvrDF9W3xsDBMmzPg1?= =?us-ascii?Q?2CJkQRUV+RisOHH9raBVj9/g4c4/6pLqOm0RWavOIVFeFIWwtyscmOBAzRMk?= =?us-ascii?Q?GEE/ANBeSXKdg4AzKORG9Yz+A81O4lmtHsQ2N9kmQT+wOHGvlMDnu3pYWS2R?= =?us-ascii?Q?TaC52lJny5kfh/mJEQ9WxIQN6WtqvnkHtLzcUDV4YBggibKu5yP/x+heTFZ9?= =?us-ascii?Q?SCEaNHI0IVGP8JR35XTnGcRECEjTMy/z+87wra2DRuzRmpURRnCiR/faEnys?= =?us-ascii?Q?X/vLda1l/yf+yfro5tKWgGBldw2PbzUAi3ftBwnpx+Sf9hz7KEFWZ51JNXhb?= =?us-ascii?Q?n6trycOrkl6dOUyTQ64G3D5MC/M3Hv/fqaORqr6uSZu1dioIRqd8g/Hb9eSK?= =?us-ascii?Q?MMRyuHCmrrwVsF++gzUk/NCzRsU8Y3k+lUkN6QWklnIMNrCC6h+EHX8PCuG4?= =?us-ascii?Q?tE3vFumfTaEshnE0AiMKLxPfbW3eyB3AML+B18j4b80MBRLsx3YTY8Yyjvec?= =?us-ascii?Q?X5UnAwWC+LgYrKXeV7hZsqJ5xMcmPLdeqfxMRyk1uJT5XRNMXby5mLOoQaTg?= =?us-ascii?Q?iTIUE/okg3iRl0XabbB/mLxKsnx0dftBCF3GN7nH5aBAuuTIzSATl2jZNymT?= =?us-ascii?Q?ItNPsPp3ndbq/j+tawYLYqkVhuS3tQpR0ApEqB84Up2NHoQrBCGsygHrnBIn?= =?us-ascii?Q?qKp37YTrtG6pOirx3cGE2/vxBLMo1jqmQ6mI9ZVOo40TCkVUymYEyqKI9Vk3?= =?us-ascii?Q?WxLNg39JP1gieX+/zdaUhwkmKnNIA8cfvibYC1vmuHer6lu80r8ESJcJpc4U?= =?us-ascii?Q?Lfve5V7paTxaw1om0NvLm2Iycs/y3Y8=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: +SuGtYCRX4LzE3pxG5QO3V/XsxRdqclBY6Xsr0ClNJasTHqbTamU5g5jasAkYI2PsdIC8mM/8S3/BVm6p/gTeKyZ9j+cxLINMHorK6/8VewEJQD9S62YgPbhrH+7E37mBijGsVj4txiymSlL4jdHVVGLWEjeAdI0mGwETHfJHtb0+CLlwfnbwEfuGfvhCiaPvxPb4EZtna6aviNK6rHgfg9Bjx8N76oBScHTk3Vz8ocx9KZcWScYC/vAlq51ZnVKuaQzuRFkCocrHFJVw78VH22GsxaLRoz8TDdcBHM22fLkNaiamn0WCxGXY54mlGAB9PZaj4pIRiqZfyfEG9E9oN/vXiG+ofDPfGXo44uJuRbTPbOA4XRtgK/RAw7fo/CCZURWhVfwuhvPVBaee/wDpMxpeajisoUkoWyyP6BHS43bBq2KD/uzD35wvcbVCtVxF9shCkkQweRs/Ao1QofM5rRStUM7RuRUNp527eVV8Qo6WeIJ2RmchtF3ZiZA1PD2NcO782+fk3kSEzH3CvCnj8tEMr2nV9zFWmhd3u24FZsPmQXtlngoZOCrWh8pYLjENJzibHDXmcjf0VPLQzD6t7yqSLI4idD5OPOCnulEHFI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9318d984-6d92-41f3-9377-08de748433c4 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:28.7804 (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: jyM6ocHdecET+V6l8ZBnXUpPZsVB9gLQY4eeUaM9nPeg75kLmvGZ+GylZCZMQytFMs9uLQLXQ87ha310AIH+Uw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6319 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17f0 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=iqRKemep2BTn628LUkAA:9 cc=ntf awl=host:12262 X-Proofpoint-ORIG-GUID: iav8nN_hWX-yCnVDNtzHnLfNouMjT6QJ X-Proofpoint-GUID: iav8nN_hWX-yCnVDNtzHnLfNouMjT6QJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX16kiOx1DQ6sz ZxbYH2n/qb5uy9fVur+sUM538AjVYuEkjuj4t7l6Yr/mm2BVwpNv52XWHrzKTBciZ9GkFO5mGIB eFMAgZZ4qvb5z4hdPNc+PN9vSJB+LY4L3KOgqfdUtc5U81nrrAaaU19Y0P9E83SAZdTkpuaTA5U ZDECDwwrHY/DdUdDmh7mI4jd6XpXA0o9v0sGbdiMS3pj9xiv7STPNaCLb6euUUVGMXipm6F7cki mjL2LJ2e1V06ih2cgzM/I4ogCZDBAYjSm2rWHSZlPd5Ukf9ReDXWkGwIp4iAnga1ZQlf3HL6HoL aQ07OOKYRsVk0WKyadTjznwAo9ZqREVXoQJmrw6/mvZttyNZYNz+L3E1F/RJT1xBT/w0Qf5zam6 W5kX801lDI2AGE23FHoFfRMHzJjCLZT342rTHZzBR3QX2NC7WJo3RF7k41zkJdk6A+Bheezlqsl SpWufXhUgyyuUBZGtT2KhNuXs1MZXHQ56Sd9z9yM= 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 | 6 ++++++ drivers/nvme/host/nvme.h | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/drivers/nvme/host/Kconfig b/drivers/nvme/host/Kconfig index 31974c7dd20c9..fc6e75fe8cbfe 100644 --- a/drivers/nvme/host/Kconfig +++ b/drivers/nvme/host/Kconfig @@ -17,6 +17,7 @@ config BLK_DEV_NVME config NVME_MULTIPATH bool "NVMe multipath support" depends on NVME_CORE + select LIBMULTIPATH help This option controls support for multipath access to NVMe subsystems. If this option is enabled support for NVMe multipath diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 0d540749b16ee..390a1d1133921 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -12,6 +12,8 @@ bool multipath =3D true; static bool multipath_always_on; =20 +static const struct mpath_head_template mpdt; + static int multipath_param_set(const char *val, const struct kernel_param = *kp) { int ret; @@ -1407,3 +1409,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 6b5977610d886..c48efbfb46efc 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -555,6 +556,8 @@ struct nvme_ns_head { =20 u16 nr_plids; u16 *plids; + + struct mpath_disk *mpath_disk; #ifdef CONFIG_NVME_MULTIPATH struct bio_list requeue_list; spinlock_t requeue_lock; @@ -582,6 +585,7 @@ enum nvme_ns_features { }; =20 struct nvme_ns { + struct mpath_device mpath_device; struct list_head list; =20 struct nvme_ctrl *ctrl; @@ -608,6 +612,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 Tue Apr 7 12:21:55 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 1C84E3ED117; Wed, 25 Feb 2026 15:40:48 +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=1772034050; cv=fail; b=GrLcQrn8ZSapvtFqzQpcd7dCaQd6vwxaHuK7scRv3b5KuUX3TbJF7xyvoZM5vB2r55lEkeTtiMsRhn99Sq0qVecpyPZ90sZTdBUZ/i9y/gFprUo+t7KAYTCkBCXBOkCXoP/Giq1L5dV1ZRdAVAfEtIEB/dWhT3MwQdRp4sk2EOg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034050; c=relaxed/simple; bh=IhdZhA/HEfiDtSSWOsFQyw8WiujuCLdUOU/OIIJYr7w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Suno+3xQcQsGWJBF6LgitVMomS5R3g4yt/GQX5wJ38fGmJUxuWxUDWvWjafcD8pcQ/j+m/ES0lVvk2rbdMArqAJ41LF5PO0YS8k5xLVpYkr/6E8AID0SOOuNkAyJEuZu10vUvn13UMacH7kPyaTzPhdgT+zvsLGAo+MiXrsZQss= 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=sPxXb0Q+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=oqFT4H0e; 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="sPxXb0Q+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="oqFT4H0e" 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 61PAjt7a817332; Wed, 25 Feb 2026 15:40:36 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=aordF72PD6FGSCIkzddrvVR40KyApVMqwTvKBk9yX/4=; b= sPxXb0Q+cRbUmVlwul9uvU1GHoPzC8uKV4KgGhdNXXk1yYVxp7S2xVvzgImuovm2 jtg8+tkn1M+ObiUNR5tZCHuH+E4f9Yma74itN6w/a6HvqwIup4fYK/y9ZSMAV2XF Qk3Gh5/CzO2/5pxrRYT9uev6BetUFytDM/2XWbUJ3TTk4+FyosZOi9/sgwov2tmf VBKYM8WZ59T7rAkjwI3ootUm5LuvzPWlhmAvS7OsXn+/37QH37TZNXdcVH5ZuZ59 LJtWz5SgtN0MyqccK3z/okWAso0j0Qe8bCjhZQLlyH5TfUNZGT1+/n+TWigNGho0 Snk/q5OdfkRFhrHaKiVFUA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areetd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:35 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEtRbs012506; Wed, 25 Feb 2026 15:40:35 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010036.outbound.protection.outlook.com [40.93.198.36]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg4s2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z6WIcy8drsEJ8EwMEhby1zI4wIhzYf7xoL/cFgFvp/BOBM0q1u0CsXKPq470MPadc/J8xSzi9XSIa4SJsEBqja4FXvq4v+LGk20VHNdQvbTGfcXefcLA+aFSIprra9xSQZBCKo9LFKXe34q2bkzP/WGfTzZ1NXu991cWkgL22DcwiAria0Rs9JfhZCWsSFrgZlT4c5yJIcO12jONxRWhRNOMwYQHkfuMpdtXnzkR3dPQqQliiE/2ZLhmjpH3MzaQIYU752gaTN1yii+jly2OlWJjmJszD93fa6fIIF3/D/sJZkTKnfNRG4X2EosYJdoxLg9X7rKgMJfKm9M636Gs7A== 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=aordF72PD6FGSCIkzddrvVR40KyApVMqwTvKBk9yX/4=; b=zOIB/MdZcG9xtpvn6nGX9zUyYtL8axo4+4paS68YDy2GLG1HTTfJB0nrL4mDWRK0ULy0/H818Vpld9PQURrfxVJtKsqn94Pt7XSdQEk8AIbxq9UK5pGUbVL3VnXwodmHOiQqV57Bo5q8h8J1pYluJoIgnTvPa9zuT9CmFh+asFRukJO2EjT77dDik9iL9rKsx88eziHRwzAtfiaR26QZfGJThWz1AUZ9V50fCO50RTEnJcUM9XC+CvZ2Z+1qxrXS5wK3uaa6dO6ujlLLoUJ7aU+3a3GBG18XZAIWIrXxnnZOWZwGXcE+L3LRBVqyzCPPjmyAmUhe/iVyTwYa3r41Dg== 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=aordF72PD6FGSCIkzddrvVR40KyApVMqwTvKBk9yX/4=; b=oqFT4H0e+AScqd8AcTbX5/9mtEQVEL/mHXvLWJ1osO86SlI2JrdqR1ctpUftv5GAXOT0DLVHt7fu4x+419fvdjxBM+h0v6PY9MKnqBy2SW3pITNdKOoZ/P0SXDZRq1/LHGJKGT9yqUbTGnGKTgn39EgLBDKYZ38dtYS5FdCtYAQ= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by SA1PR10MB6319.namprd10.prod.outlook.com (2603:10b6:806:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:31 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:30 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 05/19] nvme-multipath: add nvme_mpath_available_path() Date: Wed, 25 Feb 2026 15:39:53 +0000 Message-ID: <20260225154007.1033735-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0PR07CA0046.namprd07.prod.outlook.com (2603:10b6:510:e::21) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|SA1PR10MB6319:EE_ X-MS-Office365-Filtering-Correlation-Id: 1311b1ec-5e17-42eb-40c7-08de74843500 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: zpeWdbxEhR8cGjFnEe7FX3jav0OulvzurJ7Isx5JzBDBb+uGh1o5d8tC1fdzHjpyOfgYwntoxX2Q+gqHvgQD0W9I+h19ZGOmJ+zPyJZJOcs2JqXR6iJT63DeNCyjXmYZr8VqYdvsEYMejSt4ilu3JRcqr5PiqKzpqUlAziYY8Lufev6UHZTWbKmH6EXPA17IqO9z0MmQmJBhLAVMEB7xNIagHOApOyhdF6YOk2rJbW75bh7YBLkShZ2LNLKDmtCDVYeO8SCCcQjDGC4kllVtMmq3GiP4QnGnOFioXMMGpNT15bgVmgKLJ4BK1ws6yuboWr3IC8lNoEjmQFIHK+0AqXGyp4mAcnoG1W1aOGmZwe85xwdvBYsnTnd0D+nJNzFQI2lkhcGjBSZnPE5aNHH5Y9c1MhxwyL3ATiUNzLWVwMgl9R2iafX/VW+9q3hIf96lhnhnP9DRCi3otU5CHJIBRpHoxu4r4Thy8S7+wKtEG1yasHxHGqjHJqBUiGN08bzdGwEoanWh7WHCKJnYgmnsFblVSvVkNQ78BlhOvgurWlPyB2Lf3rTNCC5JEW+W2Qx6fl0R9HR+wX9/nDxiPRs9DZj0Vu8kdP2DRpM1ELLMIw9yZA/VHZBkcFhxWx8VV9VbG3L93rBzRaj0tEJZex0oWEP+R3vhRhTxxhITDB3ceNrGHmE2umHranrF7KqIS10VLO+VVLd96gUjAd91LpmCpATUD95IWE9BFp65Kd+4Qjk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ylzWowfPzc32NpxQDTe7aVRFdF0w90v60sYHZKUOZhj/Lm+vxTNA3a7Hac3S?= =?us-ascii?Q?ESLucjotreCPN10Do337NVq2du+Kx1YNBrC2eLQAMYx+HZyRAJ4Lsww9mS9E?= =?us-ascii?Q?x/U1BTCv7kPSgoXj70DRKTuft7YcazdVZj6znhCpXlvlztTce0YNF0emmx1B?= =?us-ascii?Q?4nOaXtvseh8XErEBg4m6P4i9r93Urgg5vN5gVwTAaEF2FJeot1KbFqTqwyD7?= =?us-ascii?Q?dxjQHZ4T5H/Rl/NEe+1fmfPxlrbGsDyzsZQhznNJvWMfBm46jwPgU1qmqfiz?= =?us-ascii?Q?jWyOvgniM6Xy69VcwyYdWG3+Rh5bUfYY6m8amcWAj3hIHLAUeCMlqL30oGNQ?= =?us-ascii?Q?mnhiIDYNp8qoM/6yZqXpv6tgPUIXU45xQtic2DVT268eORrzuFL1UklT3xHw?= =?us-ascii?Q?7I9zB+ix7TYpO5YIIeP/DvuEynFKejBQ2i/nefqDWFKLEyhj38fh8jayR7zT?= =?us-ascii?Q?XFZ4W3ya6OnPC6VrMTb50iHL37lNtTbspMPRv0fdZca49AB0J78fevaU68MW?= =?us-ascii?Q?gjRMNFEqwdsaldoRxg0VOveVG5lUUU73TZ2ArCiHZOZ9E/E+w/wEI4E906+a?= =?us-ascii?Q?81adsO4wZxyfet1PRTtYz8jiZ1lS6tIws5WGLLCC4psni0m8SUC3s4ZJAjWF?= =?us-ascii?Q?JMLO0i3jC10p+oyannN+XWyN5wweq2Q9ZsddEbnNsufjRS6WZHCHo7M7mjTW?= =?us-ascii?Q?a112VowQXnpRDKUEoGz2IL/iTbgwU4PINHSgyxA2D06hmuKfEnLQuC12MyyS?= =?us-ascii?Q?0UlbrUIFxE3XmDzm0qWfZPJENcqm9gc4Q8tJ6C/j64qEhQoTx7hZuhz4e8wR?= =?us-ascii?Q?qc1eN/HP/nVyD05GBkL+c3dWOLDVFcdat991EhemCx9+AuTsJeFkRsuvD1q/?= =?us-ascii?Q?q0VsfP6LVBBz9U83DYy+W4U15GghwSLUvdEBjIkP1Iu5cncRREGQKyubwoj6?= =?us-ascii?Q?pFjvHS4jcJmBbUplLrspinpbDhVYEOXF/J4789+IXarForw7mNZHy8Odqod7?= =?us-ascii?Q?1UzqgRxOIT9HuxNA4qxm9eHjE4lndXkeuJIGlqwirMd8TwRa5CjqijqkT6yO?= =?us-ascii?Q?/tTcLJqCOw1OrD9WQnRfSBiey+/ky/NIX0P7qh4+g7iN3yqiZQhU01FQ+rmE?= =?us-ascii?Q?FSaRBa+42Vz0Clg6Z8D3K98uO15sppIGLB+eRYcPVISnfe+A+hz1atd2jYKa?= =?us-ascii?Q?SLq4uOmaVsxoU+7acnWdLTLwjPE+sJq1Ik92TO1n1h4NKjzuRCsQGON8Bfr5?= =?us-ascii?Q?FIq7c5BglUycXNtUVqK/d0Xa+uvtiC/Mp7aVvpiY/ACxPa0anKkd3o1QIHyn?= =?us-ascii?Q?xslhyhAwHD0W95LR+EMx7XDNM5jOkfYZrFGr2OovxTC8te1hRqdQfCSMUe32?= =?us-ascii?Q?DpELZ7eVMfcMQzD6KnQRLmhComSBNzIFjaR/2ARVZtcose9VSJctEJ4kI9Un?= =?us-ascii?Q?XhY5rHwJdVLyQW1wqIRooIlhjxGKlDMqXUVYbUg4xZilEfYLTFRumJ+PsYM5?= =?us-ascii?Q?yKHPcaWyt7hf3ykaYLrXDnKkoi8IWYbMg6W4ZBadnTKHDUXSuFhjhtG/IkYJ?= =?us-ascii?Q?lEHIQf7NCmO69pIUvIkAUy/2C00sgv/HV8MiWIJy+f9RCE4UEvncpeQcOTju?= =?us-ascii?Q?1GWGZ0lntvBx2sKNgHE91PSLVfi02lNPYw9vabayawaPyfFEUVSZhpB0K7ih?= =?us-ascii?Q?RjuHGB9F5ewzyJfFCV7P/XK2spdc2++/YqY/AwCERWfvtAiv+KAJ0yWJ05e7?= =?us-ascii?Q?0j4QjRnHt6pWhcyC7IytrTiGF1IVk1U=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: GsBCJ57uv42XgcHrJv9dTJPLFX4rkxBItk68+skdkvxcgRZRigSClibf4zCheYUBp8qrCO/++mmLtQTisxgwaY8vwt8DkbjGvE9n/oItqNX/vB92y1fCWA+3fAsCBV+TChbKGEFP3+Z5RsNXxRZT5HK9mfo451vlpgms1uqEFdsRnRbztAcSrt7ziSfJeVA/JfhPRh+m1YTyTVGILidIaDVg5+vGPrNsI0JJN8kowjHTALn+OBjFQtKf+zwiTkfOH2Q68Jmm2iJ5fgYvR3NWanAGDc9tZnndBiehV6UivsEz7GFj9lpabPZ17wTr3pBJ7CTkLl7/+CEyeuAyCIjgOGZ1dCtIjXzMXtlw7ew0SW+6k1GFud+69JOKYTpyajKhs5pTUvR1q3lm+Hln9HW6jfPxuMA47sMUwswR+AxDYphB8tiVM5Kb9LWXIjLnA/zTer3dOJu3vhEKWZhKfSvGjKtG6hidmvep/wsQA+oy7FX0+C4Noujzh1x2UH73Z3NwsWxgsq5l2Yoejk4PWXuIak8w1asTGkdd/EZrRrg6PVE5B+xBFLQZRSkCAnFwrW+jtp/zL59l/4ZhwFxVIm8s5PZmzyWuUMCrifJtx5CCwUc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1311b1ec-5e17-42eb-40c7-08de74843500 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:30.8464 (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: oC/I1lhPAT+7IzkrCurOe9wimZuP9/KWBPGZdZee3yXn6nfcnTSpQRB3f0d42BqtI8QPlHbhQ3726VweHG3VGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6319 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17f3 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=WJg9rLiHYWik38eusUgA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: yjRj6ZthHyvAsivUWeTj-94pNoXKgD7s X-Proofpoint-GUID: yjRj6ZthHyvAsivUWeTj-94pNoXKgD7s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXzkw7UMU1hh7u 8gd03YXsGSEzjGTEFjfWWa24uYvfeNEqNSOfrAo48O4zhnd5vqtScqRwFLpqxLvg+OWwhCS5MM2 8wNWHRY8ie6OV+FtgzddEhaTWj3t50NFe2ZFOqRYm8PmiK80sAKrV0ow8MJlPM8+Ov91XcYFA06 hYyIvwoWF/GHT1k33Ec1DUC2ueAyC0fA68tixlPUGFjx3lWznVkiv2w2w0i7yuE4dz2PUEG2+aP yasQmSS07nr2E6erVWklrJZgo7QkTFnPtDs8BvFE1LL1sVZWcej03qgW5CWt49FkvSQkLzIhVwF yTUDbr3Nv3VtCj1zjcS/+sUz0BgHAanhwJd+aihaWamChvuK2kOPcUsW7Iui4JR9raFThEo3QWN y0WM14kcd+ItK3TpgRLF0OSRoN6S/EzwYO/c25Jyn2fz345knziDOZdaqfwB5Lr9m0Tlr1s61QL r8/L0Fti5YBSFsh5Pj2snQquov67c6Ke0Q/CgeDk= 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 | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 390a1d1133921..e888791b8947a 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -510,6 +510,26 @@ 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, + bool *available) +{ + 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: + *available =3D true; + default: + break; + } + + return true; +} + static void nvme_ns_head_submit_bio(struct bio *bio) { struct nvme_ns_head *head =3D bio->bi_bdev->bd_disk->private_data; @@ -1412,4 +1432,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 Tue Apr 7 12:21:55 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 F23C03EDABB; Wed, 25 Feb 2026 15:40:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034053; cv=fail; b=TNXoZuvlVuVJ46pOuxS6jDG3ZMMdugPpvxzniiuXbm2ONwG49bALhE9YwL4jcKfoLPl5hxQ+0xVtSgG8GhF93OjItmLNKFT6BvR8hHMC2w2zmZEltgA6sEvg0AiV4RzWuHjdi0RDi85uMNjm5HmnRqZXHFscN7B1XlJJFSmFSnM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034053; c=relaxed/simple; bh=XlXtnTX1Fj8w/vOaSfESlOdw0C5tkXxenPdTCbD2POQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WU6Hy78+18kdQiVox5/nmL7xI7LbcWhRqXWNZy7vPGCWWP7Ux7w0fnBeiHoqjrMkfd1rqlF/JXdAtGfdfgr9VCvM/A2DddIafnjCh6IXFOL3dCcDGWF/qUeGqqQBhDfLKSSxHb4lLiURsOKfI0DBZneusMdoxfCW3uOGhv9P4NM= 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=EYFVKvHB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=FZ0+AXN4; 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="EYFVKvHB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="FZ0+AXN4" 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 61P9k0xV817477; Wed, 25 Feb 2026 15:40:38 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=998MVt45uUtvfCQ9Hxg1lcbYpxzgObDPVV+uKWtmdxY=; b= EYFVKvHBayjltoDSV8w9l0jd5RwZved8/XA3Ynhim+gfGHvHuFSJss8e/sPNxtsd 1TEJQ/qqLtyn88IosTBWKc8UkxekWc1f3k7MhxUb2DkFbGDgl2fgGJ89KDQmhRrJ 5ooIDbMbI1OF5fVl6iwHohXsV3FJdnxiJzEBSu0VrpaLdGJ6y4RpJhIos50z/CMH cP1KICDITRveTxzLvzACzKeJHdH5vgBTL68ApU5CvY0m+RSsGYyvEzViYSIROFT7 5EfWEg0EYvzo/i8NornyJMoAy/Hv7M3DyWyhpYPBwxjASmRk/ColJrOSe9bLt7hj gNnR9Hw9A9syPVt9788Nyg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areetf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:38 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFZiba028449; Wed, 25 Feb 2026 15:40:37 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010041.outbound.protection.outlook.com [40.93.198.41]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35b7pak-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OP7SL/RpCjVqpTg89mia+Kb6yM9kAhBfQmDTGyK2802bM2qtxvmG10w0oVbGw7F+CfQcfDIAWEoU0SJbZIym07a2XIew2QEffjJO/oBzleQTvvf2OhlcVlss3Zeokp7UrHOWUhpnx6uWWv6fu+xGjA8jSIakNIBvxlGdH/zpv9gFglBFRfTIbyHPYk2k7vq8D5W53UcI14b6GBhTpughcSAFOKVXNYnU55fFkhLLV8jRuRJbnZ0iXwSUgBFG6rGF6teFk5/GHNkOT6w3xvKXTjiyAGvBQf/8WlllL7ZU6Y2jQkv4FSrnhTF+sU8eW2U+UcR98FZnocELGwVogNqoKA== 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=998MVt45uUtvfCQ9Hxg1lcbYpxzgObDPVV+uKWtmdxY=; b=VgvwCszjFW+18ktj2swomZJF3mXg4Asfl7vyk6kh2N8QtuxrK2Rn6v3GROLTGLXl9VolkCet+hMCGYqhJk+egmVfv19RiKZk9hLxcHDd5Ph35MGzqf2EirXmgM0utWhx5AHJ7ceADO3TUDWeZMzFoyrO0QPu60NOcMqyjsoVxsqmVuJIc3Cf2Zb3rHnvepvJyT7nMMEd/zdfGThL1s95e0deS/RR/SQ5DCnezgYqISAcor42r3gaiONrVkihM5lkn+IzsEUQQwiPagZfi9JaMzOgyUgFreisOLsREFdhM7JBAVSixaZZBidV+RHub9rFgUX+u48fYRHJx/9D2y4rUQ== 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=998MVt45uUtvfCQ9Hxg1lcbYpxzgObDPVV+uKWtmdxY=; b=FZ0+AXN4wYNiCpaSzaKd9PoOLcZb0rT1tDpnNEj0bN4zuqAQ/+paLjFGM/4DjriWNNqJE4GWp9KGt66S/D+9RhNtaURJslpJBVKpEKS9F6hUZJWZBg9VM96oTyCa6TglCB9UjlDwA8iRDxxLxoPZ7zD5KEblOkk1IYRWYG+WzMQ= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by SA1PR10MB6319.namprd10.prod.outlook.com (2603:10b6:806:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:33 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:32 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 06/19] nvme-multipath: add nvme_mpath_{add, remove}_cdev() Date: Wed, 25 Feb 2026 15:39:54 +0000 Message-ID: <20260225154007.1033735-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P222CA0008.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:2d7::24) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|SA1PR10MB6319:EE_ X-MS-Office365-Filtering-Correlation-Id: d91cd9a2-4a9b-4bcc-ed09-08de74843635 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: N4xC8+t6fbgkd0sO5QCy4eFz1k9d+Guah2b7D7eLWSsPO+bH0wCjmHpROg7uetpTT8uioY0Xpcccaxh/UpXvg1wH6hZWNsj6Zpt9mkR9l0DGeoyKvmwTeD+jzK1LWDm6MbEHlEgkIvrMUDq9D3vfLl4ko3o3TdKAOkQoKC+41uspA10O1v6rN7mIqya/HTe/7pZ+sqQWlx5N5LVndsQgr5ALZF2hrpwC5CeDHiqVafc2xcgGowSiIWj7E+eDen2vv/vJI+t+eHeeBhbyN6DXeUadkwCF/cbCYMMz2U8iBKEoiLWAgWIAMr1wP6JXEfoTPrZfdiDUr4JI46+975MLa9tlihqf8nKp6YUWAh1t9vNdjKtKmgu9qrO5c1h3VzRP8/VYKYWjt8fx3PAijEmQSHWGU7wAXtn0vhX5zYraqgDPFuimoCbGWuQ/tFo19BetOV+0scCu2HBfY9jK4U/My2rHBEWoC59WNTBtVaUxcIfekMN+4VAhrAPWPdiSAlTeafTn6k7Str06CE6e1sH7h2eiOztx3cI9+ELtMuXcVQW+am1dZKRdqclL1AuVUI64jhQcAutwS4XJa5poGaupRjj2ww+zN3XvRMz546cTpgbsLQK/i1nLVKBXO/p49rbahec4I5bc6gsp8mW3OSThSBknx9+x7XT11w8FOE0KjeDBI52tp2JckYD0TcgNVfaqBPR8Ghqyja9Fcr6+PO1qkXdT+Z3ybIx59+GpZTQlSB8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ey831KxL2tsWeydATulExoUQAlril0ZUeqnRDpcbTNLhLA0M011pc92kqGgF?= =?us-ascii?Q?K7o59rQAB8ypRRy6UD4jJfZL7ONockwIhMu+liVhHzuLLuBJoqKwa/m5txdZ?= =?us-ascii?Q?/KVdiWFiEsd7Q9RQyNvm7uSTsyWvIfNplvJfgX7ElVbIhMO8RVLPRg0oJ4XM?= =?us-ascii?Q?WmTq8AX/1SpWzQ1XXa4Nop5YpxNldyLx1Rt99+JMxBmJykvWBd6q/lJO5lLq?= =?us-ascii?Q?SbZnI224P7wLhvAnO9NOhEGsbLVUIPQjKMUcpQ63P/48nc4GpZUubzWg3iue?= =?us-ascii?Q?BBYnWQwfKfIhCLqAtjd3gDPbJn408qn96kMkFiBe/L6EGdo/kq5X2hoF9PlC?= =?us-ascii?Q?sZaCtd910vqWzAuKZruvsrq6Y7FNeCeLYbnUXy0Cr5MpjaktZi+wm93gWG7H?= =?us-ascii?Q?OVkx8j2Ft69vhKqNsIs5Q43EZEcnexjeh4AJjzYmgoaUp7ChBU0W1+Tkrd2m?= =?us-ascii?Q?Vjg9+01tOifSWjvfVklR94I4kns6UUofRu1w8X/t2UM0hePHTll2d2ofxGh8?= =?us-ascii?Q?4xWPXomyLvz+GGdhSc0p8+mR3pkaSbZ/TNc1AWiHHccBdM1dVABbwRDqNkDH?= =?us-ascii?Q?lc/dEoqrhXNgihUzoicHCjTgz8ohT8UpUSqrKNmI2Z32YM6CV1i/vswK9GRS?= =?us-ascii?Q?4Xz1A2rHl7YbTQnRR67CkR1DvP9yUbhHzWHcfy/rj2V5Ro+J7m54KjHMlzLR?= =?us-ascii?Q?lVK0HMQaKOZLg/WkSBu3iVwCLC/4qR/58NvkeYirvegDhdZMUcQm8Pcg0McC?= =?us-ascii?Q?WgdOk+fY28qphF1nLEQOqDfkJdMeCcRfQuOSFl9oRPtJwzAhEbGm/cxCguSt?= =?us-ascii?Q?bkx9uW6ooLRa5lMH27RSQgKCVyU+WU2/1xDIspZidLq4vshIDYZZ0z/3ViLC?= =?us-ascii?Q?6zTXCGgeQipPmkg/FMPwmDfVT1mIGHPTflOf57PKC0bK3rbSSezYMsGoMeZO?= =?us-ascii?Q?fy0TIHMZYKy6djJ3KcmBdITVZPqWyXbMyLGCVKQJIKStp1uXvLZa90TR+L0N?= =?us-ascii?Q?o3OVDV1XZJri808uDH0PtAcuZBjfrKBTZgpf2SBplHQXYHtPC4RiUTFPsTNn?= =?us-ascii?Q?xqtsAiUhvWYkUnjC9Bp/mkL4yPAasUNrztBufzWfxlPnFtGxhIOU2FnaU3ae?= =?us-ascii?Q?gIF6xzb1V2ZmrqJClTC19IdtD6nQltRmsZR5Gg3QOz5I49WaQ9f+DEcqP2gx?= =?us-ascii?Q?FBb0ray3PElHbuWMdW0KgTlX6a/hMygdqcNCiWp5WNbVqgcauT/2rKzNjZqo?= =?us-ascii?Q?jgAZtocEFSS36sqrojzYVxql4v0tNIC+gUYUugLcPbMBkxiQ7SgjQeoY0LuK?= =?us-ascii?Q?Ap6YJPf/7Qm+1nWmfbgD/wIwZiGj4o+vuLTE0BFsXtnRodpaHuun9LCvvL7s?= =?us-ascii?Q?HVjSTrf83s9gSyxDoucCbtcOAvn+RUj/oSSRN01iUFXXWUsO22DJS6Be0qi5?= =?us-ascii?Q?BrOuLoKsVt1fdYKywgu0i5sWw2nl0yPUW5WS1EvCqlCuQJSC4oye7kWydyhz?= =?us-ascii?Q?d4dH2VNmO7xzjvQf+f7CXTi5zzDAzXICaKbbgCNsQGyuevR3NA799pffwk0K?= =?us-ascii?Q?Gf8f9h2eeJRepvM/fGLGnPmANjaWFA34q+jwB20CP4zngBCfiieNehSYik4V?= =?us-ascii?Q?nE/HIHK1TG/pW9dIR5jeagbhCBxGV1Il9wMZup0d5q7YwI9dMsjLJHOnYqQ6?= =?us-ascii?Q?N8WjbgrpTV1G3ps5fP6PUDFMxeNPEOEiQccoUnbFu3H0HePC5q8AovPgtpGz?= =?us-ascii?Q?e/J96mXdWeQbenHeIgxkAv58HxvRd3w=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 4FcgZEqHpnQryluFW2i6L5onK2BycfAmAbrCEoCn0cuF/Of0fWr/K8sCjRiLN4TDD4AN1gHzz79lSoQQX1McrZxLwWVGWJw+/FDCjyPqZsRGatjTO0EkPrzKc/RFGQTnqL76pbcvJ71PNGmY5RxT69+6q+cZ2BD6fJjJYe2+9CfWx7z4q9LxJjO1b+6cCfqDITf9WDP5paXS/FYggjwC9QuzcAO4IRRVLeTI7uJWQjnq5pxxdHtP4V1wcTzxiqBS30VMOgSCrPq5TxzUx+QT9CjStmSXKvHSWJJtqTZPWc4zCTz1iKusN9suCvCBwNZ57OxuvXagIq3H4Gkyt6w7/GNrWp/2U941PUrSZe++50XNXnRPHCAxSOdXTfIARYY4pazW3Nrr3M0BuX/B10Qh/aJSgQZk7djva+2uWCHQtykOs+eq8ibLOyfu4s/8Kf7q0i8jYlHd/dVOpXtlOj8Y8qGN9Sr6hFm70BuQM2He6NLnxpJ/QjVTPbd5vkjqawCk5JkKdpiPh/pyUTmYQVT6aW/0NYKWY3RquYJNied8YL7azCY7LEu0S3rD3p/8DejsCJTZ8Vxd/jqKvhrAsjSG5fyoiSM/xebjlc1dEwGM7ps= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d91cd9a2-4a9b-4bcc-ed09-08de74843635 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:32.8580 (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: 1JK/Kr8xrmAOhx8x9i6qKRau8L1Ry70l8rpeKeulRkO4Gl5ehGjPv6Tec9G2uWBhi4cdtLL84ttA3mThyjt3Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6319 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17f6 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=uY95S6If6i8ttexQI8kA:9 X-Proofpoint-ORIG-GUID: Vhf8UqDy0BQnhtw2_RIL7rzpobxc6u98 X-Proofpoint-GUID: Vhf8UqDy0BQnhtw2_RIL7rzpobxc6u98 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX1Dzc+fCmski0 1p4ON/gy5z+NiHy9b/wIHYwFmzHklFdZ169uoP6oz4M5+ZXXxZyDzAMWK/OU3LUXIwhpBWhTul5 NAGZyXaKQNTejs3lpol1BEACEVs6ogFpG7CJphwDOsToGe+uL0YDEbqQdm8qmm4r9SKWzNGIo4l HFf+eUD4H98bzqwxlgDJBMOA65LRShJpkDut9V9tpkE+p2u90/bN1Y+suoFXVz5i9YxJyGZH6JQ wdTtkK9Qy4BEi9CDMAVVjkeJI0snLzeNVOPAvGYHV2/nNSvr2IE0khwjaw8mw6ImOg7YLdg3geU MKDRoLTbrRJCMLs7V0uOMGaWYN0cg9zdmfkhh/B7DNbiv2rCs0DS7i+1EvrA7F2nX3gT5pMyR1Y 7deQ8UmSHabLoy0ZZCHeZWYuShM+MuW/bxQdAcETKKcfqieSRrt7YYUpJKPJhCFeqzx1nzRXi73 XfQpSVzrwoDEBIivHiw== 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 e888791b8947a..c90ac76dbe317 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -628,6 +628,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_generic_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); @@ -1433,4 +1453,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 Tue Apr 7 12:21:55 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 2059640F8D4; Wed, 25 Feb 2026 15:41:15 +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=1772034076; cv=fail; b=ARkp+N+QXfSCzgLHJTHEbfa1BYWGGnQzo02488r11gdED+NN41fi7b6q399WWzdzNFdjs8nBxxwt786VDgW+ld0Uam4Tz02VeTsl9e0ivs19MDy8VQiCso/k14ibqzzVC6+tDj4E+eOW0C5uAFpbFuCeBZnB9vZ5sMQfBcoGS8c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034076; c=relaxed/simple; bh=q2WbskJMYJYAyZ5aR1R+4oRP5aKNGWd7SWraObSWRYo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LnE+ZgqvJqASLeybG6wNVuVvBt/NM6Ftln3MeCqcmOje12UBXXQimiub/7iLTF2Ng5aKemWplpMV4LGnSxEPKObiWfKKPM+eSTEs07taL6s5Xy0TboEHOocgeEoNEoEKnK2msLBRzSGa9Vo8d4a+Ju8Az4rSmbMX+oewCDyCU7A= 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=SVXUSBR8; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=mnCAOTmK; 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="SVXUSBR8"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="mnCAOTmK" 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 61P9nIsp817326; Wed, 25 Feb 2026 15:40:39 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=ei9ppH5zjJhmivYRCmksOU8Uu3DHpvl0YTXTLJVfTiU=; b= SVXUSBR8BDQtOe9DvCC2TDwsPyXNgwIxGPZOr3KSt0dED1G/EXBUhFKjiANebwoK JGCe65JzOns/R82e0EKmX2BcwlE9F8dj5yWEiv2pgXEg032iE4M1rnCzjTgEHREE 5M4iVoA5PtfdIdJBnCB1ElUw2KEZBUM93dWrHxg74jJc4y7LcEGNx1k26H0s03ov 2DkR1grq/eTAynTTRjdOQtM4sVrGB60mGdocIUMMueMVOQYphP5yH6k67U/Dcg1o gZl7xQjhR9tdVMEWdTXIwjyBgceszPEGDPnEDgMw789jc60Xcw/ws6s1d0LUD8I0 I+NcJeEG2sZV4nK9uu//PA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areetg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:39 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PF9PNU012757; Wed, 25 Feb 2026 15:40:38 GMT Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11012051.outbound.protection.outlook.com [40.107.200.51]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg4uy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Co6sEOJV2SKsI/6qj0jDeChZaPHQCjm+wNX6BWPh++4iPzJ2XxDHMKuKniGZaa2B+2vDmw4Xfm7pYb35v1ggaoX/8ZHZO9iFF0UTYTJrd3rq7pTiG7qTPpy0lVhZBdsDyhoTKmZJFgURrNJumQ2zfgeC3ew/NH344PKhw++Hz/ia4Q+NLwz9UeN1agpS1tSYf0T+Q8sXyzlZwB++QOEMgLb72lY66lve0dFxYzW45aYLZfcbTUexRC0uJlv8v0K/M+hRedK81v1YASRrsEguPrpg1TPtwuVfwJKdm3numReQHcuSQwZ21/uoJVjvVtfRK0f0kFWqnVJu7Ess01IF8A== 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=ei9ppH5zjJhmivYRCmksOU8Uu3DHpvl0YTXTLJVfTiU=; b=RXKpbIUTR6zRn71ADMNVQj5e/T3Px9ad5Q24d21Y82IXGuCRtk+89Uhn/KTCIn80bILL69x0zYpkTp8HXukU4++1af62FWYrvYn5zklxk3yu0zALxjuUopA9OLQ4Qbu+H+XfkDtm0U6KAADLSXZTGJWaoTrwlavqEBIyTz6pbY0GoFsfWqMno2ubnh/OCqY0/xp5xWrvaVrEoipdyW/KkSCdXH9hAqrCrbQmloLaAnX4BhB0pERa/O5Awsq4/LxNTmzWHxHlUhr2NAnZUVcJyqTjTFfmgz2t31hz2DKBybaWexRrbHvW40r65GUEHylQWrM893eWiyjkYu62IuT59w== 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=ei9ppH5zjJhmivYRCmksOU8Uu3DHpvl0YTXTLJVfTiU=; b=mnCAOTmKLAUgmwOsHiPY6ZVBUwyH4uyA7JX2HSJUG2uKNm3Y//qc7bDmZ/ByABE6UhhFc6GGCpvbroEw86rw+YEK01JrO5lb6tlE5vciSUNB64sacR0Q0zov5hZBdVCj4GytKo5Q7N6/19NEt4yM70V9GoGY0fsZsJ6TkmXLdZI= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:35 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:35 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 07/19] nvme-multipath: add nvme_mpath_is_{disabled, optimised} Date: Wed, 25 Feb 2026 15:39:55 +0000 Message-ID: <20260225154007.1033735-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P222CA0011.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:2d7::35) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f9ceb35-84db-4b76-5fd5-08de7484377f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: NN7vjBbfk1X3zr4qYm4wWDkXBWOwQUnENTriFQMZD9KII8hHSrJXVus0VEsLFkV8g0W/8jTArrf+TZSA6myNcJP6roM1Kjp7CzvfU7iyW/TPLEtBVmr0J1SjffI1eQ+5Teimo4ICOhJ8ecFL36B6eC5Ru3ieHbuNrGXbfeESFSRcTaLhMwj0Y0A3U86aR2tjOhsp6ZEk4yefOPTEip3qLbDfA3U2Tdsda7VQyr75M8cHQQUW/22+cf9L0W01rvZGjfoTjldU5hhjcODpqUE5yYnLySuBX0F3/4ZxuzPjXXTh5s/LWnBMks9I4RTR7/pFNhuv76mlSZWTHRZpBgScVdWA/HQftHU5Me5J+X7N9VQxFd3dkqAYT2NZo+W9NFJ0iNiXy3+5kEr3Z/KBSNMQi7Httn5a4IV2x7UGXPoM1zFLQgsym+afUbrwriHXv8McqgXX8wTO4omB27odm9q3rSSVqjfgdwPJJBJym2IrVG/EDWp/+GcpaiyMA4t3PK7pZ4SViK45PrQG9gWJnAaU8ByLK2sWR1w8FxplK2aDPeyX2JcotpkHxuQBX4UNqQR7wJNyUoQs2zz3pEtagIpZI6vscrYzzMk6mdOCnm9MWTw/GfM+lE6RQZ7Z/tPOWapTVpsJUJZbpnMI9Bccb39+raYmLV7X1MoA7TRovQhCgbNcCl4wCNQZIdP1rbj85ws6Yfc/E4c+Hj1lwQ3tBpBw73l94EEZNIoCe0rsg1B2CpY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6tPuPLAn5k257+adzIDdNg7BiFCYzSXaH2LInmK4NhIToNqi/MxM5Dds0b7N?= =?us-ascii?Q?s2TCKGJfVCxohJu+FG+sSORG7vME0FksX3Pn21zDZNr3GhFsKuPcvf78vsmN?= =?us-ascii?Q?9Zp/+uPj3V+zElF0I9pxdcoXFUM9N+sWDFjgrNvutHeNh+3lkJ2i01Agp9Yq?= =?us-ascii?Q?HB/CGyi+6VCOBEG80e8r25Fzd57SHQ5mfLeE2zZyKEZTL73GP+mWPZAnVC5E?= =?us-ascii?Q?6x3pJGZtOtYDxSI3in6Ji9c5t1WL/ah7D+VU2qrsglfCbFhgGBWeu9ZBEoSd?= =?us-ascii?Q?unpm0EZa5YEGG8tRDgQmv1bulyNfPk7lJm8p/ySv9tXpaVjiKeF58Y/48XjI?= =?us-ascii?Q?JHhYXCTlz8d0KVH/UxDWCR98ZEAKnU6EUHzXRG5vwzv+IeZmFx1Pft0asj/a?= =?us-ascii?Q?lgycJw/wNTgq9ey0qHXTQMZg7prUtl3H9VQDfbBM6T+NLZ7FWy/4eyRxA6ZB?= =?us-ascii?Q?PI4Z3Namsvq8PeJJAEC2za6JuMRa1FhlDVCKiDcNbOA82VLDhA05Z4+pFxDC?= =?us-ascii?Q?URyav2bxytdAgsMqt2MwtqUUNfqgMPO4TKssVZgtiXHMcWM6PgCja5qZHlxN?= =?us-ascii?Q?XlL5p7Yxozgzr7a6Iaer4eAx0wvrpLWsyRVjqrAuGERVsHbeks/Eikvr/P/Q?= =?us-ascii?Q?8cCmaVZm/HQmvZPuw9CFx7WefbeeSGVv1QeMi1tGjDeQ4F0Aoqg0qPpFICEn?= =?us-ascii?Q?lNgC28ZuNxW3yddM7kPZjNig5Q9qC9C2iFLnmosW7jUz5jEyt5QEYTrkAPqj?= =?us-ascii?Q?fu6GHS9pW4K7HRF/+1bUkIbMxnIR1DJ54JuW5VGwlSW3irrJXIT4ZRmhVg0m?= =?us-ascii?Q?ZzO5wITCQ9N0bDkPNYGfGywk5b7mC27DKPUePS7QOwSUPwbx6g3/30hscACx?= =?us-ascii?Q?XnTkiCDq72FgQrewQsAlVu+uSXuPTeKvqZzze41dmXEHaxb6so82+AafbDBr?= =?us-ascii?Q?nfkoPY5w1PWYk5ZczYZTkZHFPqDHf5SFsQtvtqxtpJG4IY1xtt7y5ljPmfTt?= =?us-ascii?Q?Qg8EcxtRvBZ6+jIqcFA5BbKUBkAgGjHmyUUoY87T5yYUYhWye6uicNEf+07j?= =?us-ascii?Q?LijvtO5i4WzU+bcPDlRjhsdZFxDJ3GslvXRXLJFcgeF1zZzsxXcixR19XPce?= =?us-ascii?Q?RXWCizW8uUzAebpTQ+wPn5bEdsEFPudZp/SMkbcAQF4VgS+iT8+mmNLf8/ll?= =?us-ascii?Q?dxtwEfnUhfLtjb3VtJnTdI6zmMDGn7W0ZSJIZcdFwLFuwA26GPLCRudTxtvQ?= =?us-ascii?Q?LZna/idlb/e/Z8mOG6ChejKpXYjeYgqPSCc2+5zoFakBJ/OIHKDvX9cbck63?= =?us-ascii?Q?n2p9xChJ+MgNdwLIGluFNwUd/4RgwDo3pcCkhyXenm+lTkX0TAoQqmsS0K14?= =?us-ascii?Q?AZF1fhenMtcJ6LjS/nHm9Gr534DHYCfFDy7nQz8RYeGdWaoojirS3AgwVt96?= =?us-ascii?Q?hV34ydkNbnF07m98lmtOfto03mMx/zdmG9zqRbeLxSOIiUqs1lAm/aqaQTRS?= =?us-ascii?Q?rOBJSu8UcQRGir/RDoMShbTkdfMe5ptcxYQ1ChHudQnF5ElhYpG39YcyAkjz?= =?us-ascii?Q?viFNEStjtEsassPxrGwhMR2Rw1JHJHQNQC3ad1694x18UWnE010RYv5pcDrZ?= =?us-ascii?Q?8sD/tyCkWjJk2OpZWXs2Xtd15OcPEyBaWjaZ6ZnBiKA11Dn8urEhCW5yVkni?= =?us-ascii?Q?BQUrUupHeB3w9sHMTMn5ONEGse8U0KRX/fR3LQtvWJqvO8L7/fFGOJiJ6df/?= =?us-ascii?Q?azSHl5pPBfy3xm2OEM+wkf64+0GsbHU=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 1nr/hwhlhTSJCNzGX8P1x5WroNlA+u3CylwPHwSqmmCLAbtF2KFgE9pvAREWc0muy5wx8+Gygn9b859lqD+n06lpj4EyaCrmLrGGOQXjhCmbAvyksK0R2M5DSs4jZPW7OUGfXeGUYp2OU7H6fyspqwPNJrT+JrrciraR2QgDkLh3Tp6cVo+uYuv4jV5tbtLY+3poaHEwE4mTBf/m9d0WQ+pdiAGE2atPhVKkn+mLONAAJ9z8qMhYKQB8kkmV8kqLHSGgTPXnJFMf5oo/Lk68KT+jpiIm2duF7t+xzaQc8uFIcP0DCqeZR9n+br0I0pn/EbTHTNYM08bG7C4u+2AmHNdLKgVKXfyOXX1Xa0QDgjjHQghkXlX25YUmtIAWfVGWv641wKP8BJzl/apLMS74BuBAUDeKsXHpxREpG0bxcG0SIPJu2rlkM2FqxBQh/Ytd1uWxLxJqo19pQHcoKshEe6nq6YYEOCPN/rN7/HS8Lf7hnwyx6m22A+l4oA1uSGPpvtRrAjKy1t5WTR1t+mmElLLNtl83/WWpwjoBZiRBIpdsXr/KV6TJvmNKyGBnX0zwyzATicrfQz4qFUuRlH6hp6e2yyHxLHnU+Y0RnGG0wT4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f9ceb35-84db-4b76-5fd5-08de7484377f X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:35.0129 (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: TBuwfGXF78GDgEhvFvcwxcQ4Hs4OtolXwQnm3qQTUNGU2vWFhKturZvpNhBY3Rv5Fe45Ak719YyQCfNRz4J4Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17f7 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=QNd2FcQEdVqeu-mTEKYA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: XGv0PF88D0bPOj_9DmXP5d2EPgB1oGW0 X-Proofpoint-GUID: XGv0PF88D0bPOj_9DmXP5d2EPgB1oGW0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXz/lGhzUzVAAs yF+Y6ydP8ofWjLQK+YAenH4kaVVuBkyiWwP+LXY/lxKeiYZ3yle1Z//VuZcHwWf6PfpqJ/lXtNA mHF9kPHGDud5gS+CQaUewduLtw9EJeuUPtlx1BKmiQpaK7QiwsONba1bflRRvpslCKWUp/W/zpA o/LbFcBI0uu0cPwQER3D3F5pzPcq284todvCCJv17VBjXa1qt6vF4nbNYGU052R3agieAJ+BIO+ UCmlGA0bimfqKDTFrnbsxj8rWKl/7EV3UkchMbWwNFlKKcz1So9fBPFTAHL1qkAT4xsYkIo9VXv WBeyxShV8lvJNvktyXV48b4fiKzuiQFfq9pMNFX2xP1IA77XU8+vXKlxL/x79ZOYev9pZfg6JLs dPwMIqH8nF1dv4wCQ+u5y0mlSTgoVxKvloLIaAQLKikXzof8oK9k7i0djRighsFspUIgxVWs0bl Xh4u+3eCVDrN1qbBitcO9KZpkHQzPVqQPzTx1MuA= 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 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index c90ac76dbe317..07461a7d8d1fa 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -310,6 +310,13 @@ static bool nvme_path_is_disabled(struct nvme_ns *ns) return false; } =20 +static bool nvme_mpath_is_disabled(struct mpath_device *mpath_device) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_path_is_disabled(ns); +} + 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; @@ -452,6 +459,13 @@ 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) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_path_is_optimized(ns); +} + static struct nvme_ns *nvme_numa_path(struct nvme_ns_head *head) { int node =3D numa_node_id(); @@ -1455,4 +1469,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 Tue Apr 7 12:21:55 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 3EE86407587; Wed, 25 Feb 2026 15:40:56 +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=1772034057; cv=fail; b=C0XO+pKdN/ysyJtMFYeK3tgCEkR6gXlwZzUHzDOdkeudXggnzE1KLXrRjQ6ziWgPs9cUYHMHrFjxOhM881S+wqcEA81CzRXZdfqyos/BfbvSpFsYqQ326QZLn2/XeIQKLBIV2EvF7B3mKmpdnHovOXQQDog+b4I7FXbR2zODdu4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034057; c=relaxed/simple; bh=2B/u6kood5j2egQjaNMnGXVwmfPgO2zQusskMjF7llw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ed3aCWS6QVNsGQuetKOm6ChEUKRoyii3fRafX9LIjiDUnYexObBgN5+gHLeL8e20WjlUjLcTFq6Akisr8rukGcmMkgSQ/V0S7eY/kYuu1DStlCfCwUagsBCwu1ctCcQlMMA17lSV0Go3mvEbXCZaGGfk3C4m19hBE3UR1cNwKV4= 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=VNsF91OK; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=yBv+b2RL; 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="VNsF91OK"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="yBv+b2RL" 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 61PA1oNT553280; Wed, 25 Feb 2026 15:40:41 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=UBj16VACUrfTOlLDYzAFrEDrOrl82H/c4dY864fV2IA=; b= VNsF91OKKAeCh1hCXH16LB4kj20+hEB8k/burV1Nr5qb7dFxprGY7pG/PmQpijjI jgd0/2Fr5LYLEdTlhG3kehzzzeyvTQ9IMaRb9QY4WEh8IQt8HFYCKHulPtC+jtgP 8AaFQAVoCt430vNC08maO0yipNEhKZCzcExb3TfxsBAOu2DJwa40z9VbtUSPXhbV EU/1JGZ0g1qIcxp4kdK2g2+zMAnvIOXk3SJpjX6n9CIdWFGEumNAVThCZrKbikB8 jxhJBPfYxItY/OkjprnC9unPST/yXYbFPT7Nv/m0+fhzjhAHiNDKmgxn6ldCfY7K Qg8RgWfFDW/qv5SySWOVQg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3g3pgfm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:41 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEXOBJ006058; Wed, 25 Feb 2026 15:40:40 GMT Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11012060.outbound.protection.outlook.com [40.107.200.60]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35bge5v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=plb2HXjvg3YTIRhj2/0WcCCd08WkjuRtMA4bhHt+gs1CUW+v3sFdhoFzw3U9rNMR3Iot644P2EYK+K4qi5UoAtSqrTYo1IbrGIOBaQRfaG4z7VuGUljlXSbTGjIAvvAF1XjEAFIRrlELLq9rKxzrYB4e+zseWdmKiYHS713BQTv4OLjWDc4cYpdqh8lACzqS48OT2aJ/J07XzVy2o/ldG1+3GcJoF+GOdlBEaCqUir42bFyMQXZmPnWrB+UAcdb4WWE+TXZ529D7BgDqK2MEfM8JH3TRzJ8acxa5hnjQ7gUSowjiyeIex2NRF4Md8DXmEGujNlPmSFuXKGM7MDb/Gw== 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=UBj16VACUrfTOlLDYzAFrEDrOrl82H/c4dY864fV2IA=; b=UjrHGePVNNkHGTUL8D8LLDM8M80YUyJ7GM5PzU8jNs9J1qQ5FKLwHGfO8rB2TKxKyUfniw19LZ05qaIlZOpsbbg0V5Jb+et0p4NwkV9ZdXL036z673CNtmx8d4rvJp6283hVKyEGBn7ZzP5I6bB856ecAuk+juUClTZAipqmvvq6/SImOQnarRpoCtGBV2l0ULh3DRo9slXJYaFCVAbSeicLCuWnrGJtuSZhAZBYd9I8bM/aGNggM6+8q0KoWFnYNOkD35T11ZXv+lHaatHYvlImZpVpbn7S0mdajVI3JKpd8qCs8fTxT6ZLhr55/POGr/HhmS0tos6IxH2LZ0NzXw== 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=UBj16VACUrfTOlLDYzAFrEDrOrl82H/c4dY864fV2IA=; b=yBv+b2RLfiA87aY9Hmuo0KJMyGiLlaK7cD4uwgkiESTY72CHu8QTm1KrO44c4/G96gu+ffhFRJOzBBuwbRQyt6jFPaFHgTEBp7US992dIlsc2vLZ9RRkgCW0SunELYB3duQ3i3h6gn1bCyca7f+RsHemuVMBHLDEGvSG2sNdVJ4= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:37 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:37 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 08/19] nvme-multipath: add nvme_mpath_get_access_state() Date: Wed, 25 Feb 2026 15:39:56 +0000 Message-ID: <20260225154007.1033735-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH0PR07CA0098.namprd07.prod.outlook.com (2603:10b6:510:4::13) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d359a32-21e8-4849-aaef-08de748438b4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: qejoiWfVrzaeW6sHSOK7XizCgIl5s+oKz1e3KOjE0GVxqbrsNr/W9i6btZ8uHe6KQd/RkYLpVLVIN+9bbudz/aHRJA5qGyARfleGJwhkRy8HrYTbYsE7aqvgnZIPNycLiYDAkMI2Kh0Xd2yfe1IOY23G2wrIrOfiWnjCyvXJhiZAc+QjHdR6DyBRKmJCt4cUKTgMQyff4PG8iyC5H9A3NySluU0OCqk30IPdk+uWoyZSUXv5nc1/vYjYO4/eJ4yxFdVOagQWCXxQ1Qq3abOKHB4OQ9R/3ar25m8TiqDOfNfU1MrIFMtCSxtg9zwmXj7B1MQxulLQZf8Vn5ie7tL0KNq63in/euVdTIdNOGxeyoO4NcP8yQJAFjiNCuuGKp8daeKGrNejrhCBCWbKudGqvGU0aNqJz5tAvLpLveRux2MUYEhzwfFzeJN91vG1sHP8AQKJ0p+39Z1M1+sXG9oRW8dkYfCUlAm2odVv4yk+3W8Ss6T9YM2ALqCBvAgLqTI/hyYP0ojL+5L5+8LE7UkAiHOdneqR/7/kzqwQ5uok6TiIY/J54B5dMADt90f+A7/RXp2AQutwx+/zonRkAa1dbF7KXEgnvMxYZgNaLrrbmxNkt0ugSJSG4oprERGmx39rbs+CXEH9cAf+GGYvpUwyGSDzAn+8HZnlqJDneXaVP72QE5+ploeYy40VzgDOVXiOWS9ddpssmvzRboGM90Qle0qsvUDmfBC+vJKbxglTF2E= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RjV/O9ml2Gom/hgKqpbOUUPEqiy+9xDaaSPbua9GOGjwL4teKynXAbhaB+AE?= =?us-ascii?Q?bEwKmP6tb9a3vIOFpDCRRq6DdEkrlUhFLsnovB+dluvdUMDRlw8vj2MmEWMQ?= =?us-ascii?Q?N29jVnJSRDDWXkSGUvWeiYLn3ifOEVTYXV3kSKxcRYQ2nv2HIchoKugtWfpY?= =?us-ascii?Q?VUDGYaO5ES+OE3Z7XxKhJWi+JGksYR41tSYAqa70soXWVbypdN03AOLuZkXJ?= =?us-ascii?Q?akLx6pyj3hQKab5KS+u0rrnFzkdZmOf8tGwkXA+qXwODIJMGn58jEu5ZBXjs?= =?us-ascii?Q?IVutTLM6cyUpeSTzLSwGmNXG/qu788NUYV5xpnrCOMW2KzLzg4QEIxOZBnOh?= =?us-ascii?Q?ue5984mG7tgUKZgr+K5CjSJ/gv1Buyll6s0xzU5Iv6SgxQiAgTgYcB8tB8Dn?= =?us-ascii?Q?35rPdxDQgDhDFgAjLIJCEz25kPezCO4cpC4bhoEKkrPgboTdXj6NSLxDITWx?= =?us-ascii?Q?ssea0GWj1McjnEKLnxM5dT+6LLkNXQI4m0KTGzZ3UKGoBzedhc1yYJbCY7Bt?= =?us-ascii?Q?/jp/hfJBHwiiwtxez0E7hcF2Mic1wfFzWbqCUim0WfIeEdyvbkbBMYe/ZfZf?= =?us-ascii?Q?F0L7kGl3jgFBY7+69JehsEjHtDY7cjW3zKBbIzH7XWeCTlQyOCxIC0JoCvdY?= =?us-ascii?Q?vLt2uW2rm0mJ7nDaSX6QQVNVtghJ25HHhkb5Wj/LEW7tCb5D2ZVM0eI3wDlN?= =?us-ascii?Q?QKx5ff4Z8wAO+g36CMz8L8B2k8uebBnDuNLspZNXQUGIgGS7xCIlL7XFG6W7?= =?us-ascii?Q?y6vmd1nQYJacagNqcMl3sMvAjf4WBqXRFILSvdS3WMIDSKd8xlUgI97/METW?= =?us-ascii?Q?J8s0WqJBUmcgfLCp4SvlhCIe+dvW/gj6TjBMhvMVuwnJZ9PpeK/vb5wFCG7J?= =?us-ascii?Q?+Lq/PxU9/UwpusiiJy7pDPJkwjG5uzaWc/QAqC4tKI09yB+SiDiKWyDeOMG2?= =?us-ascii?Q?v/tTSFf4bxPG+zeHyA3FqWLkR/k1RVEpuqUzL+16eakjsaEgEhgKxZW9V2Rr?= =?us-ascii?Q?A04Mu3n7lYy5ZbiJ713wWFp0Q62P+9wMhtqUSMIXLYycXwFc+eTI092uGpj1?= =?us-ascii?Q?+7AZOW8O21zrYDlioaBK72SgT+45H5Hu7QYNB+Hn0qx6koxOdqykmDZG0LQP?= =?us-ascii?Q?JUW3M/zNg4cVMVsk2fDJLuygSmFxRt5d7+sVQSF0Ph7SgeUlTk36WpyjcECL?= =?us-ascii?Q?IZE4ofvAmalhPf2hURmd0w2Mm6PFHnFgsX0m/dT7l9iBnbG+GiBs8koGrN8K?= =?us-ascii?Q?Wd1yVAu1rFtix3tfjDIrnIjCGhP4Jt8FOrRJNz2vvY8FJKeX9qIgp2YSqRwK?= =?us-ascii?Q?tuH+7sl946ITcTR2bBJE/2YOyw++lT0qrJd8Wur+GeOXrz3s/Bj0iKvRnlnD?= =?us-ascii?Q?Cy7WYeecn5WQzZrMaRBu72leZDvmZsvMqFCdTXviMfzI7UQ+392qybKqwtIn?= =?us-ascii?Q?psuJX4VCklyjxhnqGiff+7W6gwggrKPxGt2tV9fBa/V2paps5KHu25p5l5Qt?= =?us-ascii?Q?knbXjQ16JGbAgjHIu0XyLkBDceI1EwEbtKgL+7xubNvoCzkbI3IrC0vZCBYA?= =?us-ascii?Q?03hcpPoq2ZI7oomYJeAgDmYwjhjRcjv4mesrMAYh+itq85pivPqgUatnmYGi?= =?us-ascii?Q?dIOs+jH6wFXBiK6oSl5Np8P+nPzJf97DlgdnXTYhC6wE7sQdl6UHxP3qSY1Y?= =?us-ascii?Q?pfSW8URr/h1UQTlwaSCGGF8n7Nc4PTp8TIVP3a9bLUzoh8nj6krmR6urHUlA?= =?us-ascii?Q?vGaqxYPiGWdKCWxn4CxawzpwpInK1+k=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: O3wxWRR4T2Zt/peNP4qa+2kuXj89QhIJFj69yuiMeeWyN7yHiERHKQfu2h4OvEYFQCIAe5cMZe1LywZGf/OwzYD89HiCBTg7AL0az7ew6Kb/pLX00Y5mPmErNGK+A1FbZD/Rae8Y4MhGjsxc/ey55X4jXMAGS6hD12egitxF1TR4Ic2HDvQEX9psomYX86IQ80kauBs5HrpHV97i1JRBSoK280pVx6LwhfAIQDI9C9eYvvNBnMgdX0Xu8ztBzI68Zz4BBODKPP6T2NdJSJXrou2pnFhdkBWAUPbTxTD8cAory3+pKKSi3zTFrP0GPiB+5c+Tnk4kf1g1elYPw7c2MpU0wplvYzDfmw8BVfgf3q3+64TponmNRaJRus2NAp37fsK8X5gomyGGyjww8anErh8iKK1tMWMwARMnt4opyYNxFOgkW51z6ezp9DBbBcRLUdHHA5qoDvmsoOZvFMn7t9cTv0jkXdbkh1DgmufymB8hLm/SsEeC14sN3c6vKBuGAomV3faiANniERTVbgwBJ6b5nwytOtOsyEFJlhEfoLmq6d5wK5vAQHkKg5/w01bDPZaq55dO8HGfRbDcCnrREW0hnf59j6q800oprx9D58c= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d359a32-21e8-4849-aaef-08de748438b4 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:37.0756 (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: X8ffxrDjP8WMSF6FDFA1UFCtU3i3kDa1rZ3a/md/9daV/Q7Gs9B0gn9D0NeU0X6ymT1NAxWyyWqExr4rxR7Q0w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=Y6r1cxeN c=1 sm=1 tr=0 ts=699f17f9 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=-14dQaleHrdtcdPegs4A:9 X-Proofpoint-ORIG-GUID: Ay6ef9sgC9OVY0z1xxS7lKOfLWhPNDvI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXxLVmZtK44jf2 PnoY+XNYyeER+3cmYgdAUe71aRsb+svVTuDUd8K4JfeH/3EHqNOR133N4WoBa2FBwbJ86XQv3Zn llPxoeXExuNPdMoHIR/1W1rUOvd5t1uNgpfo5BNzaQp5kl8GLlQ7i6rap1lzsxtw1gH7yOamhT4 F+DuAT4NjYJWy4krcqTY8skvFTEOExjqFEXJYZIr77q0ybXDzQsQTy3nJ5MLCwVEAl5EPas6a/F f6M9fK3ZaSyBEee3YfKkomKgYSe6UGa1S0sR2slmzoGnz/oyJedW5SfKInPohF1s2M2lJDHr23y 1/mDwwQ4PD+3QifpxBGzmH2tZ1Kdk0zyAAVtpQC7zX1BEWyb+12y2nGTyYM08KQx0HRnUr3fSKX 0OkBYSSWp6gsaztV+Tmq2kJwzbQ3F3lBVeVq+TTRfaXX3LYX5r6+XYcPeZbMp5e7KGtyQ6Wxtsg zeFf+CQ3KvKwrpPr08A== X-Proofpoint-GUID: Ay6ef9sgC9OVY0z1xxS7lKOfLWhPNDvI Content-Type: text/plain; charset="utf-8" Add nvme_mpath_get_access_state(), which gets the NS ana_state and translates into enum mpath_access_state. This replicates functionality for checking ana state in __nvme_find_path(). Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 07461a7d8d1fa..a67db36f3c5a5 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1464,6 +1464,24 @@ void nvme_mpath_uninit(struct nvme_ctrl *ctrl) ctrl->ana_log_size =3D 0; } =20 +static enum mpath_access_state nvme_mpath_get_access_state( + struct mpath_device *mpath_device) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + switch (ns->ana_state) { + case NVME_ANA_OPTIMIZED: + return MPATH_STATE_OPTIMIZED; + case NVME_ANA_NONOPTIMIZED: + return MPATH_STATE_ACTIVE; + case NVME_ANA_INACCESSIBLE: + case NVME_ANA_PERSISTENT_LOSS: + case NVME_ANA_CHANGE: + default: + return MPATH_STATE_INVALID; + } +} + __maybe_unused static const struct mpath_head_template mpdt =3D { .available_path =3D nvme_mpath_available_path, @@ -1471,4 +1489,5 @@ 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, + .get_access_state =3D nvme_mpath_get_access_state, }; --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 0911134EF05; Wed, 25 Feb 2026 15:41: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=1772034097; cv=fail; b=dQR3wWZodJ5FIbbJP69ridWZvF9vbLN6ysQ21E/Iq3Rp44egHiSkZVl1OFzsd8ICpSODCqelFRzgMav89/Zl72ta/g/NZYENJLu0ZYtvpALIyU+PdGk1CpFSwLyj5C0YS1hgT5+gUyS0VxMV3LlJXkLy/Rq922X56VkjQNw+6JA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034097; c=relaxed/simple; bh=AFGOWN0eXCpplyQmJnaittUK48HLoKMw87E/gJnHiBQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CQpIJJcT7A9Yy9Bb93XkmkQCuwkTnyiZnuCPyiiL9RpNKQS1aQ/LS7zzR1Sl1sWXNvwT6mwKFvuXSNyTZ8SFiNNq9Aa7+Xj8Xs3dTVMZCiDBeDIh2teJfsT3r2j3SOUJdyKYTpUa7cykKve8y7sYVcyS5hjLwe9NaPpuPNvRZck= 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=IgYL8tzb; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=irr9VIp1; 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="IgYL8tzb"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="irr9VIp1" 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 61PAjClQ817392; Wed, 25 Feb 2026 15:40:46 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=3VNKRwcxBhu09Hrl8043+J1LdhMGueH4K8+IJi2W8Lg=; b= IgYL8tzbO6L2QV/XWqVQzaW/ECUmXzfHYIABeDHq7LPEs9hYvLDEGrSYuFjDD+rt th8LisjROkmthEiyLu6IraIAAhYzErzXYC4mNtdJj8O+cotF2oZfeqIxRR6Z5vZz 42pvrYhCTCRpd56HeG6/ZSoa4ohBkw7w/KIwZP1yCAXtIomen6qJhmygAqVoTm9I vGVU0IzNiqVM0es2HH2qaChFb3FD7lAe8oZpwBhq3+L8I6vSYukXc/tCaVRVwpJs n6zqFmZVFjkLqERBjJV/58LwYs9bK+MufhcVuGvHGpL3Bgk1W0AzX1eueRjmgUsz 6PSiHEOmB5rvrrdBV9dy1Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf4areetr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:45 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFCLrt038517; Wed, 25 Feb 2026 15:40:45 GMT Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11012002.outbound.protection.outlook.com [40.107.200.2]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35nfwuv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eBK+FUbOuXR4tKVI8KYsyjV3y6UdjRJSDp92EAAJBN/hX/IhTI3vbIDjWTqqxaEC598I92gpJ2BVMy0qcywU1cOCtXn8XIp0y1nZsld4I4uUhPR9FBCn0lfA9tZdU7ekmfSDwYnv9fQPIfcy7yh4LaBcuiE+ddbAt/Pw1xi2FBsbmxE11T4xc2Sp1G06O+nLkJiL0KHLCWDVteDmOSnMWtm6ioWNYTVKLh4s79bZ0U8BvGW1O8iXcu5rLslnRC6dlCGh14u2Xs57r+MvVsq2BmR39miZF+R12ezssPYKoL/afDIsOQ9YEch8TjXvHTUmgJk7rgEk4lJg/J9fmJxtPQ== 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=3VNKRwcxBhu09Hrl8043+J1LdhMGueH4K8+IJi2W8Lg=; b=Jni2hr+pLJqDC5w5w2teNgevrQutMtzCojKvV3ym9epSlMgictO2I4++QSvvN4qCtmu/vvumH5FPVpSXlEtApktW/uDeRNMvFi4O0a+QGysuvkkFEinCtGLBfFOs7ucsBhWSTqTQJIAvgbIs+B1w5ZmlhkmzmVIo4cTkAtXhKLaY3gy34jI/PiAorDoUnEzGpyFwdP51goFP6gv4Cdhs4ame1BvI3HOu7441yYkeusu91JaE4Gxmhu79Kcq+vCGhj5D2SA3TOj6BbbVyM4g/2u2ey39wHQ+9uzyd1yoKbGcbNO/P8lN0YX6uumBu9I0+i6OmT6545xSCmTTnz9ng9w== 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=3VNKRwcxBhu09Hrl8043+J1LdhMGueH4K8+IJi2W8Lg=; b=irr9VIp1n3PDYxwSA0KOypiXgJEdrca7X5ksu5SXp7o4ZGaM8vX062JK/DG2m9GgJWY7lZytyJYpvAew4E4shfUUVci/odMz8sJ50o+dKGnm0Y+b3CZejN2Qu6NOWUm+EbVPGtMWlnow7Jl9O2r7Rz7rKHSq2oNdVHpyrb6j5AI= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:39 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:39 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 09/19] nvme-multipath: add nvme_mpath_{bdev, cdev}_ioctl() Date: Wed, 25 Feb 2026 15:39:57 +0000 Message-ID: <20260225154007.1033735-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P223CA0001.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:338::22) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 3b8d6ee4-852d-4629-0b81-08de748439f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: K1RV1x7MzwPxpLsO5yfcOHBHcaxRwm4aWxsBIoDvqACQl+N9ODgdlnfjjQ88WQa3hqTy+5KuCUqXS7ag4GfNAGeJ3bmn6BxkzR42ObRfU4HKVax+HBQKyQNgadqbFcFhZApX+LZ9w20ZjhD8cEHGO1M674qgkFcrbp5aZIo1MYWuEXYVGPhv6XlZZQcvMcS2sYH85Qoaxw7pM++zigEAJs2rXJ+GRjjjaSorlMmC36xNfWPPAVvBkBEyxHsrrXyDKT4gzh+3AX41cV8FwVy4HPJ7hluQYkDB28G16XPVE7AO0Ej6x9/Zo64hRjmpi5gIJk4gwnN7UK0/VkGXUZVk4aCDNvkwwavfIGx9xEP/pcebtS+WEzNW0hD9YZOTcuEcRW4wsr5QMoxwyXAuaEBJx5VIfzB1nLSuOxEJshvOMf8f+mqIWbAfITH6YayyEO9tvJNhx4KVUBwq5eU2JvxoM5xXBXL6aeqgjX1qwLuDc2YoiO7B7ahmpjpZeEHEHzzq8cAyetz5Xe3QRoOYo0WOKKlQngPkBC1gUkJT4oJHe0hE0veexznQpzwiXWISvBTH3qoxdkAsX6AzYQNO02AGOVx0CunQs9vlC80KWr9CwpdDI1WfccWbTCOL7ag3AgdV7pDkei5Ac0kJk8DhRDBAighMDcnxEqd3kH2ULZ7J6bYTJZlnMC5wu/ONy6F8ZSjRZLEVkD+S5A7Ha5SQwTrh+8/zyrL1fJVHWQcrvj1enRw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Vf3mCbYoL0xxHnZTZ3UrNa0iI2r34eSxrvuQuXdOIbpUEq8r/bOJz+o50eM1?= =?us-ascii?Q?eu9Z8EHGVrhUW1VQS/+7pRtbmayhcxft5BZozw7n6nLARCDbtGUwxTLQiIsi?= =?us-ascii?Q?3LBuiby0b+vfAv6UePdk3u80k4gO6/OZhfSPhZVipWy3KDmdRrkj9luPl3GB?= =?us-ascii?Q?ZjBDHeSgyKzJBShJacyDs8pe20zet0NPNKG1ply6wzfsTZipcIH9owEt05D1?= =?us-ascii?Q?33gFqvvGmAGzTKxr/CA9EeNZzvJNYwyOOcuQRaTzzXQaaL5tgn5Tl2enPINU?= =?us-ascii?Q?4iaoH1DmZRu9Jy7VMAWYhbLhhW6wlXbrc01Rnqf58b5h0Pb8KyDpoxhMt/s8?= =?us-ascii?Q?6ARaZ2vZ8leebxbp0EdB1yHTmZUU5ZNkZvGpjY9OaQIHH59mXt2y88Ekxkt6?= =?us-ascii?Q?LL9WKDZW2joX7bT8zeBm+Pape6kQ3kSC8lxPYQdl5NymZuG8qbJnFse2Fjot?= =?us-ascii?Q?XhFFsatqcs6KyP8Yz2qBQbYkKGVgaAW7WDgABVkFLc2M35n5OpGZLPzwSrXW?= =?us-ascii?Q?Yv0akunLFUNYiCVj3OgSIe8NaGOFB98VJj2v79vr0F8+uql6dJPtKkSwoqMe?= =?us-ascii?Q?1bnsu0bJdIGBBA1FflL75rZD9n4fVhHFzmE1d5BTa2sGkcpLeDy4KjIV6Q6m?= =?us-ascii?Q?xemAlFxClLbTbU+VLVogcXo+iUVe5mA12IGT5kYvbZHawONfopgkiP2bcpZw?= =?us-ascii?Q?mw34YqyEUF90/PI2F3m8VeBfVXmPxU9BFInq/64M15xlFq6tfAANBz5TkrhI?= =?us-ascii?Q?lykF2JTFLUfbawTLM5DE+2xh3bfAiiz57qVUM004Dv+00QR89JQZ+gfcGIJu?= =?us-ascii?Q?gVzoJY1s3l9wG53/WalgXpiG5CWuK8HuOSDD1zPPLvYgYkt/cCyYx75hhLYP?= =?us-ascii?Q?/hfidWaP1rkgqBdz7o5xv0/ffgaM8/1/pbjE2J+WCAHmp8qLk3GHr8RSouwe?= =?us-ascii?Q?TBF0bBDEqolnavghpgbRc5r0rafd94txmhDJOS3moBVXzfmitmNVMyAiif6t?= =?us-ascii?Q?8HqdSzl5CtBM0czRkuXwffcAmp7oQl/2TBEHq+ukyc6zQ10LtUAW2nMxI6rh?= =?us-ascii?Q?IisSOz0CHwvrgEKBItphVH+ytfhKSjNpZvZY7+uLtMKVaOOqnnTOYW7mnerw?= =?us-ascii?Q?iMLkbWqONex6BK2UMHw0Z6btXJR24rbbDAg1+otv9R2TAtrQ0DdVqiPUVIib?= =?us-ascii?Q?Ql8wGgIK9bbnRAA/o52XWqMeEYdNfK5djXQxOy4mZiNzO63GiNhlKcaxX1Wg?= =?us-ascii?Q?PKjNy+rQ5BLeKQSZMd5Ywtq5bUKgRQfoRdswB+XJ5xZnE9aLvAVEpBeB562U?= =?us-ascii?Q?tYBBlL4n1EUJEiZkgIMgt2HeVlsnO6X/zP26IDhzK7l+V97sutJqjvSo/FQq?= =?us-ascii?Q?rvHUyBSYUR1nMZc+5IcTFtXcqtkkUV8OJ6LX+E+KSdbKUXiOSd/9tpif47hY?= =?us-ascii?Q?MeZO07pMVRIGlTCYJRB2wD52Z2ehhEGWkxxF0FL1Cji23cBW8PzC/ielIpYm?= =?us-ascii?Q?eAkBxoDzXOxlL5tFyd+JI03N9AvjcRKkhbsHPMXZJF1y4miQ1rfXAfwKdhCi?= =?us-ascii?Q?rOz2E8aLGoeVGmugtEZ5nmKHVMazHranSnzRAHnOkgRNCjcIk6s0QnhDKDmx?= =?us-ascii?Q?7AaPn/7u5lSMHZSw+Dpxeq+sNBJbuLW2NIGnc0nK1xaAROFPNDapbjEuZuX/?= =?us-ascii?Q?wFY2ocsTrH0J5wX+skEvxV4ye7bci7jmqwULZ6pEShX3Y9xZSWtdS/VsMTSL?= =?us-ascii?Q?9g5fxUaRWvv7HyYjE9P0SS9EjD+h7qI=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: tBUsIV0N04PgCu8/HwLHOuOjUPV1i3wSG+N1RKQjPCjmdHVV+TyEc2HZGwxNdm5oXw6Isn/Q+8WLbeHxbMsMW3GfgaajpZwh7GZVN0S4XGs4iIvEhhWX3oB71XKx7qOez4DNoTmY1CxH23lMzYKyuy3d8w+0y3V9hVlG6yvSvk8X99sneawE9h5MxrDGC2/Y2227VfstfaRD7pLr+G52qFxNFVgoDGO8H+kgsAQnJkQTmyeZ80j74sazuckIisSKRkOA9RccizWa8Xz946WTWw8cBlTLFvS37d0UPeNW6dr/ytuKMLd90sAPb7SBEq3SQoUu+AoO8SMNOIGlPJYcP9ftvv6t+szw5QUbKdJDbzBFRH9Ed5ljJAFvEeET2Jp7b7002fkgzAqXXGnz0uFNkPnYhoaT2gUAcm7/r8169drzgJtAvVX7gsDq+j1Vu6fYBjW86cnvUfd/D9tsFXro55BOYoKJI2GGrSmRLKbVgEwSOKK2yoMABdI2Ag6vTyTJGdvhlzhoFZYOVNcVtIS96BrSkVSk8OFKGPHSgZ08mwcc8LZgJH5Af44HsaEwW9DEcwQ4lKhpg0FE/i0SkxOjnRgEh71IPNS17UGzITcAJhc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b8d6ee4-852d-4629-0b81-08de748439f2 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:39.1151 (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: 6ssKZmdAcdFVYRmi6XxfPTI4OPcDHnbxN/Qn6V7/H6XcvSn+ytKdIaS8B99E/2l44pfqUM1XE4NLQB3URA7gUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=La0xKzfi c=1 sm=1 tr=0 ts=699f17fd 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=3GUDSd1fvbfyDRxfsxAA:9 cc=ntf awl=host:12261 X-Proofpoint-ORIG-GUID: d9RGSStuHwpBlZownrG6sidkvES5Dj0O X-Proofpoint-GUID: d9RGSStuHwpBlZownrG6sidkvES5Dj0O X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX93Sh5JFCkHd7 qoS3Bt6qE0SWFnUR62bVWCA9rw0FQVZmxRn5oc7pWsyh+rTc395B1zPiGSK+y55xM5rM0V9GKi/ RpaZ6G9XiJpuDZBmJ5ytme2jsjw7TDRD2mAhKIurGuJWNidwcY6FuEBJOJE7AXCod49onoss34Z iMu8ETboEvKoe88Eb9U52qFKAcxtrmVf4wU0NggQm4ouodaD5C8Nuoil4mVRTAU0XGlApbleoJp OyyspvFcc0sqnt3AF71VyTY5b1+KxvGeiW078EJ55F7/c+kdws6EdOSwJ49ljNcCwKVrqFIWaO5 vFN4yoj6/XISSiknPEaOy5JyUI3HngPGkNJp8/3sLUc1kG5UcvwZsAuI/WrKfoW+gL5nSQaeUkZ yLZFi3k1TSBsCmDeGwFhMRNqLJM3L13qNOkGqk1d7t6yhVjR9KJ9tMAoq2e3LYGpVqSlYXOVOvO AJPZgqCYnnQT0vyv6QtZ08sFZJ/qFyJ9PjY1xqhY= Content-Type: text/plain; charset="utf-8" Add ioctl callsbacks as follows: - nvme_mpath_bdev_ioctl(), which does the same as nvme_ns_head_ioctl() - nvme_mpath_cdev_ioctl(), which does the same as nvme_ns_head_chr_ioctl() Note that ioctl callbacks are called with the mpath_head srcu read lock taken. Since nvme_ns_head_ctrl_ioctl() releases the lock itself, it is expected that the ioctls always release the srcu read lock themselves. Signed-off-by: John Garry --- drivers/nvme/host/ioctl.c | 76 +++++++++++++++++++++++++++++++++++ drivers/nvme/host/multipath.c | 42 ++++++++++--------- drivers/nvme/host/nvme.h | 6 +++ 3 files changed, 104 insertions(+), 20 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index a9c097dacad6f..7f0bd38f8c24e 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -682,6 +682,25 @@ int nvme_ns_chr_uring_cmd_iopoll(struct io_uring_cmd *= ioucmd, return 0; } #ifdef CONFIG_NVME_MULTIPATH +static int nvme_mpath_device_ctrl_ioctl(struct mpath_device *mpath_device, + unsigned int cmd, void __user *argp, + struct nvme_ns_head *head, int srcu_idx, + bool open_for_write) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; + struct nvme_ctrl *ctrl =3D ns->ctrl; + int ret; + + nvme_get_ctrl(ns->ctrl); + mpath_head_read_unlock(mpath_head, srcu_idx); + ret =3D nvme_ctrl_ioctl(ns->ctrl, cmd, argp, open_for_write); + + nvme_put_ctrl(ctrl); + return ret; +} + 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) @@ -698,6 +717,63 @@ static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns,= unsigned int cmd, return ret; } =20 +int nvme_mpath_bdev_ioctl(struct block_device *bdev, + struct mpath_device *mpath_device, blk_mode_t mode, + unsigned int cmd, unsigned long arg, int srcu_idx) +{ + struct gendisk *disk =3D bdev->bd_disk; + struct mpath_disk *mpath_disk =3D mpath_gendisk_to_disk(disk); + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + struct nvme_ns_head *head =3D ns->head; + bool open_for_write =3D mode & BLK_OPEN_WRITE; + void __user *argp =3D (void __user *)arg; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; + int ret =3D -EWOULDBLOCK; + unsigned int flags =3D 0; + + if (bdev_is_partition(bdev)) + flags |=3D NVME_IOCTL_PARTITION; + + /* + * 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_mpath_device_ctrl_ioctl(mpath_device, cmd, argp, + head, srcu_idx, open_for_write); + + ret =3D nvme_ns_ioctl(ns, cmd, argp, flags, open_for_write); + mpath_head_read_unlock(mpath_head, srcu_idx); + + return ret; +} + +int nvme_mpath_cdev_ioctl(struct mpath_head *mpath_head, + struct mpath_device *mpath_device, blk_mode_t mode, + unsigned int cmd, unsigned long arg, int srcu_idx) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + struct nvme_ns_head *head =3D ns->head; + bool open_for_write =3D mode & BLK_OPEN_WRITE; + void __user *argp =3D (void __user *)arg; + int ret =3D -EWOULDBLOCK; + + /* + * 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_mpath_device_ctrl_ioctl(mpath_device, cmd, argp, + head, srcu_idx, open_for_write); + + ret =3D nvme_ns_ioctl(ns, cmd, argp, 0, open_for_write); + mpath_head_read_unlock(mpath_head, srcu_idx); + + return ret; +} + int nvme_ns_head_ioctl(struct block_device *bdev, blk_mode_t mode, unsigned int cmd, unsigned long arg) { diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index a67db36f3c5a5..513d73e589a58 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -642,26 +642,6 @@ 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_generic_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); @@ -690,6 +670,26 @@ static const struct file_operations nvme_ns_head_chr_f= ops =3D { .uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, }; =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_generic_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 int nvme_add_ns_head_cdev(struct nvme_ns_head *head) { int ret; @@ -1490,4 +1490,6 @@ static const struct mpath_head_template mpdt =3D { .is_disabled =3D nvme_mpath_is_disabled, .is_optimized =3D nvme_mpath_is_optimized, .get_access_state =3D nvme_mpath_get_access_state, + .bdev_ioctl =3D nvme_mpath_bdev_ioctl, + .cdev_ioctl =3D nvme_mpath_cdev_ioctl, }; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index c48efbfb46efc..11b63e92502ad 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1047,6 +1047,12 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *c= trl); 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_bdev_ioctl(struct block_device *bdev, + struct mpath_device *mpath_device, blk_mode_t mode, + unsigned int cmd, unsigned long arg, int srcu_idx); +int nvme_mpath_cdev_ioctl(struct mpath_head *mpath_device, + struct mpath_device *mpath_head, blk_mode_t mode, + unsigned int cmd, unsigned long arg, int srcu_idx); =20 static inline bool nvme_is_mpath_request(struct request *req) { --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 06BA93EF0C8; Wed, 25 Feb 2026 15:41:05 +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=1772034067; cv=fail; b=Y+LqKrE7UugmXY0Gq2J+1ygkbI2sIRDtMxDXl7hVM9ZsSIMHhJwCRRr34mQOZbXmge5/4HxkHNqAMKlUbIuJ8K11F/SUfjpXT9ZIL/AxzA5H2EQP18yAVM82n+aJHB3hrbq+ulnjrYOmWOdW9dlSLCfSgkAbrYFKZL8bC/yiC5Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034067; c=relaxed/simple; bh=87RdzUlPwxRR/bqE6fpDNK9EBnug7Nux0t4Q2eRceZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nloEDj9w330tTYviUeA5Z+Nd7mivOKjtEIRtiGSWLW9LG0zEFw44ueLO85A8NT16LfX9TR2buoW8tVzFj6HsTLJzJ9//RqnglcoN2DxPjrNV2oSy7oxZaV7uWGm6xx0nqwYstO0+l5kfNpaiypZwiAcw8yRAE8AsMID98VnGOTo= 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=KWKOT43Q; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=p0MxCWOQ; 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="KWKOT43Q"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="p0MxCWOQ" 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 61P9W7YN3927984; Wed, 25 Feb 2026 15:40:47 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=3Mx1/DFDdsowYn9ZjwNuzOo5z1r8U0XcUKrknSZ+nOA=; b= KWKOT43QExZLV8t+tyS4vCaMZOYoBnu+5Bf7HEoDpUVsGBytpx6prLhGgENae5Zc wzoXGUyqCwIjwqvdUZJlQ2ou0pqrdnZWoRAkt4FESPtrl6TLjvsQPqr9RzDqKEhM ilohDiT4DfnKvdPSy9p8rgRALBaLYwxloTqoU6xYpTUCmkztv3Br1XwZFHRXrfzS qYIrwCPW3vmy9TmqhIHEgLEKAZGnDV61sbBC23RfJsOKPM9sgr6PP36PufgiqOHr yefUjE22AdrJQhA2WQrP2h37/TsVPGaBKv1PRWfbXjqUYWJe1gZxael3UraBbzr5 IXr8ATC0+KeFD/Mn4TlGdA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf58qee8e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:47 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEPdlv028627; Wed, 25 Feb 2026 15:40:47 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010033.outbound.protection.outlook.com [52.101.56.33]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35b7pgm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=riwoYHUzg32JKlwqVo8kdpWiyMDjQv5Vnt5miJeZ/NsYCzvbdcq4C/TM1ahh0Z8RatYKNVOboQtRPnFPQku8FjXQwHJDtKI6i33+aweH3qKOZALEFyMb5HYMfvkaZXtKKNzpwQoKX2fS4bWP5jO+qXAs/BwStJEoNv83RWf1DhXt613lcfT6kFZMV6gWkkMVeRbHILBgbmtpyBEgrGeiH5JepPfIFLqGsdkx075jQ3qbI4TFnz9U0XG8AgRzfaKtg3u5AtPSj2ttjm5zQW5hnXEv63hPJY4sadK3ZE2Pq7YxXysuWDWeTlq2nouPYIJZ5n4JUq/k3t/vC58EQr1OaA== 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=3Mx1/DFDdsowYn9ZjwNuzOo5z1r8U0XcUKrknSZ+nOA=; b=xbfjiW4Fr3uG2JzlCu7h/Mk7sGjzU3bkZBibJ2uOFnI9+WBMtvBuwUlGrK7WeC3hc94hIjZh0LKzTTjeB9OEEWRr7dD0vHVnnhFFG9XplB1CZpbqmKR9qTd5ueL7y4HnsX6vIM+cUQcL0JU2slkoVsK5/cuDCO7KTILcurinoW9kvGwwNwy3NkzbKMGsVMFS1TASlZUULMXmBs2xH8taNOJTgKJoswggwksLHWTfY01aeW+7R4/fRmEbjEmorAqvhwzN6lL4qKSymupO7eXCWw0IAHvwxgddLRfSatQHXQs3m8ZqbyQn+l5jnpRZmUGaMEG2Ni4DPrwVq6jw/vdOvQ== 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=3Mx1/DFDdsowYn9ZjwNuzOo5z1r8U0XcUKrknSZ+nOA=; b=p0MxCWOQPohzT7T2Tizc5QFC7B8C0myNeqRrw3Ca3cQi74I3bzMnQ1ytmpEhaedFjp2rNBVJz4CPK3s6TXkw44KUMSPWhFJfyUlVjIZpWYuNj409DsgTS8fSgJFwwpEgQPcFz4SiLstMhyaAvdyVJ8TsrtxBzD6CtpSk7XddAUo= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:42 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:41 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 10/19] nvme-multipath: add uring_cmd support Date: Wed, 25 Feb 2026 15:39:58 +0000 Message-ID: <20260225154007.1033735-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR10CA0009.namprd10.prod.outlook.com (2603:10b6:510:23d::29) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 565733eb-11b5-4640-1ab5-08de74843b0b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: acA268g4neDOssKAmbgXbL3hcmkn+M92y9LuYLwlrmutryR2qEEMI7fYBXCXD/BARlWCgFcceSc26KHvsAba4fNrciB+WZiaNhqon8FMR3wOlEj/ibLnM3Mp65oPLKq5xZfM9aK8nbr6CQJrfVU1y+r/9pYJgACJqygxZczVVwYmMXyS6Urhcg8eFQzozFf6uSYpoiZ9rdabdTY8y+WQnrUm3p4bF/YkuvfWifWCt8lbthC0pQIoqQXNkAzeo10dKHr7jR5KNXzQlExpeZSwSW4BndCp0Mza9LopymMS/hwmxAB4q0gwQ5bF72a6HS1a9VqOayxdjBTEPZrnKBzSLS/pU5LK1ipMN/CwKRaBY1S0i0xS2wwQLdpbtzb7tmcGdXXHApXjjFr/g9lRqfQ3DKH9wCK8PVR+VDqLwiSXjDEN5ULU90B0JfSOvuOM+oM3VXEp3iNqqYOgeN7oEZ2GVUQ54hGyOrMKvTMxLTCXjMH1O9UOLHIju3g1asA1npMIJeegZGlv7vi5/m7v4oVtC2vxYda9Zuz1AFFwFWqVNJ8iORD0NQ18CmZY2kfmz6/GIGk5wbWeHfg27tZ4Tro2vX2Jroi3zF5Zj4lN+k0y6gYEam+Zs0F6si/IxSemqkdmArvvXJUMT8FFZioMRwmOQA0THchQ+eiP0c0N1R6mhqdR5v4hakuRKavcSYtfKmjqWAX6VKSQuLhTyDkUDiTcliHjlS4VNFi/VlDhjdRLEQU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bYMyg3cH3dw1iIKo+pNQ+6KQgJQmNs7f1lopBzchSjxdGed+MJfPq7sBH8l+?= =?us-ascii?Q?b3uv74fTikBXCHtS7mYg1iJh5Kun0zyMoUMFsL8IUmj6Yg8UJ4c3VRxO9aHR?= =?us-ascii?Q?8bl5VICOxzWyphe2f6HbdrOdHNMXxumw4SMRAjI5r5js/kc2mq75DAE4CSK2?= =?us-ascii?Q?KHlRG7UlwAtUpnn0ilKKMzEi4k2dvSJP+QZknmQR8sreYw3xFKTTiRCa0WtC?= =?us-ascii?Q?/FHll3tMWN/6exOcNGbFsviZkWutFsLalu+DvjIraMT6LnJkD9v0hyhVnuG8?= =?us-ascii?Q?B4QV551i5WrTUek+1RvfB2sYtsqjNS7P0kOjags9r/qC84x95X5PrJFDkbWo?= =?us-ascii?Q?MP0w9TzvGeR6EZryb+BsWKrWhqlyzyZF206I5nzVKAxhVQr50RGhGHjiVwqv?= =?us-ascii?Q?3amEN+AfegT16N59BYQwD4jTASt+fdb1iIaBOE3lWzKrPKN+LmUC9Rlxzhyn?= =?us-ascii?Q?jD4yrW/h3udw+9b8Uwsb9BWn8Kw7f9k/NHooyYxhFMHvWf1v6XyIFxSKrOah?= =?us-ascii?Q?Q7Z0Uwf4x08U5gnvhAVdraqwHfZ2TWW/C2sOA0Yrhxmf1BPSbiooISRxI8i5?= =?us-ascii?Q?1ad7pTqFd1UnhVaRohPTMP74oEHMAGywJbjV6Cd8PWRrwFackR9ShTYg279R?= =?us-ascii?Q?oQ1YJZhL+RFbvCeLSpjq6hrccXURFubgjkw7V6xpUWRM7utrW+Emcry46n2r?= =?us-ascii?Q?gipak0T6t1bDD7+h7nogIy1pNtYtm+Z4kBKcEaguf5InYNstpy65aZVILoRJ?= =?us-ascii?Q?Hk5lC0e5e73gaf+3hSQq0Rj0nNarvPapLsjAcve/QSFtz311BcNglYfhUknP?= =?us-ascii?Q?hIm997RbsvlccOBpQzam3HvBzbo5cIhXzxuUP7tVgLZgydbMtmreP0OZXEA8?= =?us-ascii?Q?UwnYpWdPPYrFMwH46e3BhARI+34RdeAyLTAIR3/mJkj7SnLhkPQGDXIHAMvD?= =?us-ascii?Q?Z21tejwZd2yBxnkP6tEO/m4usAR6RJ8cYrWO39HTfCdZWwqbYAah+HM5VD70?= =?us-ascii?Q?3NB6Xq+S8mD5l8dJO8w5tu5RYzDJtBIDjBTWEq8I2bQ1X/XwwQdoEnK5UwC9?= =?us-ascii?Q?adzFzrX0J8Vy4dnK8TDZ5JKnM4nUHw9nhYt2hJllOO1RDB5qX8L8WOr34lYO?= =?us-ascii?Q?4lUN4v2tzXFN9Vrhs6c4EyNtx++51KEMYW5pvvPSxE0XhLDupwfB/6GZq8Lm?= =?us-ascii?Q?dRi8LzhXHrBNLMtYbKyhwYZXbPMlNyH6KgP4Bgi2z9V0jobF6jqeitWGKP2y?= =?us-ascii?Q?ww8btwL1YzDeg0wmpmyn4e7DoZoUmUxz/NFqEQbiWI9aKGdRfppG0IsKd2Em?= =?us-ascii?Q?v5Pv/ngvvCz/ft1EmNbmklxaJTq6FvK59M4dDsAtIq8xZgIFGanYlagi0M8O?= =?us-ascii?Q?tmoMJklOEhdFMxTBPyKwv2KAoz2oSyQLvnG0n74eg8Ql219V+jZe6tQ3EvNm?= =?us-ascii?Q?AzoOxTRbmVzBeRwp1+r7QWsiyZgDRIE/2GbPaWzEJ3qu0cbgj3s19wBIubRZ?= =?us-ascii?Q?jKb9onfuFHez6vwLP4KQwRybmdVTmqtsznYNNP7npeq6aPvCpGWGpr+zXHa7?= =?us-ascii?Q?2eqc+SuHbSQ0j0nbabMjFWmhx12//0EYLUlBPyA2k2aVoUGj1WaijAqTE1/C?= =?us-ascii?Q?6lX8ccEvVSYHxFmXklcwcUo9KLwHWzNUAvtEtB8r9CT70aRclxALKYaLnRVo?= =?us-ascii?Q?/Kog0I55C33L4z6RoyGQDqLXOSsuSCfUPxbw7tfYOBNT5h8LIvsMvmBPtM5x?= =?us-ascii?Q?HAwFYO56bwxCGdky+BoZi7LFIC2vN7k=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: l/7PHBjoQJkCu2Z4ovclw747pUv2mbLyZiavMwp/zMCgeLzjTS2Yr8fImJ7JPu1GQkXge1H2H8YlHfCioKIjzUYSmLXPeplGNKLMWcehRv4L5hMmyU8GJ1koW5FcXPEtCuE95IQ4HMJF1aXKwL0GvfoRMPyB9ECM3K5Iv//Gsas0aylswdkPcDplJCfXdKhSHKRWZ3Pt1tWbd5EVZsTcux3A+nAHYg/xByuaJ8s/5SVkxvUca0CTJ3UJCfLktwSa2/AHAEDFBj5CBzghMqM+n+IUsPkjCyQHUk6+qpgzOcbkJuAtglo2LhkhlgExFdjZVdaymlz1Mu69Cyx63sXlih8MDUnv9Ze2VlyFpumUlwTjqmO44j9i8y/UuJWV7fzS69iwdsdNES/SLijv0IfZq6sS29xoZSFqfpMG6NyfWkup5h+bEYXp1IBfuVJTwpzVKEf6KVkL3CFlPEyEyLzVGB+9KH/KMZIhQnDt3IhFdbVhWDx7Fzd3eWs9jp/iAG9844km2SnclROTAueX9OjCS5meCfBwVsVomUkWNyeHI5msxtSf0tggwoJltreozeezkQFLrlnJ2i9PqWt+IPuw7JN+Pz3BLyopwqOhPqPjHRo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 565733eb-11b5-4640-1ab5-08de74843b0b X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:40.9608 (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: ez/hoxLs4UuO4lHSMAqleDxVGHSbSmWDOV9lFROxUNRQHVR/IRodJHkpyJjYFaTgoAKfRqGvqNyhM6vUE0v5nw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX064BwTmA33IB amV/9f1AckLJQXVSDeRY4dBtSmxCoy7d4NezcCfJdoimao/nSPazX801ywhAuHoapJ2IFgOyCQJ TUKZCD5z1czgZTtmpLu3fHDTcKKkmfGavv1JIa/zG+3PS3Xy50AmZWVG1eA9lza0aMICcKoK4Zl yPkuVN6+dWug5ta9Syl5739Ch2dagsI/E5uI5guhKWfYYLBAevkfy0B+C20LwoCE6bzXSeFMKh7 4DH8pagzQ7PLtXjE4K8TfOEWAXOL1TiGUdCujV1emPxDOhkXDhW13egBjcy88tu8kitmTphHpqS paoGTl9DVsV8e9z/NfvHIjGU2/v1FLf7sxcB0h+EPDXMLLI6i+oCRSkJsY1NVALgdFyC3xBigqz OTII1T9+GObdPSNtBs4kHhWe4RSDBw/oEkAxLNiXHxwrT7DWMDTjBtE+lmT31NZzrjHyu1gWZRy ZdeUeZm+wSNYJpaSpSg== X-Authority-Analysis: v=2.4 cv=XNc9iAhE c=1 sm=1 tr=0 ts=699f17ff cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=9AqYmpHzZGUCEUQmZP8A:9 X-Proofpoint-ORIG-GUID: 4YE4h-3eek2psIZYiCguAs84iDBUA8fP X-Proofpoint-GUID: 4YE4h-3eek2psIZYiCguAs84iDBUA8fP 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 | 9 +++++++++ drivers/nvme/host/multipath.c | 2 ++ drivers/nvme/host/nvme.h | 2 ++ 3 files changed, 13 insertions(+) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index 7f0bd38f8c24e..773c819cde52a 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -701,6 +701,15 @@ static int nvme_mpath_device_ctrl_ioctl(struct mpath_d= evice *mpath_device, return ret; } =20 +int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, + struct io_uring_cmd *ioucmd, + unsigned int issue_flags) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_ns_uring_cmd(ns, 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 513d73e589a58..12386f9caa72a 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1492,4 +1492,6 @@ static const struct mpath_head_template mpdt =3D { .get_access_state =3D nvme_mpath_get_access_state, .bdev_ioctl =3D nvme_mpath_bdev_ioctl, .cdev_ioctl =3D nvme_mpath_cdev_ioctl, + .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 11b63e92502ad..bc0ad0bbb68fd 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1053,6 +1053,8 @@ int nvme_mpath_bdev_ioctl(struct block_device *bdev, int nvme_mpath_cdev_ioctl(struct mpath_head *mpath_device, struct mpath_device *mpath_head, blk_mode_t mode, unsigned int cmd, unsigned long arg, int srcu_idx); +int nvme_mpath_chr_uring_cmd(struct mpath_device *mpath_device, + struct io_uring_cmd *ioucmd, unsigned int issue_flags); =20 static inline bool nvme_is_mpath_request(struct request *req) { --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 F352740F8D1; Wed, 25 Feb 2026 15:41:14 +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=1772034076; cv=fail; b=kw03VeEMU7LMqgpZPFaMBQWgxfvWPUDfBfXxV70pCUQOZPwUFUwB2qqDWnKg1ns5K0dn6/XDnQ9b4UYws7g1pJaFTfB9ecDNA7y72qznKQL+tNGQ/dF5dGxUmKvRaQe/r50P1nUfI+4itbxOcfjfRu3uQpVGdHGkTqBPJAJ9+t4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034076; c=relaxed/simple; bh=gaQzTbyvL/X/7dF6q62Fww68RTOUar5uN/YZoI1vgwg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WTaWDBKzmLegvQDjK3ToRsuMXjNvIEzxG+cmvENcgsbOtLbtKMEJm9bMg5xXypbodI++P0n6d7pP1LQgwcLnLJ7SXfQbBj3Qkh4ljXMR+mCv6TlRq+rR3MC2TI9FydAibTSXjOgLpnQ7j6cBypQML7LhFrf/bAzcIhxQ52jtHa0= 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=T1ofYd3j; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gurduigy; 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="T1ofYd3j"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gurduigy" 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 61PAYSUh719577; Wed, 25 Feb 2026 15:40:48 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=f0Vv9Cug7sy/FVm62WxPMWV+cFakxfixF0kUBW1RUVg=; b= T1ofYd3j/Mw0FNuDhvEefyMLPMDJPtVFDbHteKg5f0B+vWlLYLV3AG5m3SZAg7+X juKaVnYHir21+gStqS/ckxUYwwhbZb+vL4O1d8N6RTiYpMXnLRxqT7wPK5+KIKr+ rXctwUWBbifiKdaVbf75KHqJwbgWPHBCkT5qhFZL+hfl/guMHKtke2qyna+fnJMe j4K2rGOMBJDBJJ0WHLLM/VYB70T+gKEoASylKqwcO+B0lFyLy8xpvf8G4kAQLdF2 5v8SLzlwwwN36sK6vTVNYC/JQGyqB6/Gzxd6MxtbrgieAB87AQwyXmoiuX9MUR/+ QaYFsxDtnvRnv3fsTUpnRw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf34b6eqa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:48 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEPdlw028627; Wed, 25 Feb 2026 15:40:47 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010033.outbound.protection.outlook.com [52.101.56.33]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35b7pgm-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NX9Wlsr4sG29DH4NrNIpUaNgjt6AYMWWrmZrCsMSBTy2IgHh+Lo0xg0SZVxH2CW5/JU8GWKMC63u1er7LAoZjIVYJO/zEfb5I7I6VMZ7xypfnSphaBNX9cQ1e5xTzlXIuZ+90JtDi7xgHTs60cX74u/Y8ZJv22g0ePU2PhpJke24eQwY4mNA7OV/Jx+/qZGQIXQRp4jaumxPln+59DPIhe5o8vmqu+rjuyn2PPpBIlq86Ig1Wj4R8K4oXglFVQWM0N0CRHRhD9camudjQcVvQXnjhMbKGOFD/bFyXzAgd/9ehzP/e068UEF8n6TtxPv0bv4hquJjozOWA2yBErwRXw== 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=f0Vv9Cug7sy/FVm62WxPMWV+cFakxfixF0kUBW1RUVg=; b=HPsJOzQXCPmHkeVoQlf0xIWxw9L6s4a7fEmWOV6mffUDazgk/gGAeWQ3dbrawa/Jw/D51vT1oUsdDVng1NYYubW0vt3wVK0f83vwJSxQzkkFKBF3LE+iYWXaGiIZDFaGZ5XYxpHn3jVSaJJ/Db3JrSaHx1Y5b3ENwoPrQCorNuelZYrq2uJ4Ro6bBWTaeqCQ+D+Tg/Y4VckXj+INh0vT4TXId7fUJDsK8BWFuY02rXg+pgTZwa1Ff16dtKsHSl9oH2NeIpv7oZgG381R0chv2CV9E3XlXP0qRu0IIVwRbEqzF84iebe6S3qgvsHx7P6A1PbpggZG3D4ExVoAKER4Fg== 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=f0Vv9Cug7sy/FVm62WxPMWV+cFakxfixF0kUBW1RUVg=; b=gurduigyRMMighmCq43vMMb0GxrzC67CNaPo3iJtVMqeDViACOoinLkeR5+c1jutarWxh+QymKtDHomr3C0QaCELED4UDCakusxokON/wDDf2/JjqW1QMOUsii2laTvyrLgLCtyc0chf7GI4HbfFZcSCLTtfW8uvLp5RG3shtPI= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:43 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:43 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 11/19] nvme-multipath: add nvme_mpath_get_iopolicy() Date: Wed, 25 Feb 2026 15:39:59 +0000 Message-ID: <20260225154007.1033735-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P223CA0029.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:338::30) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 04e20985-6123-43d5-6862-08de74843c9a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: 1l9XA6KAOsBi9T7uEWALWq8XUOORmyeZ3TdnYUpsIbmVkjXR36SEX1nuY4wf15nFwu/qcMIOFqmCrmyN639mVHtKwHCCDfE+iBt4/bS8Fq3qPGEShfywqYsQo2DwHPj5b41xeah4e9iTtGTQN2Pd02lEsIhR/0BvCxnt2ASyKNRsRu5Lcx16FWzSYH3IRfXN2As6BBsykePn/xpv+g7WXzv7kbaw30K7Gse1wOyXz10XmgJGsGbz9jabjfMkLoHP7gS9K7VCo7Xv+vJwxv1css9KF5ypC4vX4COX0itZLITS1HwbarlShZVwV4FiOVEp+Ji38CPP2dNRrijutiRBmKb6Y7CKfXB+G79lBXJc0sUqdjd/jSmv7yq1Om5E5caH3QJwOigVQsCJu72w1x9m1Jj886Ko6Gg0w5BXEN8dnIK0TB8HxJaqUhymkqw2m+znCUuEWOVRnCb68WY6xuvFUg8mfKHt/OkuKdjY/iaYkJr6xr+MoHfKLVPteA15XG9awNYmeMV1v/s208QVG+bjBxm13b07iuW8YOPQv95BSxUQIQ88bRYfmOJQ+461dQ9mEcfYBy+/KnUNllvwK18ZMW5+TEhCIRnT5jlBHWeqGe4bWvEeCDvUB0TsdoHTMsImOfB/4hF4smYJ80h4fgXQcUkJnnhDU+QyYgCIBtf6nwgvqxBlJZD9yXzVh1pt+Vs1LosLIKpjECvJOjczsajYVcwclN5dK5Sr5MPSQrnWJ1U= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z3dButgZRwNnmwsKYf36b/DuiDEau3o/OAaqmT9uAknz19/M2SiIFpMIdlbz?= =?us-ascii?Q?OXqOvMXWuJ3J7f5Ae9zHvUiATfD8uY7+ep+h/g6yOZkrYCNhGOUdr6rqX17W?= =?us-ascii?Q?f722mlON6se4Z0C/L0WIwQs9tVyNGGRybrJLTupV+dx8Do7bni5CX09ktps+?= =?us-ascii?Q?5TUxr4qwXxxkPu7x19c9myuXsEs4LZrTk7paphpOepcTofQZVk7LB28qs0/M?= =?us-ascii?Q?KWQvxizgvqNk7FIsBYgJq8fYoIatgv8FyypA252GoQHG03QVd2v+NtQ9K7Ht?= =?us-ascii?Q?GHasHZvul2oLa41xkwln7DinCK4kXWNB2YD6AQN2JCkjRNBsx4H1hnpENs/I?= =?us-ascii?Q?bFWRcdOTfli2hbfizUlpZ8YjIKffUhOLMEtIiiw7b0IL4fDIiX456xOgvkIu?= =?us-ascii?Q?XT1mye56dELLgyvsgNx9EFkSjzEquqMQWUEeBO8vJMAlpAOI626yVKg26YYR?= =?us-ascii?Q?r62F/b50MWo+KXhaVbg/H89wiuH9O3kf8vjbUBhbVvgYAKMG/bOm56B2fQYu?= =?us-ascii?Q?qZTMJGiPvP3WwwbabfFc6RByyw/8nm9P2jKBpkg+WXdQBCYHbkbW0qSlje9R?= =?us-ascii?Q?9CoxGbwofVCH+5pqKt+fO/7oUXRz2BAJLrYRvbriyf11RSGzL+63XwMGH4Xf?= =?us-ascii?Q?ZJJotSOU4kNA8dQu7y55JrGlyK9l7rcBVQfHXGluVaOVZzYSxxS89GH5elgS?= =?us-ascii?Q?p5VCRERsDb7FGnDxYaMWIwBTPGCUkqbwZeFbW/i+Dz2BXTyd7sRO7U0hBQ40?= =?us-ascii?Q?JcpRDS8vNPbPr9NIVbYq2YSXrqKGTpt17kW9ZQ5XmEQoebRZhaQTnP/dHRCE?= =?us-ascii?Q?dgdMCURZFdBFMjZcgb+h57+EEusiYCfYiMi/UUQSutmAkpSfnN6A8ZrsacMV?= =?us-ascii?Q?VyDycnn0mMaAEsoyddpE9g+vpaqPfGzbT/LHzL4dWjnn0V3fZ2ir7Jp5bRvj?= =?us-ascii?Q?ZITniqzCuGa2VdyAzG2WG0Uqv1tLyOfh862mK8kYgZmAcUHURjk+IBUca3cx?= =?us-ascii?Q?QS7rOZz+ovOhL9lmpoADmrdVKq3CtCbWhQnWzZnNh3yTVfdAYUy0M4Fain3w?= =?us-ascii?Q?rEpNiq14Zwns/rhsVsyBvoXXZhvTNggxOHZEbdPFvptdezCvOISGmEFxoUPe?= =?us-ascii?Q?6XauXz1DpM6PwMvZDgu+eyPf8+yzhWq6byvKJgd7siPmHqr7EZUPEso/i2sa?= =?us-ascii?Q?SV/MQ/xhj3jbm7zlpc12G5lb5GAwuGbvjrCfKoRW2HH5Mp7ax2HyPnm+Oqqs?= =?us-ascii?Q?gbL2Zki/7SytjsviQaQQmlxaur261EE8qrwzsyI3mWLeCA2IETppKFCdx3vW?= =?us-ascii?Q?x93ks3xAa7D63+wCSYWEx7nq2aW687SMuBKg0k7mDvvBaOo1m8Xd+DkZXrEV?= =?us-ascii?Q?+VAG/zUzG9P0VFPTKjFUNgfcIg0HaLYtGqxaXJJl/V7DBauIN3kl2DURMz+9?= =?us-ascii?Q?PNP/hvQSKXx4wlAp7Ay6nMT8zMN4S6DwMuSrXOPgOH64LwtuolHSretDi/7F?= =?us-ascii?Q?xSww7vPkwROWc5UKAyn2fG8+UHe0ChcG7aAH19mSov3VCMzRjtB0QM5u3mrK?= =?us-ascii?Q?urvfOc6ZWAHMkwhcKxX2nZM8nWdIbvpumIDj4ahKKkPXfqNFOzEgRgGSw+fY?= =?us-ascii?Q?dE53FA2HKXv4FrxmWVn6cQqTxxU0uaW6KOgX2aTxoV2OMbkI2QJl681eyXZm?= =?us-ascii?Q?UOd27Q6gQcW3IpcgR9xZTytQQyT9DnIjETXZDPO8fClGW31gtkbOLPxUrPSc?= =?us-ascii?Q?4eXk2NK4yKvRn73oxT9+sOz1zsN/ce8=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: k7p92oymkZ2mmtB7FCbE9rS9IUSwR52QCUBhD/GzpzxmxEdMdLu1ZGJFLXc8Hyr5BUEG2FQiLXlF4XKo1oFpb/P9AMkZLKe69qAyyTnG3Y/vPezSib0uVSrBSo6y7s2xYgGEjn8BI/izlvi2YEZCY11eHPRSOCVDHFXvjXDS+4/pDhshTI6BthOKo1/CepqYumC2SCGLgurs3g7yL0+S0AIOqktAfF8lHUN/g1WyitU9sYrAitgWXnz9Qj/54HH4WmCb4QHXz55UM0IDwTpSfZnCvvcNMtvRikFLeleXadREWJHA4/LxRIj4+t0meh7NMsEwkUA8hm1Y1o2QJKD6bbe6IGvZeaikQ/HKC5sHoO4Fewytv+Gil+EBBOB2gW89t89xqjq/mGCZ5Aioceeq3fUrw7lnuE0wnhDAnTbuUAR+yHrI2pYPL4d8ZsZxnrAjvy2rU78A9NNlaBQvee4Cb/Er74LTGQD6vuxMu9MIWxmDekkVyHdTZTyqWpTPHTV3/Kqe6zg/vNVltkdLPffnDc9mJJQAOKzvxG8k0FP8vi0seO1iLe5ZxTBRWcnUSLMnDOE1/9MH2wwUZ+yKWhMRH/3IUH3KjlK2Ua71slNPtjk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04e20985-6123-43d5-6862-08de74843c9a X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:43.6111 (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: QFegPZtXBFipK0KReJj1fcResxDHnBLzltuGZyQOCzbOuSP/wtbsqXn/fLcz8WGypNq48uACUM6R6VJJdveGfQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=GrlPO01C c=1 sm=1 tr=0 ts=699f1800 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=J1s_sOXE37Cxi8vwOuoA:9 X-Proofpoint-ORIG-GUID: cRsMuj280zOdow7LMWCDoyor7aAanB4E X-Proofpoint-GUID: cRsMuj280zOdow7LMWCDoyor7aAanB4E X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXzc+oOBnXoX6H Feq3TGUhalAxYJ5MiMfpmwpY4sBOKDBVgFB9yS5lpF8h6sum1fbMSY1BOrEDTqIGZ0Av8i6AsLl dmZGfoz0hTR2+6jgl50lca+ZS5q6/OMuRnktTUK4JhkjHKJu9s29Cj3LxVvfgnXtE9TLS5QKAJi tb8rokqQngfbXBc6NejBOui7OHFSySq34WuiaV8gHAVsK14rbGKXaVNV/uTWFvOV3cRyz3Ub4Ch wfETw2novylDaA8/K3Lm/V2YBfwDV4OmMXiUKpU7orCNZNkmbMJpiE+xTSFQp82VMFoCwx1FMle dKY7W/gXOnezriY6MUcqcH1zbKTtOmgtBHGEzeKmHFeRo155Oykg8k9CNlSmEI0FRibE01ZQWD0 Wv/iQYWEdSoI3tcRRQpzW4aEX/j2HS46jpCvPiGEcWmTi+nnTmtCHolNJpL7MdsGabq8ejv7Rwi hr2sBVsE+QuHB07yU3w== 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-subsystem, 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 | 10 ++++++++++ drivers/nvme/host/nvme.h | 1 + 2 files changed, 11 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 12386f9caa72a..6cadbc0449d3d 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1464,6 +1464,15 @@ 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; + struct nvme_subsystem *subsys =3D head->subsys; + + return mpath_read_iopolicy(&subsys->mpath_iopolicy); +} + static enum mpath_access_state nvme_mpath_get_access_state( struct mpath_device *mpath_device) { @@ -1494,4 +1503,5 @@ static const struct mpath_head_template mpdt =3D { .cdev_ioctl =3D nvme_mpath_cdev_ioctl, .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 bc0ad0bbb68fd..da9bd1ada6ad6 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 Tue Apr 7 12:21:55 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 CCC9D3F075C; Wed, 25 Feb 2026 15:42:08 +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=1772034130; cv=fail; b=JmcvGGNGvWDGa2luObVmLnr+mJHcyr7R1eW45GIVbNzL+F23g3C8F6BYIp6LJcd/vPwDBvg5nGoB8Po4jXslCUaC5Aau4KJXOmGVpsEqOCdddVmraSa8/MncztFAK/LTMk3D91kZ56JrygwddxHqQnF68Y0ZKsScgl5tt7t5bmU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034130; c=relaxed/simple; bh=FrBVHfZCPPZQ/4hQOZOuGEWG1BewiYQ0cKUbisuZi6M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LCcbM155umCnpbcXZ2KgsbD/w0SNyB2C7wAuYOle/61XQGI4crfzwkm4nERAAHxWrkQw1uCwJ5sec2OrwN6ur0B5lYE0uz3xCYMVYqRdfOPbjU3VF+A7PF3+F7mhdvGPbjtMt4RyknI0BiQzDhPaBi/LnEyJKGXhJMZ5+53MS7E= 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=WBAGxRBq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=C0apNM9g; 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="WBAGxRBq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="C0apNM9g" 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 61PAYSUi719577; Wed, 25 Feb 2026 15:40:51 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=2dybJn/vBOsx8StXvDiQTGnBXjQQHwYIv1GVOy+AeRY=; b= WBAGxRBqNUe39HJR/14gGlkItCJJ1dbKXS7o62E2SS7zdLmU7GOaHDeCXrG/NAQU Yv11PPvY2hGss5KPmLU5Jx9Kn2GTqJsqRKS4LVRvL8rTNxzcgg72+wlv8YBLVFrU 4vsRjcPLk9k0GRzBrsa2MhCDDuO70tChrrwBMh3Tm+/nuiJx+eOhUgDxgy38hb06 BX3uJkq6MGoxSPom87xv65tDUY2OqtdB9pvPvULJ61r73hWEp8560HWg7giRc3PA 5Y1dczxNfbvNWbgP4Wc8lFPeAErl1uauNA9hQZCWWQUgMPoN1R/hDxIfWbBfW2Bk 0fyD5muJPCUjT6uECqXO5g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf34b6eqc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:50 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PF7TS4012588; Wed, 25 Feb 2026 15:40:50 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012039.outbound.protection.outlook.com [52.101.43.39]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg53w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uz3C3qJ+PHzSf5I8NAEvttsiR4EuXg49XGf8hTjfVS26yHgshKDE44meFKxPess2WWyWgkdP46TDlk+cAeIpNmBnXJjxScPhB606bOGct8K7gGzaCi0yydg760yGf89YAwMpiXIPwQNMP0Yw2lQo5FiNIGXYt8sZbb3ulUxWD3WD3cHQfJjYvGbcEHGQTh/sdEZnplBdK4coYR+1P8OtQrDEdNg2c32lLVGVQGOEt7F79LMCfloEgmlflJ4DKfpfTZN62X9WXNNi2OdJxqQFsMRoMjRA55hxISXHkUvXorm2CDREOk3V9eAHa7UiNkoGp0SliMROz96p2de0G+tMog== 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=2dybJn/vBOsx8StXvDiQTGnBXjQQHwYIv1GVOy+AeRY=; b=AEGgvTL8CYso6zeC8AmBb4TIi/WevJeMl0KoyWrhOV6ZKgyphmWiZh+4efGB3d6w7ju8e6gjBJ5i+AZN6zidOcETGdA3+gZ3KKRVxDMIFOJrHybLY+wIqJ8Gn4Uu2xqxQXtMlJ7npePfzcVom8qr08FouUPAVcSKhmV91ULEboxAFSlaUrjc0ci0NWx08eafViPCALOWqiv0nIitkU4gfnHELbhrGveymZL/kDLHCAziPyjmOJtQoUJpufIdT7Os3A64b/ex/hTcMhsFkZ3Hukt+/g/Vc4BUnnNojVv6ruIycOVWlWtZQWGm+vOvVBOMUq5UV+2Pnm0ZgPplB0FpcQ== 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=2dybJn/vBOsx8StXvDiQTGnBXjQQHwYIv1GVOy+AeRY=; b=C0apNM9gs47/WEw+5HvbGvWO4LZFxnV3277jWguEOpiyAFMPJt2BHpCkMuZ+mxT5o6Pm72s0ROdAaOpsESVfV+3maYNSvfv1KfpFZKFwtGy+DT0fbJR8bInCZWXdQtX82X9dm60BYak5HtP/cxV2PrQxKQ+MhFd2Dih81jrpqXo= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:45 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:45 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 12/19] nvme-multipath: add PR support for libmultipath Date: Wed, 25 Feb 2026 15:40:00 +0000 Message-ID: <20260225154007.1033735-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH3PEPF000040AE.namprd05.prod.outlook.com (2603:10b6:518:1::59) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ee43a02-ce06-45e6-0151-08de74843dbe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: Gwz8IAQ/lNv9qcf5WQxOj8FkPKPmGaYuDazBTsrSIhkKIfuxIEs2s5loT1LHEGHObagBI4cLIyn2bqBGidxoLhF96OSCcsTTHcIA0oa86JWHU06gSfDfQ8uxuzy1VkiXU+tuEpZ2Alta3WzWzrj28M/VG3mBZbjUrjHM7g/cZLAq6NDAFu8CXiTCuY6H9Ue6tmo//9oihl624S19dURLSMEch2qaEYQh6FloO1GPE901TfsDrHcU09bmNcJvcuQ+RkbyeObRAQuQ68Cedh3mZzAh68vPjqp0331fvDjIhTKe8yqEFTNMUWLcTcdzJQD2R+ZZ3fZ4lwwIhdff6CFSYt5HqKwzdumodYdm1uFuMIdp9AeGrU5RB+wKkZTTZQUMzMW7eIhlyXuFtiCkXRk3w76iJert4wgQglgavzV1r7ShmFktc+SFXrWaZhxUIx+ytP+PxUElWecomBpb500j4a9OwWq6nfnNcl/OmZLs9xINkdo8EZSTSwG6fY9jGz6CZT/eQu6JTUwXCVFz0dgDqs+xUHtQBzF1zAN23ZBlSdPm0n/j5KfH8MNXxIdF5iPy8lpKaE/Cgsvg4LOFuMWkQy7kMfIx7zbJPoEyhUdEw9mYZ1BhQcmWwfr9QuyDpc9CQsVwEL3ThP1bpHjHTSAaqYcaReoEaIJaA+aOEATKWQpP8klZHbpCG5+BkM7naXX2UtwuidzvCxhmHN7dKC/MZT2068prZ0EvcdKMLkpUiDE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QeSrVnRrsdFuSv+nha1qZkH/vOdKI5/RVcClsqJaSWn3Nq1oLzMrmqAKS1bg?= =?us-ascii?Q?v2gQB0hrQr3q1Gj2sE9wXqcZyJOyEtray3VjQ+6DpmRWkV/m+t94o5wgSr7J?= =?us-ascii?Q?7wwrXDvhGvz6RW17i7Gbi2GYVW2pL3/8WyGMDc1aywxEHXfRF7+3BkmbinhM?= =?us-ascii?Q?zdcn/pc4/+kxt6/DP6wDY8+Xm3rNBZF57CP+s02DcnpG6rF/2MpKMKNpvi3b?= =?us-ascii?Q?yu9bkqs47j97azg0+MoNVRhyOAegq/Y+esj+T/fv0/+nA3j0MlT4VGUv4c7i?= =?us-ascii?Q?RNi3azkOpcPQVqqF2VOJj/01LSlub5QsVbkURo+ToXLD8KU0NDJIX/6uz+DZ?= =?us-ascii?Q?3w8OjHaHsML/ahj+qwgAaGzf5ucmiF1ewcuvGh1lVDAoyK/wmkzcpZ6IfoS0?= =?us-ascii?Q?pUJQaKSI3/QfduCxRqMe2v0CgzMbYFWdDDIkVQw/CbOn2CBuYgE4IbulhV0o?= =?us-ascii?Q?b5SwPaBJpKSNoRaoksgDhF33r2m9yR9jiJkRjSXE73wBd/4qK+Ttb3b8GK11?= =?us-ascii?Q?9biYn0EpWxxOB1/H01/RSqlt+UQNfheNSr1GAeOaQHeJuexeFRmMOhRQ8J+f?= =?us-ascii?Q?BEIpqu5jmPHxfrxHwvowFN2k/4cnlHEL2uNbMWXwLypW/7SYJ5kv/3D12zTp?= =?us-ascii?Q?uPo4Dv4J62Nrndj7hEPSCAnh2Y9qtnoYDAQZw/NEfDE7xvrCQh97OVGW85Hg?= =?us-ascii?Q?kchMxxYoF7VcX6TAeNFSqOibFI2snEhHo+guRWJ4Q9yX9vk4P1kX6EyEasS2?= =?us-ascii?Q?cXA+lc2In9bts8xFbRNE1Vq4zWbgYoTKE+wqR9GeMQb7TSh2JQLfMeRjWC39?= =?us-ascii?Q?ACsxYrGI7MjHy8ss62nUgVWUIGRM+EgCNnTNlMBAXbRpsOyGzaHbACCBjxlA?= =?us-ascii?Q?4ym15qkLrsRuDND2rIXi/tMi+T+nnnlo1CmfL5xXWl+1N+dxmOvKj8aHJbu7?= =?us-ascii?Q?oXa7uBljgwLtdCpQBfyDasHRklKTArLhbbRskexsxKWVrGgHWQARdEJZfmsK?= =?us-ascii?Q?xwg6pfYGMt+++mbcScJjDggD3mDanHYJzZvQU/KiBbN+YKJ7lJZuob4r3F7J?= =?us-ascii?Q?e4CvnzPq1U41cZeW5oX+IytA7xwV3Mas5EWB3qojYbYbh7XRt2T/moBM/OPR?= =?us-ascii?Q?nQO5tfug+W4UdbkTkBoV7Ff5NC02LdZQKMCkMnpoqoapISXcg3fYG/1fQP3m?= =?us-ascii?Q?pOhdvabb8V2qHPdDDOkKkx7yv98/AGEJtYB5SC/YlkaB23aKOuYmxFsLCLOw?= =?us-ascii?Q?FGER++7GkZmCE6B0Ha1RIa+Xf4UiuuOvGr0exvmbSsiBKxC6B1NpILJjk+Gb?= =?us-ascii?Q?GBcpzu6AEMWH1LtZRtlmTAaPA3TuDL8y/fLex/CrWomm4QiRCwDE1GFhnzwE?= =?us-ascii?Q?uxexg6tm8TTcA08CqpeYXd3tR5ysm2MlNV919Sy91VtFBV3xhI8RvQVO7m5b?= =?us-ascii?Q?/nyFWQHegFc6V1zRmC0tk2uaLB+52AN+cRWyHcegJvC4Pg2dfsqDQ9X4q/Tz?= =?us-ascii?Q?08iIeo/EhkQl11bMMjskOkuJtKTQkpQafk6/eTrRbT7yaPSLHKG1CL7YVAY/?= =?us-ascii?Q?X6w23TF2P7/qrV38M+kL2LGQgKh0eaTtua1nzs82oUFIGETcuG8NrHk54Hfv?= =?us-ascii?Q?5qQOwWJ8Fzn6WYAjH6P35Zi4NaP43w1NNw2Y9Shpi3kaBsCGC4NPW8OQXUPE?= =?us-ascii?Q?beUtVyJPtm4w+A/6fxrjIvAmyHh7JYM7KWHuegqrZqQZCO614MPakZVmuqDy?= =?us-ascii?Q?mrU1PMVHGpHxbQ0ZDVO+uZUq3Rdlib0=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: LvMi17KbTMB40xs/O/Riu9ehcShZgJ3Q/xTOKJyfcBtWct5+aLaFvE8/AWQfpjCe9X9oE/26Pw130C/WWW/yFRnxlGoEsD4FT2EGFbLjLCDUaiPUd4eaLDliVb7h+yU1wvKv+nFQXk/RRtYn38FpdrQhYxlstiqUTR48tyoD8gjQVUDWDz1qR7OQGbb/CH6YeFHb8USbu1KVY3/i1F2bX6bYYOacLxc21Z/ZaqcjPtWkelDhEF+UTWaw23esiusg3xEzDYlV853Z/JtcmnTtVSUcsDmTFoHY/+AZi9tYLMIBjz+whYeHQ0HdJZcIQ2xFfnwTgLM/QO4QLyig1dZ/0Wu9xozkfM0/m/5M4DkcRNCaPwylMIqeb3PwXvSjWbISbKGzTZYp1zmnYf/VQCSgJ/oJpZdYht3RGHV5+19YwKofdSqnCdIiKsxSDwYGq94BSZEJVw8d06u+MCNj1fCpYCLfSm7hjx6Is31EEEWJVOUszeAAeni2yWGcyCgPVb9B1/mPs1YKSBMhwwhxlD/vhkRb8cXh3t3cd2BKs5Yqf9RtVni8kahc5Wx2OXjMMFOK1iWwdQcYPMNn8y0POgb0cnAASwHEd58YS5pxYbgalW4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ee43a02-ce06-45e6-0151-08de74843dbe X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:45.4878 (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: RRlBI57s8FMKd93ev3r/DlUb48R+QOOHDuSrYaQzPN2r4Tj/U7IOkTAaTMCX5XEz9IUfTihbIGNoJIqKmI8zfw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=GrlPO01C c=1 sm=1 tr=0 ts=699f1802 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=aVeFJVSm2r6GLGaMoIIA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: cMKlWq5wxMFfyR34hRKEVD0LVjXHQyi1 X-Proofpoint-GUID: cMKlWq5wxMFfyR34hRKEVD0LVjXHQyi1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXxQuaB08tzmmu 62kJkCqz/+6ABGWr8+CjI5s1h1dX/PzH0Tb8Ja0La4wQC9I10+jhNuya2E/6/KadI7d4ThkUinb Mpe+vxhjNJx/wDfGbJenT2pSpKoG+Vd54RDLkvEyIbsTZNrnBozaET+cg9RbVyxKs/j4VnKC7lK 2bs/TLPA2BTGr0qdL62HRxgaPYHBicxJT8/PCg7yU7gTNrDkXqUbPvZXYffCCmmxfNuWcFDPjl2 So7IecutSSXgb/q5KoQ8ciAZ71xYmEPlq1SsbRj0ZBtFnGVHYGmKJkakpmCdiM4lGhdBXi49PE7 kOBqCpgedNghvW50EyNF0ENNKHVRHWUEY7Z/+sresdRYVnhN5XVBnFCs1t8qQpCx2jBgBINh/Sb HoN5YXSdeS70bu9ZWbmGu3dDVWXxaUH36eSsk2P1Mzo19Ud/tKPeKCNHu/o4cvnfARTV6QQXZOW jYm+18KHKyVhiNb0HPNCrv4BwaDt6xxaHcD95g18= Content-Type: text/plain; charset="utf-8" Add PR support for libmultipath in the addition of nvme_mpath_pr_ops structure. The callbacks here pass mpath_device pointers. These can be converted to NS pointer. However, the current PR callbacks for nvme_pr_ops work in pass a bdev, and the helps us this to figure out if we are for a multipath head or a NS. Later the send command helpers can be changed to work per NS, when the full change to libmultipath happens. Until then, have separate per-NS command send helpers. The original PR callback functions from nvme_pr_ops can also be refactored to use the new NS-based callbacks then, reducing duplication. The new NS-based helpers are marked as __maybe_unused until the switch to libmultipath happens. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 1 + drivers/nvme/host/nvme.h | 1 + drivers/nvme/host/pr.c | 314 ++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 6cadbc0449d3d..ac75db92dd124 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1501,6 +1501,7 @@ static const struct mpath_head_template mpdt =3D { .get_access_state =3D nvme_mpath_get_access_state, .bdev_ioctl =3D nvme_mpath_bdev_ioctl, .cdev_ioctl =3D nvme_mpath_cdev_ioctl, + .pr_ops =3D &nvme_mpath_pr_ops, .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 da9bd1ada6ad6..619d2fff969e3 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -22,6 +22,7 @@ #include =20 extern const struct pr_ops nvme_pr_ops; +extern const struct mpath_pr_ops nvme_mpath_pr_ops; =20 extern unsigned int nvme_io_timeout; #define NVME_IO_TIMEOUT (nvme_io_timeout * HZ) diff --git a/drivers/nvme/host/pr.c b/drivers/nvme/host/pr.c index ad2ecc2f49a97..fd5a9f309a56f 100644 --- a/drivers/nvme/host/pr.c +++ b/drivers/nvme/host/pr.c @@ -116,6 +116,51 @@ static int nvme_send_pr_command(struct block_device *b= dev, u32 cdw10, u32 cdw11, return ret < 0 ? ret : nvme_status_to_pr_err(ret); } =20 +static int __nvme_send_pr_command_ns(struct nvme_ns *ns, u32 cdw10, + u32 cdw11, u8 op, void *data, unsigned int data_len) +{ + struct nvme_command c =3D { 0 }; + + c.common.opcode =3D op; + c.common.cdw10 =3D cpu_to_le32(cdw10); + c.common.cdw11 =3D cpu_to_le32(cdw11); + + return nvme_send_ns_pr_command(ns, &c, data, data_len); +} + +static int nvme_send_pr_command_ns(struct nvme_ns *ns, u32 cdw10, u32 cdw1= 1, + u8 op, void *data, unsigned int data_len) +{ + int ret; + + ret =3D __nvme_send_pr_command_ns(ns, cdw10, cdw11, op, data, data_len); + return ret < 0 ? ret : nvme_status_to_pr_err(ret); +} + +__maybe_unused +static int nvme_pr_register_ns(struct nvme_ns *ns, u64 old_key, u64 new_ke= y, + u32 flags) +{ + struct nvmet_pr_register_data data =3D { 0 }; + u32 cdw10; + int ret; + + if (flags & ~PR_FL_IGNORE_KEY) + return -EOPNOTSUPP; + + data.crkey =3D cpu_to_le64(old_key); + data.nrkey =3D cpu_to_le64(new_key); + + cdw10 =3D old_key ? NVME_PR_REGISTER_ACT_REPLACE : + NVME_PR_REGISTER_ACT_REG; + cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; + cdw10 |=3D NVME_PR_CPTPL_PERSIST; + + ret =3D nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_register, + &data, sizeof(data)); + return ret; +} + static int nvme_pr_register(struct block_device *bdev, u64 old_key, u64 ne= w_key, unsigned int flags) { @@ -137,6 +182,26 @@ static int nvme_pr_register(struct block_device *bdev,= u64 old_key, u64 new_key, &data, sizeof(data)); } =20 +__maybe_unused +static int nvme_pr_reserve_ns(struct nvme_ns *ns, u64 key, enum pr_type ty= pe, + u32 flags) +{ + struct nvmet_pr_acquire_data data =3D { 0 }; + u32 cdw10; + + if (flags & ~PR_FL_IGNORE_KEY) + return -EOPNOTSUPP; + + data.crkey =3D cpu_to_le64(key); + + cdw10 =3D NVME_PR_ACQUIRE_ACT_ACQUIRE; + cdw10 |=3D nvme_pr_type_from_blk(type) << 8; + cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; + + return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_acquire, + &data, sizeof(data)); +} + static int nvme_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type, unsigned flags) { @@ -156,6 +221,24 @@ static int nvme_pr_reserve(struct block_device *bdev, = u64 key, &data, sizeof(data)); } =20 +__maybe_unused +static int nvme_pr_preempt_ns(struct nvme_ns *ns, u64 old, u64 new, + enum pr_type type, bool abort) +{ + struct nvmet_pr_acquire_data data =3D { 0 }; + u32 cdw10; + + data.crkey =3D cpu_to_le64(old); + data.prkey =3D cpu_to_le64(new); + + cdw10 =3D abort ? NVME_PR_ACQUIRE_ACT_PREEMPT_AND_ABORT : + NVME_PR_ACQUIRE_ACT_PREEMPT; + cdw10 |=3D nvme_pr_type_from_blk(type) << 8; + + return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_acquire, + &data, sizeof(data)); +} + static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new, enum pr_type type, bool abort) { @@ -173,6 +256,21 @@ static int nvme_pr_preempt(struct block_device *bdev, = u64 old, u64 new, &data, sizeof(data)); } =20 +__maybe_unused +static int nvme_pr_clear_ns(struct nvme_ns *ns, u64 key) +{ + struct nvmet_pr_release_data data =3D { 0 }; + u32 cdw10; + + data.crkey =3D cpu_to_le64(key); + + cdw10 =3D NVME_PR_RELEASE_ACT_CLEAR; + cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; + + return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_release, + &data, sizeof(data)); +} + static int nvme_pr_clear(struct block_device *bdev, u64 key) { struct nvmet_pr_release_data data =3D { 0 }; @@ -202,6 +300,45 @@ static int nvme_pr_release(struct block_device *bdev, = u64 key, enum pr_type type &data, sizeof(data)); } =20 +__maybe_unused +static int nvme_pr_release_ns(struct nvme_ns *ns, u64 key, enum pr_type ty= pe) +{ + struct nvmet_pr_release_data data =3D { 0 }; + u32 cdw10; + + data.crkey =3D cpu_to_le64(key); + + cdw10 =3D NVME_PR_RELEASE_ACT_RELEASE; + cdw10 |=3D nvme_pr_type_from_blk(type) << 8; + cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; + + return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_release, + &data, sizeof(data)); +} + +static int nvme_mpath_pr_resv_report_ns(struct nvme_ns *ns, void *data, + u32 data_len, bool *eds) +{ + u32 cdw10, cdw11; + int ret; + + cdw10 =3D nvme_bytes_to_numd(data_len); + cdw11 =3D NVME_EXTENDED_DATA_STRUCT; + *eds =3D true; + +retry: + ret =3D __nvme_send_pr_command_ns(ns, cdw10, cdw11, nvme_cmd_resv_report, + data, data_len); + if (ret =3D=3D NVME_SC_HOST_ID_INCONSIST && + cdw11 =3D=3D NVME_EXTENDED_DATA_STRUCT) { + cdw11 =3D 0; + *eds =3D false; + goto retry; + } + + return ret < 0 ? ret : nvme_status_to_pr_err(ret); +} + static int nvme_pr_resv_report(struct block_device *bdev, void *data, u32 data_len, bool *eds) { @@ -225,6 +362,52 @@ static int nvme_pr_resv_report(struct block_device *bd= ev, void *data, return ret < 0 ? ret : nvme_status_to_pr_err(ret); } =20 +__maybe_unused +static int nvme_pr_read_keys_ns(struct nvme_ns *ns, struct pr_keys *keys_i= nfo) +{ + size_t rse_len; + u32 num_keys =3D keys_info->num_keys; + struct nvme_reservation_status_ext *rse; + int ret, i; + bool eds; + + /* + * Assume we are using 128-bit host IDs and allocate a buffer large + * enough to get enough keys to fill the return keys buffer. + */ + rse_len =3D struct_size(rse, regctl_eds, num_keys); + if (rse_len > U32_MAX) + return -EINVAL; + + rse =3D kzalloc(rse_len, GFP_KERNEL); + if (!rse) + return -ENOMEM; + + ret =3D nvme_mpath_pr_resv_report_ns(ns, rse, rse_len, &eds); + if (ret) + goto free_rse; + + keys_info->generation =3D le32_to_cpu(rse->gen); + keys_info->num_keys =3D get_unaligned_le16(&rse->regctl); + + num_keys =3D min(num_keys, keys_info->num_keys); + for (i =3D 0; i < num_keys; i++) { + if (eds) { + keys_info->keys[i] =3D + le64_to_cpu(rse->regctl_eds[i].rkey); + } else { + struct nvme_reservation_status *rs; + + rs =3D (struct nvme_reservation_status *)rse; + keys_info->keys[i] =3D le64_to_cpu(rs->regctl_ds[i].rkey); + } + } + +free_rse: + kfree(rse); + return ret; +} + static int nvme_pr_read_keys(struct block_device *bdev, struct pr_keys *keys_info) { @@ -271,6 +454,70 @@ static int nvme_pr_read_keys(struct block_device *bdev, return ret; } =20 +__maybe_unused +static int nvme_pr_read_reservation_ns(struct nvme_ns *ns, + struct pr_held_reservation *resv) +{ + struct nvme_reservation_status_ext tmp_rse, *rse; + int ret, i, num_regs; + u32 rse_len; + bool eds; + +get_num_regs: + /* + * Get the number of registrations so we know how big to allocate + * the response buffer. + */ + ret =3D nvme_mpath_pr_resv_report_ns(ns, &tmp_rse, sizeof(tmp_rse), + &eds); + if (ret) + return ret; + + num_regs =3D get_unaligned_le16(&tmp_rse.regctl); + if (!num_regs) { + resv->generation =3D le32_to_cpu(tmp_rse.gen); + return 0; + } + + rse_len =3D struct_size(rse, regctl_eds, num_regs); + rse =3D kzalloc(rse_len, GFP_KERNEL); + if (!rse) + return -ENOMEM; + + ret =3D nvme_mpath_pr_resv_report_ns(ns, rse, rse_len, &eds); + if (ret) + goto free_rse; + + if (num_regs !=3D get_unaligned_le16(&rse->regctl)) { + kfree(rse); + goto get_num_regs; + } + + resv->generation =3D le32_to_cpu(rse->gen); + resv->type =3D block_pr_type_from_nvme(rse->rtype); + + for (i =3D 0; i < num_regs; i++) { + if (eds) { + if (rse->regctl_eds[i].rcsts) { + resv->key =3D le64_to_cpu(rse->regctl_eds[i].rkey); + break; + } + } else { + struct nvme_reservation_status *rs; + + rs =3D (struct nvme_reservation_status *)rse; + if (rs->regctl_ds[i].rcsts) { + resv->key =3D le64_to_cpu(rs->regctl_ds[i].rkey); + break; + } + } + } + +free_rse: + kfree(rse); + return ret; +} + static int nvme_pr_read_reservation(struct block_device *bdev, struct pr_held_reservation *resv) { @@ -333,6 +580,73 @@ static int nvme_pr_read_reservation(struct block_devic= e *bdev, return ret; } =20 +#if defined(CONFIG_NVME_MULTIPATH) +static int nvme_mpath_pr_register(struct mpath_device *mpath_device, + u64 old_key, u64 new_key, unsigned int flags) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_register_ns(ns, old_key, new_key, flags); +} + +static int nvme_mpath_pr_reserve(struct mpath_device *mpath_device, u64 ke= y, + enum pr_type type, unsigned flags) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_reserve_ns(ns, key, type, flags); +} + +static int nvme_mpath_pr_release(struct mpath_device *mpath_device, u64 ke= y, + enum pr_type type) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_release_ns(ns, key, type); +} + +static int nvme_mpath_pr_preempt(struct mpath_device *mpath_device, u64 ol= d, + u64 new, enum pr_type type, bool abort) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_preempt_ns(ns, old, new, type, abort); +} + +static int nvme_mpath_pr_clear(struct mpath_device *mpath_device, u64 key) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_clear_ns(ns, key); +} + +static int nvme_mpath_pr_read_keys(struct mpath_device *mpath_device, + struct pr_keys *keys_info) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_read_keys_ns(ns, keys_info); +} + +static int nvme_mpath_pr_read_reservation(struct mpath_device *mpath_devic= e, + struct pr_held_reservation *resv) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + return nvme_pr_read_reservation_ns(ns, resv); +} + +const struct mpath_pr_ops nvme_mpath_pr_ops =3D { + .pr_register =3D nvme_mpath_pr_register, + .pr_reserve =3D nvme_mpath_pr_reserve, + .pr_release =3D nvme_mpath_pr_release, + .pr_preempt =3D nvme_mpath_pr_preempt, + .pr_clear =3D nvme_mpath_pr_clear, + .pr_read_keys =3D nvme_mpath_pr_read_keys, + .pr_read_reservation =3D nvme_mpath_pr_read_reservation, +}; +#endif + const struct pr_ops nvme_pr_ops =3D { .pr_register =3D nvme_pr_register, .pr_reserve =3D nvme_pr_reserve, --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 B99DE3EDAAD; Wed, 25 Feb 2026 15:41:14 +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=1772034076; cv=fail; b=Ps5I+RlVB51bf5d468zSahWq9zJhACaOS2jNPnNuW2hlAfjyaia/TY6+xHLE+0M8z2F6DO96VUio8fq1E9T5do2ihlQGWD88vPg+FxYOzz8RpOTWRT0xsht2wYGqaaDf5+pnsfg6CMDD1GPVz8LGpYtMoo59/tes9KgETqVS6Ec= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034076; c=relaxed/simple; bh=kz8FWk+HRkw8OKuuLavDc0eiwSCLSQ2KJoa8jPS4Xvw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R59Cze5ZkCiRmeVe7jvz4eMkpLDSfH6YorzC7cTjBBvdBb9VeULYhzYlAIgB7tY46y9iVEiqX3UpQHNWtegksVfwxDDcsuwWMJcnN4ypyOwSyaTFeuj7MKk+JrUs/SKPCFxGSchzjRDSDIK8U31L0qu17UQgGJgsw0AwWNalav0= 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=jaHXzRsw; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gFQs3XgD; 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="jaHXzRsw"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gFQs3XgD" 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 61PAMUCw719679; Wed, 25 Feb 2026 15:40:51 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=Di9cXzOuizicpm5xR+5OwsMxhwN5bCaE1lRjnn+4Dok=; b= jaHXzRswrTOcYnUrTDJI+BfQkh8BynqnRk62mjd+MemDJPHTYRCEzgnjJr9lV1B+ hGAbSs+tHqJu458huPL4TlABhuomP/aIDYp+6G1s9wv3GcELyd1Zqnn+XcRkrPnI E6cVx4YA3p9nHkjIuyneLirV6CHKR5zxxgi+cxWVWQIPUxdTDQJ9srWyI1tLQSdH tut1T+w0mgNn4kLgA0isZdbd5pREkEdwdao0Wq/QyzLnZu563stMCQVOxtiLnIRQ wuaOCA9ivOPTCoIZOFrz3fYRhTk/NFZvixR2F86h5X6Jv24ijziIw7yW30h81sD2 1yLE1E8mIve2qH3noLaohw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf34b6eqd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:51 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PF7TS5012588; Wed, 25 Feb 2026 15:40:50 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012039.outbound.protection.outlook.com [52.101.43.39]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg53w-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Yddy4KynqwtBohN9ae1nio3fyIqfaQGKibzzcIoiP/6UmEqYSta1/jASgcHWg0tyNkGNgd5rITaLF9VV1zVPU4rYUTQF1gHqDroZbPKq/96JZ+67kVseyTpw8OUfvJohFl+7bb7anV1YLnqHzKHwNQCn1Jvd0GVf0PktkYpPQpz6yP0IK4yXncV2orHL6XWXGj0m+oJ40R4pAPWqujF7PZ9juzw/yYjcPD+K7cc/EqX6+mauNbZxPlRQnInjj7EoznBH9xv4KkKo+meSk2vjmOHGoceuStuW3pZdW1vsN3mMXgoCMSb2AE7mGhfyi4W1XfaxBbabz+AxIe6aXEVI8Q== 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=Di9cXzOuizicpm5xR+5OwsMxhwN5bCaE1lRjnn+4Dok=; b=CEAw8jnKRAvU7SbDsPcFlvFWGz7QAfLnPKQrNrUX9y3xPkHI5qeXil7Ks3CwEeWoJUXalaKB4yI0GgC4HqnMAmfc/RIrg0t0++8DCQLOuziTSEOuq49xRwcLTCfsLOycKWpg7hMuu+gBNijhqo0Edenp8DE3/D6Ugj3fMMvn5OQL+dpb3Ikl7D0SQ2oQMsH2KYw4wZdX1UtCDrOfHi5vkqWLvhiVMKZBJuE/3hSAZTIEz3Wm5ydKk9Tu/J2b3KBtKxFDFJecuMCzSodcRvD4snS542PR86rd5141in9vRJUMhcSx6I7/QiYlYld3tlcHfjTc4KxLM3ogfsAcjP3odA== 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=Di9cXzOuizicpm5xR+5OwsMxhwN5bCaE1lRjnn+4Dok=; b=gFQs3XgDPqRt3Y2az4T6pas0r8wOKbHyO6bWK6T0lWBDZnLfZfXlJeNdlmwVfDn3k07Yold/znH0VherEbogtu5CimIdElizyuM5R5ujzRuJoqRYWdcJXYahdgPq1EVM9St08GXcb+XRIUUKOLEvChxitPng5U0HcXPpRUdsXaE= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:47 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:47 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 13/19] nvme-multipath: add nvme_mpath_report_zones() Date: Wed, 25 Feb 2026 15:40:01 +0000 Message-ID: <20260225154007.1033735-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR10CA0018.namprd10.prod.outlook.com (2603:10b6:510:23d::15) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 152b67cf-2e90-4242-f2b5-08de74843eee X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: Z+fiN6TNU4Pl+HwXYJupcigrl7gNjusDttjHm7NAPwnxGjrtHJ6FFBGVhalxI8ajyOguiYxNKYlPuVpfxwenULQTYUs+CZaPwTTfJ6p6YRzragKwac3iOaVSEvJu0ykjGiiWZ3uVP721kkBd/nKZX4sMwCxMyJvsy+fYad9D1HCatSI6nnm7bgV8EeI2tkQSU1FcjFxsMN9fGQWVJcRMONtPeC31PAjlpqHQHkMH0mUp1NNNRu30QuvIEJmeEjlsWiPJDc2z9unGp921NwBbOvCSelquGSMfK9L29PmJgqWbSGsmqBOg3QWyIbKS+A47Yr1tjVaDdYZ5cy4pmp6/994KVnwb2xPTCUsH93zwuLT1APDgPVFXWnuQLmidRECYZ5DIyrtnC0gM9AI24KMrxep+r927PQdRfainVQ//4I54QsaztfDPlh2LqVk7UKQs9frh88unq0frA7zjwKUcTDox7gk/7H3577AITbB5juqcifHERq4AWMgWzTwlNXHj5sySiiCrvKxcWoba8mqHs7aFQyH2u7KJTFBDLUS2D+92w3WhRqakKswA6EhzKpypEN5n2Bo3XbZxQbtz65OOhDe3/9afoQMv4Ck/ORbclr6NAIL40tCDiPrh4SfuMmXu3n0NCoYlS/cPmlRAdlpx6z8VhKS5KeemC9XCFESkeDaB33IpPY83iE2IoLxNk2owTCWoZ2rg8clzh4/jlIBb3N4Ia58pPv1NAMXnsvsZVf0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HSkrksDDbot3sI236psUVQBnHpvcPZIbpcALyLRpMY+g2mnG0LbWyV1v7bmV?= =?us-ascii?Q?nMBPYkxkVBCvl8RduIZ7Ip/iZkBCo9CTTNQY6lotIm8+ZGqCZVeFGaN9+A69?= =?us-ascii?Q?3NkIGEwdLUE43xqZvZ4eF5BpNrgyuNgcpaF1Apb/QV696H4jhBZZ7Z3gkI1q?= =?us-ascii?Q?ssnzlt9c/uVRZzDMOXfsH+LMRX0IOmVnW1NYxUpkjB8qpEJ4EgYpeIeTnb4b?= =?us-ascii?Q?1Z6oPObrcvJSDpkaay5eoxGS8DZ10/hZejO+dAhxBOWDv+weqyhNhbNCUwq1?= =?us-ascii?Q?u+mBTcnvwzNlzSFqCOBhNKI515MUeuQfYivedYo5eliG5fKZCusIEOF0OkjD?= =?us-ascii?Q?4oYGKN6ys36HPCIDmECAd4czAUZcMHg6EzxVeutHmNMyMpnWn6b2YlrxEra+?= =?us-ascii?Q?Pny7egCoDa2+9BYvoPa2Ed2q2zsIDMIWxWDezL0fT0THPRLw01SXMmJJB1Lj?= =?us-ascii?Q?dFnNbyMC250OVXcetz9nU7aZ/jqcslDgQLzXju5jpEAPpBUiKli8NoG9V3gj?= =?us-ascii?Q?fNoE7e76CRaTJ17+Vq1OU7ajbQI39D673wE1Dk54zhhyYbwmOEHpeQzWohkG?= =?us-ascii?Q?r/cd4aggL4rMtGTpPZ4t5d6kPK3Ulhu7c7txREwApQ5BG9RW0y2cf1A9tUrm?= =?us-ascii?Q?MXSD2/v8ppayQ08YQEsk/qzNGoOlNbbRgGNXxXJZU77KeOcCf4f/MAKqT7zI?= =?us-ascii?Q?lxUW8FteMKLacuAS8bXIkjMN7Jh9oXxrdnXQVpNgIg8L3VW9siwQqdwxZZbd?= =?us-ascii?Q?kYzbAJAYYwggqrwtOVHArHaGLHmj/ODl3AiA25sVbCG2hRQcnFuD0LRVrDcE?= =?us-ascii?Q?TdfwbXS9IHcd4lVdiC1seq2r7MDxijnwRtJ8w8TSNcMDOyy0QYVM/6PTofp5?= =?us-ascii?Q?pabU5QUM2PC7GYi4mFd81prPxsWog3pY8093g09zS2tSTNEXpUHLwZwTT0Br?= =?us-ascii?Q?n4kdn+DQ79ArWcm2/V3+DB5kPA+lvDQVPAneKgd2NV205SRtOqQScBA39YXI?= =?us-ascii?Q?GvUYtUtlkbXDD7RM0+T1C5l4S8ii8X+6x3DC7d2Z4J81EQMKewTdaftcAYU2?= =?us-ascii?Q?vJKTBRdOl22KxiatYZkR6idTMZ2b0AZGZ6B1zL0u+1klGf837GSTvqhteB2S?= =?us-ascii?Q?oyAMU/jizyYKIfQtw6H77JkF7Vy+lwGR+blQA/2835QL3tiSf6mProkj11Xy?= =?us-ascii?Q?rq9C9W6yb2qU0RhZah5S6ulb/iA6KlkRo9Bf1eLkNNd+SgPuUjvakQORfftH?= =?us-ascii?Q?6oRSsVJb5tJRHm2c+WUXa4btE3hHdSzSAx1I0CwtnVflEW0iBn57cqHEgxzF?= =?us-ascii?Q?gRThtqha3jR5XxFe0wuJaBzu/ac2Du4stPPMmPf4x3aL01+oP+rlHVurCjvu?= =?us-ascii?Q?dC5iPDuM65oRruhgoXBcsQWkqCL7TWmDmnXOGA9yT4c2J49t9rK6R+MjSF7J?= =?us-ascii?Q?3m9QYGlmx5UvGS90qLGEbaAgYDE1MU+91A311vKeY0UHmoUQN//j3008HiL2?= =?us-ascii?Q?1uIqImRzqMsYVyQU/FEvN+kPgSyrhs2ulKXJVvSvUOBw23mV+s4UQtXptlFd?= =?us-ascii?Q?BgqKlA8hgedo6qczAa+D39AMQVdpFFeapcOZ0xrs4YIg7lgBJbT6rJUJQm5q?= =?us-ascii?Q?61JIdCMGx8PzwSJJc4v+tDRInzAUq0fNHCnlFWFBaAaSvdx6o3S6I3UJeyVO?= =?us-ascii?Q?f4ygFQhUk+URpzFbkNXt2QlVeHy62EeQfeAy0kPcq1nwfkP7KWmXmbu6/1Ug?= =?us-ascii?Q?V3ctU0reJGhes5jPHz6tvOcwJl9IMF4=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: woIF1eR4USeThIapgnMxKJJBuGtztqj8b7OLf/AomPBMcAPk2vNh+JdM5VLSeSl8P3yqGdjEw680LYDb1MmE/DXBsD6t/tgpI4q2SamVS0Av1Y06Td5uELA5tJz03aEzcNPdmkEQi3BeU80pmZctrvgyqAZzwJYiCveIyRkpHU443GsoXzuY/drgYgMm4N3GVLvbin27fjthLr0W/L3RMMZRU/t7zekVWAIKeF3hTY3hBcAJdzPp0pR/z2WqCFoYqA+r9iYQnbsBtEjXmaUlx+B9uIiUWEuRZgS9JVmnoUiMvY9xOM5Fi4g7oeIEsGyNSBZGeX1wtjj+AaMftWigGJRqm/fp5SsR6FR9aeNSDc95YplF56ccX37daMLbiZ2v18hpuf3lNQsaF/ia2X1PB8F1BgpPf2j9y3l5KfMChTKFLSspIR++VDuDcJ+qFFeO6i2XlsqKd0RT9+8n/1QsmYgSkNE60r0X2vgqnZLxUy1uIbiZAl1VKZ2i15eQm1AEo6Fs2bWpN2IbZ3L2jzFnBfTChJv8OdvzbdU+zJoCb43batPi+3xWl+YaO2QdlY0AdMU96PCjxKoI+AMWU3gyUaNhch7Ksnk/ZXiBXs5Q6dk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 152b67cf-2e90-4242-f2b5-08de74843eee X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:47.4732 (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: s87Q+kZwF+UYGz9HHGbMS/hlAcbmy9cK/ajBilSOamnSS1lEOxRIdqFItp0w609D9wLSG5nI0tog9WiBsDpOjA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=GrlPO01C c=1 sm=1 tr=0 ts=699f1803 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=hvl5C5UQGyLzhhgLzFwA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: lvO-DOq4-L96xrFDcq6jyXMwBD3CZCB6 X-Proofpoint-GUID: lvO-DOq4-L96xrFDcq6jyXMwBD3CZCB6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX7XETN3d90Jq2 D1aK5zZRLTlNqjlrKDmrNAC9uSUXLMITQnTQHpFMLwAlytgpCPSfakE11ONpVuPx/4BO5jq5WpN TCPwtmnMZ+EBe6dUxW139WAqT/eHDLMJd/4z8nUQ0rlUqEh7uPyRxKNjTIjnQd/NsabdJjqhsCZ 9VGJcpBaX1+pdccJ1Q94mpbJgFbP8ZAs63lSXJyWv1vNrkyNBsYq55sHO6mZgel8TG7A+j4F7zq hDqp8a2ZT54oWxqsxScEFcOsCEPrUpZAsGsKNLnA/KJbMiDIh9glB6PN0ehYNFKvhF0VIHleDTr AkX9WPNxbP+BQBKqKBDxcfq5rAmVxfgmQwa9Ejnz4VCC8u6XCoZtBx3ynaWymbLuR6xPtIPMwGm iGNPdaN1it4IkNJeowkIJnL0YJEws/jVEAPdFiT9Q4zuVXQCWvOcxYc13RJWwra/5ngjmt+ohbV 6AjGQY43dnrBaLoWPqDHGlJkBCuIwLrrm0/SnSZw= Content-Type: text/plain; charset="utf-8" Add callback for mpath_head_template.report_zones, which just calls into nvme_ns_report_zones() after converting from mpath_device to NS. 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 ac75db92dd124..ee7228fced375 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -625,8 +625,17 @@ static int nvme_ns_head_report_zones(struct gendisk *d= isk, sector_t sector, srcu_read_unlock(&head->srcu, srcu_idx); return ret; } + +static int nvme_mpath_report_zones(struct mpath_device *mpath_device, + sector_t sector, unsigned int nr_zones, + struct blk_report_zones_args *args) +{ + return nvme_ns_report_zones(nvme_mpath_to_ns(mpath_device), sector, + nr_zones, args); +} #else #define nvme_ns_head_report_zones NULL +#define nvme_mpath_report_zones NULL #endif /* CONFIG_BLK_DEV_ZONED */ =20 const struct block_device_operations nvme_ns_head_ops =3D { @@ -1501,6 +1510,9 @@ static const struct mpath_head_template mpdt =3D { .get_access_state =3D nvme_mpath_get_access_state, .bdev_ioctl =3D nvme_mpath_bdev_ioctl, .cdev_ioctl =3D nvme_mpath_cdev_ioctl, + #ifdef CONFIG_BLK_DEV_ZONED + .report_zones =3D nvme_mpath_report_zones, + #endif .pr_ops =3D &nvme_mpath_pr_ops, .chr_uring_cmd =3D nvme_mpath_chr_uring_cmd, .chr_uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 5BC3E3EF0D1; Wed, 25 Feb 2026 15:41:11 +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=1772034072; cv=fail; b=YSJfSZPahwAon2B/53aTGP7QM1r43Ye/uyudu5Ck+RJgf98kyxsMLjdI675PSOk4vZgObsUhTA0owTpPkg3xezLrl+ewUHtavoCtX/vZtVIbFcJMhdiZNqO5B65Z5Zb6JbXatgQlg1t+YzjTuEd+bAeyHvIQRr/FaCMqLeBMesM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034072; c=relaxed/simple; bh=MGogXN6XXSo2PVEWDKDa/cy81B2LBl0WEWuC3FI6/wk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=M5lrCdO9RDRA4DB4kT5PJgogaXrqJhrd57hMytMA0TAnOexWsmEZWwwLNNMJ6S2viW7pzDwJnRcaLa87uGIrbu7ikhLJWhQNS1mytReh+w4qXFjyOGxUmfFz1tQU/EDm8jARbKC+0Wg1196Ym4chlU9d90kDyDxPMAWuYCA5SVc= 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=Os0yzAEr; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=L1bsnEnP; 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="Os0yzAEr"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="L1bsnEnP" 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 61PACiJn719593; Wed, 25 Feb 2026 15:40:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=Hi+9+hxZhVFUwGEfZ+0XjtmVPsuoH7lzw7DEo1wV5lA=; b= Os0yzAEraKN8cWhQrnY7tzomtKh9jNKI3tvP5FCFk6F81A+rNOjP+jEQdtbR6Ja6 7yCkZEmxnR3zyIIP6DaJluYc4onkez181qq7IaI9KR5ECj1tqfwKr2PYZwewDNk8 l+O8VSZp2NvV9sKpla2JpVq/2U9Xs8lfRK4pTl2Djb+HKPqbIRFAskTZWvZxnVAI CfS9+ht4Qg3Q+PM824fhg03wj6xEt+PwuHDV2tEe3UQcdVdIChy7mNoXxuq4UyRS Sv8d+nVtJp5Bdn9t+iMciuGvurJDeIp+8eXVBwt4ukwlq3cumdP33Adk7YFIx0Gw LzV6JW/eux7VkQg6jyPq+g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf34b6eqn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:56 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFTrjF012679; Wed, 25 Feb 2026 15:40:55 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012067.outbound.protection.outlook.com [52.101.43.67]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg569-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DkhQNj2P3Z60IRhI6f3LuNNzjWnxtAVzg3167E4VI6rsx6XcerVswc+WsON46ClMvgA3+bhaYGCFvdSWPoJXaGw1t3Vr7Lbbhh3xH0WXVmg7CDc2D9plozXlR5yoOKv1AKCTyOVr7L4i8DuxNSxHAEqLdEUxD8N9SsmztEKU4nOvV+TS/b3rcxVvKdHBz3gEV2OLqHiR0dx9eirocTGEWF0YJoR8JwjKpuEKRUq1AmoXwzkzonfbZnpIM/HoWjI0ELAlU+9pyM4se7K0n7/xsoZNevp+YUw0rvN+pXgWxNzWqXpPyFV2TZWsXChriteatOByyKafqlLsCEtV0hh4Cg== 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=Hi+9+hxZhVFUwGEfZ+0XjtmVPsuoH7lzw7DEo1wV5lA=; b=WfouysdvfoaU73mZRl2hpmWmhy0ksNdR/2ynWdAWbTQXdbQygvKjKMJhp6IVOj/FtNkrtB8siohoeOR7egHjz70rNK1CgYUWRC6kgiKxr6WqFV9K5AJr2A9o+uRXT+dyK4NXNcWG3IYeMRsyC6f91vgOZO6CDuSjmoq6SOUGMO7Ul8mKUI6Y4nrJm4GtFS13k5RY9xa6dC5u8O/p9gWNfUaBRUKvdULUfypeEHfXEel/eTOb2lLmOYps1ZTTRtTaTPwEM9KtXsxcj119Wgc2/LeUOs92R0WbxpZdJd1GxnyNkt6d1iRjtzPImu0cDC7cG/f64hJgsq8p+gdznFgp4w== 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=Hi+9+hxZhVFUwGEfZ+0XjtmVPsuoH7lzw7DEo1wV5lA=; b=L1bsnEnPmbNHkIwdDUEU+V2SrLnueHkK1Pu3gc1gWMwZ0ugPsKxdgB6XEjyaugmRd5Q+sE4w0HOfBa+ruGeXh9cLKhp6Dx72yaxS1eoyPFhTN+8yAL3xn+UpO8HgyLA/4COOjIXZHVbgrXL+SncW5Fgr5FZh/bae/zVhly33d38= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:49 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:49 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 14/19] nvme-multipath: add nvme_mpath_get_unique_id() Date: Wed, 25 Feb 2026 15:40:02 +0000 Message-ID: <20260225154007.1033735-15-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR22CA0005.namprd22.prod.outlook.com (2603:10b6:510:2d1::18) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 0525fad9-1f53-4fd1-3e8d-08de74844019 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: Xq7JYDtJbgz5OR9E448w2/0DrsNs91BzBW1kDdTn6zscnGkwEqL1tHG9xDusBCan8Z1P6AYxLqfyHdJNoKkZM21+ygb3CPsuKhr0uKeSkceQSvrWZIG+UjzBsJ+2daKStSnBFnfEGvsml8rdscfX727aycpJ9sLwxEcW8PtlpAqtjQeZqjuvYkOd338+rBmeDEC2Xc5K2mTOFODzulZqImzVoDJEZ5NeQOROMWq1k87uw8q0loWJooDN6AgOMM9wCE8EkTiez/34LsK7p3jSkoyvF8QnRm5L5PEK4Cq1d4wImQWv1/a7q5Io4216piFBKrn1IC/OSRwGwvttzSHvgWPkIT2wC0wVV2FUr8GowfDY7U3/ZllLmMruNNOpEQJH7I1cRSbTCjLalHyxpZrU7/qfEeNDGSivPuEOglc2oVSLhZIrBcdVyhXrQy7GtsxdgYdyfl+Y/lsStr/aGZlWolWmcSvfAg+hAtkittwvT9X1W2fXRgZOo1Zhn13Oq3YlqZqSBC8Rn9ovfF8KCapqBHjHXq1ofZCHlcLoR04YNnKYsiU2rGxuUKyQqSDoNYKV41jVbwsh+RhuUX4B6InYL68iMHpXMeKEdBnhX16ckg2vMKA5H3TgIzUONCld+80uXBbUgZR0/4RxAkabdJfPjNi2h24lYsWjh0IDU1n6LaElpwMme+0A7R+vFQ5ymlsD3LZNYXhPoI0ggzVXKk6MRRi4vQmAvVwgwePOWO/k+u0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jNublDi1rgzWc0KdTJAJ6mfzNKriUfOHparjEeXAElbg4lxAShvcpzAA5TZm?= =?us-ascii?Q?kTL+yJvhM3kKE3WYiqHK3XDRPlqMUJmHXnydbm3tnoWTmNRhH39AV9a5vLhH?= =?us-ascii?Q?J0k9SqUwH0OUH1jlvP+rwnI+z9pBc/VxqK4ERx6y9dYxCa6Rkbdwxc3vypxw?= =?us-ascii?Q?eGU8Sk/3E9XAtI+P6eq2DqDTFwEYfP28wbyCQt29eCnXsPnZDQADiWgPHzpW?= =?us-ascii?Q?pCFdHhlzAq2Y7GA5+f+AIWAF0ZbWj2SnFNofI5Uo4DKIWHk0KyJ2vQuLdIMv?= =?us-ascii?Q?h+L2xBRL0oiXYuN/HOUbNZmfThUHKHg7Mq73CwrTzU0rGxOhtxeDqF4kqBHq?= =?us-ascii?Q?yRCClcbu9QNo5QzlQhtWJDniBshor+D0/0UO17lZ7Gr3zBuyD4myi/Zu2P8t?= =?us-ascii?Q?zjQ22IfTw7r4izSsyshDkuIAfVU0kWx/vPCeubz4rFcbQMitixgMhG9OQQbs?= =?us-ascii?Q?Vi3wPmoQgQJ63/25NPEEDDycG6OlqMHPeuUNwgg3OYA2pmUnKK2QiMvc0gir?= =?us-ascii?Q?zPPz/XvGLvssi8Nsin5c5ZJjcDkJC0VaE/7saDsKXiZL/c1PcsUJ6ZRhs5zP?= =?us-ascii?Q?PMrtVwOWtAly+xOfKN+ex0WQToXa2IslZbw2sCyiKLGgAPDAAk7R0h9F7hy4?= =?us-ascii?Q?++f09ZirNmpXpeXA8eJervOthjRH8q1Az+si4QcPb9UqZNjdWovoFz/GZxFT?= =?us-ascii?Q?wa0JHoQi0dzhOas5enI1C1BYk4BnPtbZgXyyZw1m9OEO+5tYjAMng8U1wYh3?= =?us-ascii?Q?O6V8R5cSDQUzVJKl2ds2h6xizXaaUZQEZ/BDtt3HQUPvw4unQZRkp1lIvr+A?= =?us-ascii?Q?yy/fo9Us0yRyim4UPQaAyz/6W1s7HE+TwFR7YuoJb8v0maB002a4MmjLryGU?= =?us-ascii?Q?F15eVgjGfIFRNywzggy8my8UqMi5WXDqxg+KZD4J0gVyUvM/c4FCNDRf29/Z?= =?us-ascii?Q?HkhbNjv3LYKN5tpC6PeSXCFa5nhP8Mh0+Sekts6/aQYCewhdH8aMHcog61w7?= =?us-ascii?Q?VfkSkaVHBSk0GiPR8Q1rcJZqGz/apq68vep+GliDYApRbEh7F0AcGxZy8oFx?= =?us-ascii?Q?arZj58QjB2sR3j6PmxL6C7DuXNg0/NfrNxH94V7qmn9zRh8p+1BRTrbIOM70?= =?us-ascii?Q?OtlU43lwdS9Ff1+/VB2ufK7l18jHL2pF+tmPdHTXu9Q3XBtFVmqCH9UPqq2t?= =?us-ascii?Q?npSmaXUTv/CnAjgkqac9REHcBtOrj6djYHliyKhaYNkRDa5/bmDRXI9fibyp?= =?us-ascii?Q?igKfXL5LcVeBFvIM5/TRzpeupnDh1XS1JblXru6YS8AIgxvR0+nDfRafXxkn?= =?us-ascii?Q?eO19j3iBBHbqAfes7lJ5+O94K3QgINS1GKLpsTXHMO81gUofaN1yKryoOsaR?= =?us-ascii?Q?R4G1mfjcIl4gnvE7DdvG9mMMzyXfc+Qk/s/EMifFpH754g2wbDMWS1b27DT2?= =?us-ascii?Q?DncE0msLkeQCon+SUHWZSBtU9pXdKdG8gfSR7PTPN5cJxDv5SwADAFx3mD+8?= =?us-ascii?Q?hz23p6HLLdglS31BlO8khPGad1iF/azOHpRY61+o/KsANJDiRcyzFlwwYILP?= =?us-ascii?Q?TnoYUz1uUByafUIVZ/jEIZeaQITyWRnHYTvXud/JgSSPmIHL3HI/Y6gVs6d2?= =?us-ascii?Q?yqvVptUIzc5k18MSzQ9hWbjkHfLHI+EBy4ioOj01bvbi/vaDqpEvFFNTsrRB?= =?us-ascii?Q?wCqOsQPA7XPm/F/CGs8/Lldk7YWtCDKqQIVNgtIyexxfP0aR3DM6hg+8wCy3?= =?us-ascii?Q?nrIUuLyEMKOxLNv80Nyiw3Nzruzl5m8=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: JCiDnaoOAFNIaWwFw9O3ZT8Drn6qyZm0FZFKiCBI4x6XE6HNJbmLjRkX/LNw5U+uuavT8OB3VamYacNww326puFPBuPjzZZCpGNf8jfBMUicBVZIJLlDYQDre3xTghrbuy191DoKKzX22dXmU4oHyuPjLM+qgwiaDlNGP4d1gCSyVZpgrDcGQHCEIUD3L/hKHue5MZJYDgEmY+zG/rWwD4+SdCLDC08906RrEh8c2Kti5aAvMuSDZZsz499+AGXMlf8zfLHzeftWQRQ1ajs3TEgCTa8gMrnLAJom1pXsKc0ULE3MNvbnh/Mla3RhToJIpsbtV0Dh2dX8ocpKujoUItyvYyLGFV/Bx1EMWLyCSQBGVzDE/kA1hVROKrVdYWHI2ZqN4wbQIOS3Mu7W3CRnkOM9cGfatEhcLZq7xvcaPJzFhwwG9Ub41Vbfsb2V73Nx5hAPZDJSOS72W0O5KZWvn2njSM2qHNxfGnTpcNO5H3ry7mSPl4r5BIKssWErJ0L/g1Z+GLIzvVNvuq0xDrb/aGIOF1lQdeLz5mf4B5p5dnpM71mQ00YrmO5iVs/hObqpqar4MHhVIbwENasr8NObnzZEKteom3gBY1O4VXDN2Qw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0525fad9-1f53-4fd1-3e8d-08de74844019 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:49.4822 (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: WAfvhSZVmpjX98JZPeiQ3uJuRMbNYPv/BHTVI0MSK7BOuSBuoOLEpFMcU7H3aZJ3ORpedEnsZWWDrhbDriA8cw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=GrlPO01C c=1 sm=1 tr=0 ts=699f1808 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=-Lr9UA9ZU9FfJu8vAKUA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: HG95rMxTiN3aOuAFB7SKnnRnoytKNi7U X-Proofpoint-GUID: HG95rMxTiN3aOuAFB7SKnnRnoytKNi7U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX5VlVI5KSJy4S JBjtVlB7WCW7fKcwpNKPPGZwWKLYudllxlvWMhebxulmIcnchDkLc0YAKlA6lH+REHCmRUttdIl GJWqidHZKpNyxLYWo5l87NFvoW1Yu5E94b6h1XFIgjIrjVOt9Vtz3HvZ+cSZEU6sAT4udnvXJ/Q d062N784SFGD2uWx02oFQnNUtj6yBFYPRYKCuL4CffYiB2Avg5tZYbLolTR+lOmNMyeIbH6ABW5 9POCsBkHl3SMUVvtbyD3HCxnDRkuM048CUBKpCbTytAGHgvAYjCn+yC1bQy+AHOF6iGvKrzYbZ7 JTSFDS9ubkT91vJmD/JWQNtka+U6MVjMILWU/wI8LRizb25Q41X1SH/Uqc0wsEg/pk5piOUkDX+ 0102WS2z5eI7mzeeHqVxoqTkbr2Rl3O/6NBOXTXSnJu60Owd44g5mJyCnze8vm1P+KecLjxNPxu HMeF7OCNO1iOebzn2ROKvkFuyHUY2dOwCvFjXfbs= Content-Type: text/plain; charset="utf-8" Add a callback for handling .get_unique_id, which calls into nvme_ns_get_unique_id(). Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index ee7228fced375..15fba20cded67 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -610,6 +610,12 @@ static int nvme_ns_head_get_unique_id(struct gendisk *= disk, u8 id[16], return ret; } =20 +static int nvme_mpath_get_unique_id(struct mpath_device *mpath_device, + u8 id[16], enum blk_unique_id type) +{ + return nvme_ns_get_unique_id(nvme_mpath_to_ns(mpath_device), id, type); +} + #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) @@ -1517,4 +1523,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_unique_id =3D nvme_mpath_get_unique_id, }; --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 EC3C140F8CF; Wed, 25 Feb 2026 15:41:14 +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=1772034076; cv=fail; b=QQTQm13xmuFFz57PONfC8p6MZG44c3mWqAhgw5YOwgM4uyrmyn1IFCN5lC6nKqszJD4OWYK9QA3HhK4FAmHK3BqwIHNl1cUJdZr1CwwuBmaCV4CzehVh+K4CKxTNHZbNUNsmMTm61BM72JVP4OrJ6gBvBQD5qjGfv7JYU4LE4/0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034076; c=relaxed/simple; bh=d7uGeUB70faBnn9DRH5v5fVJshEEM7u8oyWuaOMi98o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=aXxdC8Y9ZkXTk4CGVdBIiwN6dh+Lsy84Q9TbNjbvRTxxo/r8E6yR9IEIUlAh2ppWkVDu3CkgYIXeDBjPVefj6Ls54kJmh4/KBD9EzMDrkB77lUSTqhRO+zCu3ZG/7J2BFtexX3dCP+GkbCdkc22leBJmbJaJuCKglSfIj59CDDg= 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=f1lOlq+h; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bhNUHe2E; 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="f1lOlq+h"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bhNUHe2E" 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 61P4BV6V1461731; Wed, 25 Feb 2026 15:40:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=6bIKVm/aBSjQkfbMcSVcnsDhnFv9T2oeDFbzLnNTSwA=; b= f1lOlq+hzQqXtLb7bnvvUaHqnfgzWYHsSvlqnd5E1OKmHer2bl+0W1NJ5sDBEPNJ HX/VZqRxXS1C2rpl56ig3jpdsfr0oGjW9R2+ln9F3u4jUk4Sj5jnGZb8foNAOs+I YcavRs5jTyZOdSL9A5gmb1BiGCN/wQpYQuDJEypL1amzibGTq3/nNwjtRI3DkF1c 1NFzFI+HN98hGLJTx2pnhHUJPG1jeVvPo1NajX/cfJxSOJtusYA9O0a9cbIziY7W mPjVvL75loDOI6IcWFsSNUqcSZEl4ftEwVWhq7xILZ/SlAPMrCZnzKW7gsBXhZ7v QqjpXMyMHThZDWqnpQAxPg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3g3pggj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:56 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PFTrjG012679; Wed, 25 Feb 2026 15:40:56 GMT Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11012067.outbound.protection.outlook.com [52.101.43.67]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35fg569-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vcKywmLK7qR1l4aA1AftZ4EM2n59PnLwfShJipiMD5Em88OXkkvIGcr9GzCmsb9XYN7FwewZQqPMMtjPeCNyZVpRkZhHW9q7jXXKl/Q+EGwQMzHIqg6GzbI/yzaHfnzvu6lhc9y2dxxCTSAQ6LkOL/snYWi8soMrtRYRdV6w5BsGzpaUHQ9wh3d5JWlJAcgAfsb6XJDwEw7sG43ozZb0uWbQNO30fYCHvT57kkVqJyyV2Y9F3+iQdmkNSzkR89Ax98nZvIN/FJ45G0Jo0PQ4qfT2VAYxgT46lg3aatL4+RcMbwCIFi2kTeMo5E6+pKt0tlTyYle5JlAAmO2AWN/zUg== 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=6bIKVm/aBSjQkfbMcSVcnsDhnFv9T2oeDFbzLnNTSwA=; b=xTqAEZO4t0Ix+CNYQWF+ciYsJSt7SohkOGCmtJUcLpW5jzghfaheb59xrLgFdOH9cRKFGtvjt4BAXbDK37uKER1p6OLd+6RtvX+7wQCeDuBqfr+JdIcSnr4Sz9UUo1Un738KX3poKC8AJY4+OXL7/66TsLfaFiUu2dtW6xjtKWbF7pvVCSjxpcAK0TgmKWfLsQMQAzW2aoIiv1e1+Cu2MBUkyrl6ac8RnDLNIn5VRVIDsPdlZYTwxcnOa2NQN4lqmGDk11Pkjp8n8Y8Y8wr6mnLgbHsgKVq7kWHIC5blmwp2KB6RjQsaBzpUo9dGcWyiGkLzu7BJl0FsuWCPt+l9zA== 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=6bIKVm/aBSjQkfbMcSVcnsDhnFv9T2oeDFbzLnNTSwA=; b=bhNUHe2ExXQyUDEO+dvzcvqCG+k67OY4CDv36Tzo0qmsjX887bEJxRSwJ+OinhFdPh4h8jT5ihK8+9DLFtOU7Vxg+P7GZRqFjNeUlAYkeIek6dSVEUiGGEkSRC400as3zljiwE2SydOwD6nV6rvnD6+65HNaTO2Vr3Aj6puS2HQ= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:51 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:51 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 15/19] nvme-multipath: add nvme_mpath_synchronize() Date: Wed, 25 Feb 2026 15:40:03 +0000 Message-ID: <20260225154007.1033735-16-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0209.namprd13.prod.outlook.com (2603:10b6:208:2be::34) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 10cc94da-417a-4abe-15c3-08de7484410d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: UZMLGmA53FRQT8t7RokHRWvqfmpGlKCsZJJi8C4hLrg32CCOdH4YrFAcKlH0KneF/6Odz4fn8OXxYZsxz/1x8TPz7M/xbQFJhyRZyy6+a4x+8umMDBjQq4n5DCjj2TKHzlGgsYkRC8PNw5+c9sM0sVlnLJQP0zTSXhsPfYQlqOoWHBb3wWczfYMmmgUamkljWO30KxDvzmveCUa6wLDNUI+GWmNeQMKYM1ksmn52ZRalYHMjwBxx8CeTzoOGGDtiEkEmEyyr4toSrsXDKo8zhxY3YBcIXMw6qJQYHXgQ/JjxWlQyujp2Gjo5c9ZTL5Xy94nz2eJeB+TCicXDVqvqyA6vmMl9uGj0VVZc6h8rqDG4bMoVVq2O7OJhumTa5JuciWzQ78SsEYmO2vTSIWAm2YR/OK8/mDn0KcBw7vxTVDH+i1TWZzewCG1re1R9Zi6zhn1CTHloBr+aIJzHya+WjWlFIvhdvFUZkgUTXyjGTmnEZyLc6RTSnVLatQR+1CIrYIeRDT3IWINjT+hs2IPqoz+Gz0dvIlBadJacdp4s4IXtVK8I8RLEVp5vJ3PQ0hQ1ECepppPlqUAqf/fox9DYpXbgY48XT7Svla9WHx05YZ67r8yqzEd+fkFAg/Oua3g88rQM5CZeMzEV/NkYv2KNPJTOoCdtevVAsVyyRg5RsVZ5/sPaY/i8d4ZDSfHV7K9uiwDJgP0e9bPavldDnDsfc0MoEFqHRu0bDVRygrKoSo4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?57YwaoIBiJkjOCB/bgHo0ftDidllx89d5XHkW3AVtKRw5EBALvAGb4C50u8L?= =?us-ascii?Q?BjiEdZSGhpb+Wpd6aPgzfNyInjYRI7ckEy6OH9VJ5RdOF274JSaATwG9zAhW?= =?us-ascii?Q?8yxOvIDrI43tR1JFEgRwab+cE1Q0dehqrjaPqtuOhWr+5BySRkUfATf/CyaI?= =?us-ascii?Q?NKFs48gyRPQcf0oAX15ahh7fGx68myTIxkozCQsHJrEngv8j2N2V7urJ2Ckw?= =?us-ascii?Q?l/KvSkKs9yeojNMz/2Wla9mvysxhiePHMQ2aaFRBsUZWXg7+RqqHCnUDPBda?= =?us-ascii?Q?CUvqkdX9pGrOUC0yUL7Ev7lAqOWlUlogUfT33NbW6Qmw2CQ1m+afjPHbNLsE?= =?us-ascii?Q?hbb6Yff6lvXJ5MLX9rzr+KzhcwGL/bDpDFe83WRBuazAJw01L1Qs/VoYDIqT?= =?us-ascii?Q?CCN2XM4+WF8kEsdXLNwm7JVTa6q1w9ft971zxcv9qfTdT5vvc9PnTbFkkCvf?= =?us-ascii?Q?43+YlU+IGjBlaZYZOoR+Zod6zskboJwaZddEP3jLfwRB58XYJtOmjhPakQVd?= =?us-ascii?Q?SWRvkl8RjtEX9MXd1JV2DO9Em7Sc5sTPUN06U0+BNuMOrkRUvmFVEJOrwaTv?= =?us-ascii?Q?MK99PPBVbNolXTYG/IN4E7jyj5k1KO+fApN6jqbBV2k+S1TWy020OGKHRDVr?= =?us-ascii?Q?EkLfzcbiEr6FieZhjCiLBhXfyMEVWPDgT8Vs+HIO0FzfJ4Oq3lv4Eaj/DZsr?= =?us-ascii?Q?4Inzz8bWrhXM4c6jRGDhC59W5J/H0x6MKNkO7gTRKB3QjJuU9xkc9cTPOiaH?= =?us-ascii?Q?l97G1LCZ0MuWxLcyNLCrFlE41V6QhRdumhgxKQsQs8bz+gsLe1Zhd+dFDrl1?= =?us-ascii?Q?VxLrT9EzV2yaZMOhYvxPaDSr0GndPfugzLBhPOX3DhT9w3roErv77lDlyV0a?= =?us-ascii?Q?26bsQzqPVhk50vWjTtUobT+AlVFGucBa72hD3YbthN8o2KVAUW41qKcHRG92?= =?us-ascii?Q?i+LAJ/YKbb1DxEfLwz6TVMMtIgIO55MI0mgReDPnaqRd9yTYF/sFM6xnSJ96?= =?us-ascii?Q?Wq3v8YoTPGz688gwRh3Y3zZMgBqt0AZVGUbQ1jojQ4xPtSe7Z6d3SL6gniBB?= =?us-ascii?Q?dSrrGcTO7ZX4OamDU3TpKyrdEAhVtwtqFFLLv1NBmwGScHy+IT2p3osMSBNK?= =?us-ascii?Q?11g1GRChPNHB4CXL0OL9hKWMXoBXKG8lrI4i+t4ZPmUwtmK1RisDadzoHCCL?= =?us-ascii?Q?3F10XwIyO3PA+AXIUF3RqaeYXMpZ2vw0FBQKuCJvMUrUJHTCeJePaRKDIbSf?= =?us-ascii?Q?nT96t+A0hepO8FUcfLQSbL16Cfr0rpFwZhwF3jFAduh4n+EcidQtp0z0WSBd?= =?us-ascii?Q?vuzcbcU/ijZ8uWAMupOMASqciw7GNNMeFj2BfKzCCBDFjYkmS8pV/u6hYWl6?= =?us-ascii?Q?NazZngHQqe7FnqhwFCrWy4GVdDsXKl6RxZEH3fDqxVjmYxUs0qtibso8ArM2?= =?us-ascii?Q?dyjwy5ubdTaMQtFclpNamL730IOsVpODYSpIGhMLmacxEliP/WpFnpzn+qFi?= =?us-ascii?Q?hKf7L+pl5EM09caR0TPnPVT2zyWU594VQCZy/di6GIueoIhf/hn7LShhmuv7?= =?us-ascii?Q?yPYPCFxKlsSYstTmIX884Kck51DE207M+MoGHz+W0PmA8puP8xXJl5NjOXDZ?= =?us-ascii?Q?kDiUSL+8w+WIWNNXmXjhXqy30e8Ycla0F82AI8tcX/5WUI5koplovAMG8WNc?= =?us-ascii?Q?MntQ3/I64bo8VMX7fYw+MVw3kBemd8nDpEHtJkaUL6NK9x4t2H0uNgRyXz4F?= =?us-ascii?Q?9y91jOWjRgtLjYqb/+z9enP0ab3p/Pw=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: J04aVlDEwDlZeYWYbMYKBkfIb5kOZOV7l4/JFbI8pIZvWp/WEw1zqpBx+C+ilQMoa3UJvTpLUyBPXdZ/I4R6l1KwXJ64EPxWOpdmGuY6MvTuolf3vE1DPPujFhMOLkpz5MYd8XEW+R7egb7NAdIDjb+fxPAetlbTOMJ07Yw95BXzeB9z8VnRx5F87UhefPn38lTGuMfkwBWZPnA/0aV5sg9sAuxW/V8AHLR48H6C7hpPnSr5o8xLbof9BMe4RY6J2vHjOTXA2Uc4C5wlBH5wLEAsEp93G1Zk72X+/5RIJ8Olw6gxG1keN8RGON98VwHQ5WY+PMj2kCLZd8ShSlQKsNzqRa/OUfYskyyAIVjxK6j9IwM5aG0ToJE4L6d8hLAYTz81C/Xkx1N7EEovHrv3rNZkosBcZ6V/35fOEFyVI7fJd3N/JaclxUIJTVsczMgynU9JmSmFzAcT3etctbW7r+HyItewpgIWFSvAP8Otu2aLdIfPajTlO4t1IU21scz/aSRUP2+61qckk1u+ws6OH2bwMCCWreWv2vceUB5yTIhgXq2gGzoenoEdeYhYb+8g8AjjHJJRnLU/Rh2LLW09rFwl8vDKxjdNdyuddcB72cE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10cc94da-417a-4abe-15c3-08de7484410d X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:51.0336 (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: SHLb1CSkPwJ22THXyZu7Ly99/kIcuS/MSDOf9ulz/u4I4M54y49PGpK4ZKZ9PfyXAWKN/Y9yykClS0gmhIJT7A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 spamscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=Y6r1cxeN c=1 sm=1 tr=0 ts=699f1808 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=Q3elSUN60mUFY1dhJLwA:9 cc=ntf awl=host:13810 X-Proofpoint-ORIG-GUID: UcZnDhh3nTLhmw86GztUvfn1qaLNzMgA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfXwJHK/1H0vMY2 I5etnSsXl/nFKSRdeQ6kpcni0DJW2XhBvSe2uxI42yVk8w9v5tLsNZm+IfjYqksJ0fU8GNZI1mQ QUV50+qqsXRsMU1JV0QOYtMAzBmsWfNnzs73mC7pECBNkHDcZDxTexSF5mbv7kJEEu0PcYTuD1N 0acocEeCFrgfrCY+XFhoSxqqUWuniYKN+eGM3CJPzG7C8WywDA3mv/EzbY4fTrNHF6sdSc7pepj 8XewiL55fsawgEiuxr5/ADznoIBx2Lv3QhwCfqPyLErtw27GxDYWF8ycEFPCD7o1ginXi2Citqy QSPcd45WrtVm4mALHL8RvCe1nGBlO06oU9SPhkBwhfbcntACIkGM09NRR2wh8L3hij/+O+W7IUB 9NLk8tefLdhineUgpIpq5+oAiXyF1TbrtdkzkGa6cC8QPRiC13dKqBGyAGzXqmi+ylT3Xzcj86C ZMLoBpBNp1EKZn/T3MYlGsMANktc/mqiFNHnl/us= X-Proofpoint-GUID: UcZnDhh3nTLhmw86GztUvfn1qaLNzMgA Content-Type: text/plain; charset="utf-8" Add a wrapper which calls into mpath_synchronize. The mpath_disk is added as we can be called from paths when the mpath_head has not been allocated. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 10 ++++++++++ drivers/nvme/host/nvme.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 15fba20cded67..7ee0ad7bdfa26 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -972,6 +972,16 @@ static void nvme_update_ns_ana_state(struct nvme_ana_g= roup_desc *desc, } } =20 +void nvme_mpath_synchronize(struct nvme_ns_head *head) +{ + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + if (!mpath_disk) + return; + + mpath_synchronize(mpath_disk->mpath_head); +} + static int nvme_update_ana_state(struct nvme_ctrl *ctrl, struct nvme_ana_group_desc *desc, void *data) { diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 619d2fff969e3..d642b0eddf010 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1027,6 +1027,7 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl= *ctrl) return ctrl->ana_log_buf !=3D NULL; } =20 +void nvme_mpath_synchronize(struct nvme_ns_head *head); void nvme_mpath_unfreeze(struct nvme_subsystem *subsys); void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); @@ -1095,6 +1096,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 Tue Apr 7 12:21:55 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 94E8D40FD8F; Wed, 25 Feb 2026 15:41:16 +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=1772034077; cv=fail; b=l/U2b+HFthfMzaUdzfcAS7gwMXZo7qp2u/yPO2bHKil7TUYZnmYdingucHg7WJcls69yJnCDJus5dzjLG8tQpaZcqM40ncbnwsrBubbQmKelAOyKsehzIzJCQkNdii+zPlCQ7jaXagc9KpcSRDEPVzXC+fPOyfIEM5axSJy8d74= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034077; c=relaxed/simple; bh=82uLIQTi8YnoPuORENdACDYbSVWe6uqqSJ4l8bjeTuk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XJiVwhbgttqmQFRTMGHzLLrHetPjO6imVAcE+QCJRwEB/JzFnUBl0O1LLoRVld4+MQwxEKjs7oyuI2mS5YvfWPDrI+Fhgz5MDl3VYSoDQzFhZRi4k+sZE6Pfi5cv2DG0X9ezhcP9xkp5CXuUxzNBksuTr/4OtyZustqz/iVrb/4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=PPCdPOe2; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=I3yJkVMf; 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="PPCdPOe2"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="I3yJkVMf" 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 61P9SM4M3927989; Wed, 25 Feb 2026 15:40:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=MpdahrpD0k6O2b812OdSrKXzfptqz6EkiYrqBTF6JKE=; b= PPCdPOe27eFqzWSWgbUvlQtiThUDqttVM7ZzrOgFj/uC6bbXETk2+EQOXM9pfrK9 4F8eHXgM2+AlSSByf/uZAd9az5C5IeHdUpjNLj4IHsXuFAdMLPIGLDZvCoAtQ9hC GmYAdqIIkJy90M9V1z+uBaA5eZ2H2+fGpiH5skyZXLHHWHurxZP+Tqo0KeDezMSZ QU4TTGhu2t/UH4C2ljCKzBcBN3ve9SfzN7ZqYopG3CKNp374dTp/LNYYuBFEYjud itu+zjd2ZhpTtyOkhSZG5/2/GXjr+J5yf/gNzDygQI7cJm7tSq/ORcWdwBJDzw1f HDMF+zve8gVMx6TgK6x1SQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf58qee8j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PF958P027845; Wed, 25 Feb 2026 15:40:58 GMT Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11011006.outbound.protection.outlook.com [52.101.52.6]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35g8y40-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jX8kO2kl3BP8534icyHPdMmTQWXoNxDB5Nnw4RQKfCuZ8em9LC4jt8c6xskBbFFn+zwBUNuzHOSup4ZcYjHYjz/KSoPGnFhb++EPuWXxa9VTIId43bnrOcLi2aAWwlGxxrD3Bxo5MwbBSZ76sYp6PF4hSYh4yC0aCcf7FyJarjHRl8Se413is/LrBdTntWF0D1J/5/3Zs70fSc/QmKI+HJztuIgvwMVINGgRmPKKoPgvk0BU6xx81hNXm+SYVfIzGafb+vcBorQ80J0pfq/a/aFehDUtPxDqmMeFoHS+d/Zq+H7gQ2h4b11jhptIJ4W2yO12rvQsvPZERftKJxJu+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=MpdahrpD0k6O2b812OdSrKXzfptqz6EkiYrqBTF6JKE=; b=NPAN3Qq2kEEukJZOLQmvIVbMBO7yJRN9SIzMHK3ZkgD51bd0qknFCV/k4RIVKcmyY/ICJKtTpDUJrWbrxQX4Mtxr5Q8fvVeRQHNRg7W1HAUsyEkMEbvseowRW+t4AVVeyeKnRAqarLn1zq73g2cLhVoCizcKWwdI7m/XhDJDQhGAR8GElbcjLjYoe93GCZOXOBwmgPFFdCtewixYO3BxoykhphZvSr4a45nsM2DSx8FH/f4IhVThBomO0bWIyElCO8dcpe9MoLNi7pGb/lm+efCbEwZHX2+YMmTcpCjbGFtaGRUt5ztHC9jsxGjGkNiLZq9jLSELauTVmuiOzyiobw== 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=MpdahrpD0k6O2b812OdSrKXzfptqz6EkiYrqBTF6JKE=; b=I3yJkVMfSN+s7HFlkOiaAoCzwQ/SHG+EJCWyK1RegmSZPB9mO/RA5a88vi6CGCuCGssYJYWkdkrbZZyCz+juyJoCW1em58yoXrXrpjdIY3f2BmDnkPSVCssHMglffHDV8c/GKGKmofTlNiHO9tLf6THQDmaLmKUJv9KwHTGmnPI= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by PH3PPF34C504C55.namprd10.prod.outlook.com (2603:10b6:518:1::793) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.21; Wed, 25 Feb 2026 15:40:52 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:52 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 16/19] nvme-multipath: add nvme_mpath_{add,delete}_ns() Date: Wed, 25 Feb 2026 15:40:04 +0000 Message-ID: <20260225154007.1033735-17-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0612.namprd03.prod.outlook.com (2603:10b6:408:106::17) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|PH3PPF34C504C55:EE_ X-MS-Office365-Filtering-Correlation-Id: 1562218c-e68e-4296-6cde-08de748441e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: udqVB+3ypUvIW9z9ulunOehhGbC7zYhAs8DkLxRi7E1RCeXBp0j1XwVh6HT06/x1rkejzY9kS42tQLj5qvmYg2um7GlMfJFu9T2hZtUt8ZneV9wuMo1ysGRoVTv5sLtc6+AUFrwpbVwtdkACgzxo4wU5uumuDC/lwRocvSnsP4esbrvmNJPQXXsOZOZu2sd1/a7VJ/9YsLHOyNoEkmG5DOjPijO2Pkc6ajNQk+qyR1I9z7MDtBeQEqQucQk5a3HMwPuf5pruVzdjgSGfniMG5RKzbPxlqR6lBJAkw4HUnhX/4yrarNjUNwCoPhXt7Kw1RYlsPgNmjEM3Msdb8GNxdvjiAVL0kRiUXaRFKE8ftFZr3hLjUPgSCshIqme9onZ5uThdLYD2qlfNXaWUoHSxVKHImWshyLg+k7DANCe/XX8zqJDqcuvm3JiCki/byvt/FomD201vpQ8TfiYHYDyrEskbmwbTIppqEu1JbCsJDu6jH2sMKeRj0qmqRJRH0LtHyZsKXvOGEKF9HDt9IQ3/MwqJl+7+bKOZElvu2IinsgZk2y/2s1xgH2GtHcDsY02clshLsixMc7YpSmS0QjVlPiveCLGW/yPHMRHRSobfMSUuVVXB3nYEU7EEApxZG5PYFJdx0t9rIjAb7tbN5OSBehhhsAdchKtHCk4lKnftADJJCvPb/pYT2WeiM0a1xM6GeNZxr4eNpSSS5eECJ/3bhv07cXtTjHmI8rbPpRs7S8w= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kyuhz0T7qFuDdBp34xo8eSHyJpfOAddiYMtI1yH1gaF2eRFyrKBDEa7CtVez?= =?us-ascii?Q?OKmkLM3wnMt5JoKOG+GMMb1V9a4KUnxGNn5Qafma2B8klLtGe0a+gd+afY42?= =?us-ascii?Q?Eooe9Oc7m4rrOWrUa7E9SZ1/oqdFA/qUCtRl/Cjtvb20IBpQlIgVgpcXF5bl?= =?us-ascii?Q?jELVUO/7gZcVRgP8HEt5xzmYR5Wt3h+ozef8RJYlTmcXmvYMIBWWVMmEdmbd?= =?us-ascii?Q?zBfRt+R66H9JpwIyczdZUnFVkP+yalJF8dwV0rWd41vCK3Z5br940iVp3s9x?= =?us-ascii?Q?dyVGcHuVDU++m+loGdulzFnMA/qJbbKIdbPCtVMr/yJKW3O0M+y+xmfTHeFJ?= =?us-ascii?Q?rXG+UOql9ii6C9bDUWPCIB/z1wkIGLJIwHlnpMdQmGRjGn4WmSNKDDi63nc/?= =?us-ascii?Q?Ui0kEtGBiOnRz8zt9oA2gw7EyTM3/1denM8TZacL0xyds0w2yV63iP22SWxQ?= =?us-ascii?Q?wDwGwiVF/skr6y+e0KPZVvZ0tX+ltQSJSgiSuv0HFBLGCxUyQtE71bHV2+tY?= =?us-ascii?Q?/H1rGqH8YfVmYQRYW/1D8s21B1lSdITZGPcWjBd+OojGDNm4GAvFvBHr1cAM?= =?us-ascii?Q?XAhSylV0PPdxVmTy/p/Gy3070eiqU+8Sm/sk/hC10q4vHAFKQ5QEJBBGb6xh?= =?us-ascii?Q?2k18nZlHW0wojA1xs1woAHNjlp+3sjhUMbbWc9bhr99BF3vMNPm/Thl6I2vR?= =?us-ascii?Q?qrAWM2QXegrz0sGyiLVcMwKodD+H5FduAr6zu8GZ4bMp1LRb9D/lOHMYgQx5?= =?us-ascii?Q?lDafRuXg65XnsE45eZ/c20VS8wCriP2oDwlbytUa/b7Suhb7Q92RK1JTYBl5?= =?us-ascii?Q?c4W7qr0pOd8TG68iBh1wWbjMtTyGn8vdJci7kxlbixYl+8TPY2DnzqgA3HJp?= =?us-ascii?Q?PuCFvKkyb8nIy4L88RZnv4dtAfyO4I2rip2Yfi4XJHhqPb1TvG1LsPPQIf5u?= =?us-ascii?Q?bdxt36WoXceAXKtnXatHD/PL0RwEt1AnbM2E7UATj3vdWjHRN85KtNFuTL7z?= =?us-ascii?Q?6/2Dm4icljzAFjdKfTZUoxczxtdROVvfJ5TK9nw2zVketKJFBBWs8VaZUcVV?= =?us-ascii?Q?lY4U4qnCAaNKBCRh7HEHNONm3R1bq30IQII9r7/+DhkIv+Po1FAlkkSQ7g41?= =?us-ascii?Q?EbmOCqTmCMlgeo//TwEkbikmlmsOXDlSvfGGFTrvOZ6XvzW9b8KpIhWvwHGK?= =?us-ascii?Q?qrQnz2cnggdZ2MClO+NQlAQIMIcovVbTLcSCBJfd3cy7eTSROd8D6csMO2+K?= =?us-ascii?Q?dWeR5HMspwi7SxhuxUQUWh35QAalLnxbPOMIj+cnF2Ss3MaaAlgX7cT7YFB/?= =?us-ascii?Q?E01s2CerqUMHU3RXpGv6CcM82B0xswA/qFm7QKp22QrdC4/tH/0NZvjegUYG?= =?us-ascii?Q?zq7nPvkDedg4cAhgj3bixyGKQjrki1gOU98G6h0L0HAUVfOGEIrMIqHbJbaC?= =?us-ascii?Q?H2EXhO74tirBB1ZfyPWsRAGqCOBXkHBWjc3IqcYSpdkT9JP0YBvBToZ9uIc8?= =?us-ascii?Q?Yc3U9VDAH/Gj+wyTow8jk8k1fOqiZBrEJaLapb7Y8RSeu9qaN9jCc6NyMPgs?= =?us-ascii?Q?ryr0EH68dV0AFiIbhS1FJVvdJevVjSLQrXvzQ4Yp1lZMODoJDv4zi5o/W3WQ?= =?us-ascii?Q?YMOTwmJo4lXLafkyX7dhV66kFGoDeBPtEUErXck/ucGTmMX8qaGSronW65yM?= =?us-ascii?Q?OPuxa5tytN+DnVo47ReQohKuVI0dmYsvFbWitDn86QpP1MH8BbkX692AmTrh?= =?us-ascii?Q?Wr2LXzDs3EFfiOSz4utfoZ0thOSqoTM=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 5MPijs1pwy+owhpoCySP17gFvFaH6FGdTt1Lc1ibImjCTNLs1CPPHWiQF3FYBYdAU9Kfv3wBc+GR72x/ZRP7gNvEIiMuhSHXzpN+6X99MUTbt/u9F3M6nbzuyr7ewZqVYXV4XXRAjJOOBA6bHNcDwxMGpweF39heREw2GWPNOC6Q5vnwRpymfTSt/tZTYjXVQRSfvNRAX6gzJ/O0dY8whh+Z55IMftaBYArnI2GU7/mP4EgXQP2y7V2aZKhmHB4wzdPWdxxr36HibkM8lSu2X2lrKp1xqNF286g7NIYarPyflfvSyV/4dv9/+5wdAsKFntsnBuNlmVWxFIV4UjG/pSjyZLCHNDLib8kEm8Pfly9Nhv1bN0J9P3qpIrFc0m/cvujpvyBF6gglSqJdE3XUucsHWGgKW7iynuSOy1CiZPTXnrhTSxnFpniMIwIrkaOj9I5aAZKPFoJDmvOEnI5jkbYPYTBsPjFU4g5mE/FpUHqQkdfNpe7NLBl0oQOe6i2HUoJKrmuB+z8fUR0JzyQwX/p4iDVTLQx7eCO3rSpRd7oE8t0Uo6FpLyXvqUTVS6jGqOxMppdLymwlIhKeQosiUtEO1Hc3CNQ9O5uOYFSM2Fw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1562218c-e68e-4296-6cde-08de748441e4 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:52.4926 (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: 6ucWeAFW4CYuO6aIUqla0X6ryndbK+HDvEQOHefbPZSek8giyOPLhx09ymLd8jZSx3LIj2cxC7QIp9GMmS9qjQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF34C504C55 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX2O1ff2LskfaH n313B/mBhrcTEujqGR9Du+Q3AW/FHkGM/kbFhRl1I8w4f0wP6Qsgoq9lu+WAP77nzu68o9ExQgi B0WW1x90SYtHVwcskDziLD9TcRw59vsEyqWaD71WlKZfHRGes9TTWUjsyzWjWhR0bqn5Mgq2Ll5 vju4DKfWDx8HhxtHzgWBqVcR5QjPIJAL5VRZaCJuJ5YOyYA9Fsu5cNh8iCbBoVfsUr4MsNXZym4 KNFiU7hV6zDfZoJHN49/t4nrB40TBLSMtBtVogsG7F6Cjd6/T1xA+nGgjN5MtXTDG8JtO7uIiOP oRHJ6hCFN+xY+J9hHMVo6G4fsqvpnQiWibj0GSeQtq6tm3hYWgxLu/k3y7WWWAUrKxFoWdGh5mi 4KgpRtwNHtVgWe6irmSo6EBsxNZwfzSA2KgGtX0ibJclmzK7IYurLcDre1F2o5c9UG1KVMNEUgV yx0qifeGJN+YBr6INcEQg67IJ+Yzh7mE4oFAq21w= X-Authority-Analysis: v=2.4 cv=XNc9iAhE c=1 sm=1 tr=0 ts=699f180b b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=Xn93PK7WjqZmNzYOTbgA:9 cc=ntf awl=host:12262 X-Proofpoint-ORIG-GUID: N-vvZat4rh2JjBFOMIZoV_-FBnPLZvO2 X-Proofpoint-GUID: N-vvZat4rh2JjBFOMIZoV_-FBnPLZvO2 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/multipath.c | 26 ++++++++++++++++++++++++++ drivers/nvme/host/nvme.h | 8 ++++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 7ee0ad7bdfa26..bd96211123fee 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -982,6 +982,32 @@ void nvme_mpath_synchronize(struct nvme_ns_head *head) mpath_synchronize(mpath_disk->mpath_head); } =20 +void nvme_mpath_add_ns(struct nvme_ns *ns) +{ + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head; + + if (!mpath_disk) + return; + + mpath_head =3D mpath_disk->mpath_head; + + ns->mpath_device.disk =3D ns->disk; + mpath_add_device(mpath_head, &ns->mpath_device); +} + +void nvme_mpath_delete_ns(struct nvme_ns *ns) +{ + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + if (!mpath_disk) + return; + + mpath_delete_device(mpath_disk->mpath_head, &ns->mpath_device); +} + static int nvme_update_ana_state(struct nvme_ctrl *ctrl, struct nvme_ana_group_desc *desc, void *data) { diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index d642b0eddf010..3c08212e4a54f 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1028,6 +1028,8 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl= *ctrl) } =20 void nvme_mpath_synchronize(struct nvme_ns_head *head); +void nvme_mpath_add_ns(struct nvme_ns *ns); +void nvme_mpath_delete_ns(struct nvme_ns *ns); void nvme_mpath_unfreeze(struct nvme_subsystem *subsys); void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); @@ -1099,6 +1101,12 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctr= l *ctrl) static inline void nvme_mpath_synchronize(struct nvme_ns_head *head) { } +static inline void nvme_mpath_add_ns(struct nvme_ns *ns) +{ +} +static inline void nvme_mpath_delete_ns(struct nvme_ns *ns) +{ +} static inline void nvme_failover_req(struct request *req) { } --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 D18B740F8C6; Wed, 25 Feb 2026 15:41:13 +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=1772034075; cv=fail; b=D2bTtJZ2LEseGuVv+VPteqDeTx1cEiI76UA61YYIOOEh6/OI8uPPuO8PdZTikJHkOik1szV0XR8aYrrMRsrua7y82WG0dcs31EuAPe680SnNlku3j+EkR8m2qik3HZvNxj/ZfLgAJ2UR2wGctdMiRdt+d6QkZQX4GqSG3jvyqk4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034075; c=relaxed/simple; bh=A0HtuNQ6bwFt/y2PFWgQpxLUkl0ruip0zf1CQstXKKI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=imF+nstLSKem/pp2N4blDJqrbL4b5g0UYer0EOhcPSbbY1gBG1zCQ4+oSz2ICwhg0vx98fPbjkPOkRBd3xuIaMfubRGJ8h6ME+b8NNYCPr7dzL3gNeArdpP81o3KkuxD0stCayuxUKCE84MVIdOO4CwPx0ZENLynzGdkfXHMzbo= 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=XfSI1zFA; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=g5sfsCcH; 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="XfSI1zFA"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="g5sfsCcH" 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 61P9mnOC553428; Wed, 25 Feb 2026 15:40:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=jyJ9tDNPGJSjU1ot9ENovKaf9Y9VHqLmJmyb6yfs7tM=; b= XfSI1zFA7M6Sc8KqOohuoz6Adaa+tHAtrumzkK2OxEk57qhNuXFjH07DsWoA9ETE AaqwXcbHcCoyceADt04x/D+yVmQ0MG4gsmHTVb/vCk7PsjbzqdsdT90XDN1LIwF8 uDzY/mBxpP3Y2sdy2X5Vtz8HfFYPZj1TMKD7PNO9YtD622TVyPK23RNcNJIl7PTD V2oF+XukIHREAcQxr2gA0maBMDwm6l3twAbaFZNhKWc112qMXAIvElNiBU07LM3A F6FdDw5evcYfe8qi52BmsF7cUdUh1pOqNTVhPipI7DeEXMI5CSoP2GdcgGbEapZl JQQ9uANSPHHGPkOLA325wQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3g3pggp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:59 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PF5ckj015907; Wed, 25 Feb 2026 15:40:57 GMT Received: from ph8pr06cu001.outbound.protection.outlook.com (mail-westus3azon11012055.outbound.protection.outlook.com [40.107.209.55]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35bfruw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:40:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YorvPBGUcB06ItrL/gXozQsQopJ33QzHKAKEd0Dz06/lytPBqBFXnQz6MMyyVZF4c+bPqk4ZmCxRCdc3gWxxPWHDKVMV2REUwDsjTUdAD15AcDdAsFeZVZt0ayecKJYTluO8HVjaN8AYWj2tc6f/rkzqpckAMZWFGnic6UtcdaJZxiNXcuuGcU4Wh+eEdo6vLAnJnkGFE5H877Zg5c9xspiCpV85QDwA8/UjVp6QV7pbPs4a+dpR+XIzHkwEok19y0sFon+GwROTndcc6XQLmqT2Xvw09dXHAMg3GSDoOg0fm4dnaWugqZCsOBhm5QJ3sWtgjCt0tIwJmwPx8+t3Tg== 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=jyJ9tDNPGJSjU1ot9ENovKaf9Y9VHqLmJmyb6yfs7tM=; b=Je0BwnpiPh/tvNrMFY/PJEs+xCyp7agK84KynbV6PA+Vn3Fy3RoX9APx5wmcx6brzWKyDYdETXZo+pzPhFlOcloJujHmCbjKThoxDPR++ncWb40MemRuJJHY52h0F4XozCQlbR3fKZNOzW6HaC7Hctj+Ag7AyfRm8vyIDGRQRjHs9jCoaPkCEU0HHuclmSROUnB5dUaikvjjMjKmv6vDqw7m/vm8kh0ajkOR85dqscaTuy0Mnu/3Ocdq9l4m8hghhiq3CloD0L2LDLMbERbhuPnUKRm6uzNtmfQLtaOAQ0bY8KLeuel/XyMy734DHpPUlEUQATfeCxdljcdyVVkiaQ== 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=jyJ9tDNPGJSjU1ot9ENovKaf9Y9VHqLmJmyb6yfs7tM=; b=g5sfsCcHNeiCCoQTOhQaaFDjqm1hvOOyHY1iyCueTqZQVL+zK0ydSMpC7n4IDcl0XEe8Q3qmxT4D45DXKSjKw46A9B8TmCIG324XekpwnrPGgos66uIQBii8Gp/nkNLfLjxx+36cUkygVi3vDtLg8/NRBIW7Ho/wOD1fGpSXMKM= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by SA1PR10MB6319.namprd10.prod.outlook.com (2603:10b6:806:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:55 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:54 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 17/19] nvme-multipath: add nvme_mpath_head_queue_if_no_path() Date: Wed, 25 Feb 2026 15:40:05 +0000 Message-ID: <20260225154007.1033735-18-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0467.namprd03.prod.outlook.com (2603:10b6:408:139::22) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|SA1PR10MB6319:EE_ X-MS-Office365-Filtering-Correlation-Id: 4dce4b93-9d47-4c1d-bfdf-08de748442cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: 1/3Db6dBFKiyAgHJkHcln688pm5+Eqes3k2X3iRR5W47xfcFgU1HOekMeOGK13P3YBk+/uxF2P3S/zKcJmTeK/BQWAUojayOiKfBWpU5fym37tAIWqwxOLKZIsdAp+vwJbLigX/R0IrwkmMtPk1pSZD21K6LujeBIxD0z+yZexHUhTswoHHDjlwCmOm7Pv2u+7aF8WI0nhHlZcuUF4Ovp9R6Oer8e9py4N4XmxK34lWSbPjx2ifBGbOfsMMnt+QEFL8DVDwsUhtxaghz/1OVrvbpYLhz5tOMrxT0qeRTR/GnsmGkKhMWHqGtWhLLhnZSKhKQpEecRKX939ZYIO83x9H/LoCMW1Bi8BqG5xJ+fN+1IFzgNU+LN6YNAycflizAJmn9SIiVCEA+dB7UKEKsJTv08qIxGEL3HOacmqQ9Cs7zyeoUz89iMR3SHqmTwkk0O3voCjWkaDk/W4aw8DFOErJwUvFLCnKRPiNS0DBm3r50gRSeuiQc6855YoQI6nXD/a8P8nGANLqNzrVG7mutKxDfNsnacwKykY2s81WPGxlBDZczxw86VKnhPLpDC+WdBEodrvwnh9HzWt7zuRmuf/lj6BoF2f3iQdUBauUegEl7fkc6YLrCtvtk2VMAJaId8dvtbgVYi586Xcq0LQP/coCWgM0ghvcCGEe09CvXRRXTLDaYUVzxZ9iADTNO3ih0kgZcJN9NsvdZ1btIgIY/Wie83GMKjKuaKl5aU5h/4cw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?13V5aiiSpIA0sPnQxLWFF+43imPmjEXWqG2QulFXt/jpfm2NdoDqI0aByKou?= =?us-ascii?Q?75sc66Z5GcomSYrsXp0hzXugNM/AOBXZDK5yCJmnvN7PGnBzbXZCrgaHd7Ti?= =?us-ascii?Q?K+qMoTgtsjcLXkjCusEPZZy/YvKNsyNWAtWw9yP8gHSnMKFn4UqbkHHDW1R8?= =?us-ascii?Q?uwl2Dc9STLUWMQQ/YJ4qZnD+adZp1IrokWa8dCSP9tTX02SSY4Nbxm76RVzx?= =?us-ascii?Q?PjYLE4clfnyt2eA/HChZ5/5Ubyh/akYbJKaxuCuupSgepAsvfQne/p3HFtHV?= =?us-ascii?Q?uqvw3n1Wbqg5WCQZ/P2Hh3tRN6rpLfeUm3VDbNQ4qHmBtqw9ZjxjMxvTLyEA?= =?us-ascii?Q?efp/fiTJjA8NII6Mn0w4u87pwzvw3JcPgvrVNZYGwoAv4QHaIbh6b/5VFHB+?= =?us-ascii?Q?pD3o3eRaDI/eWhF6PgC5+9zdp5DjmrQCA78OLnpVi0wbSCcAm9qQt/ef5dN0?= =?us-ascii?Q?gDyIpRO6yucibrbfjPuBd/qNeHDfOIgVOMWjvqMbcYLTmprTkENOMFksnE4C?= =?us-ascii?Q?YCqFyUUSO/yRp+QjHHeNUPUF0poX+lBUcPndyoDzTYxvF8eoFBMS1EdZahZF?= =?us-ascii?Q?MedvX+lnVpSKkUIJ2tmd9H36pOhcdwoMTYoc8FUhNBTwjR+bigymplntNjAx?= =?us-ascii?Q?8oBrlelhEQLwM1JcSDomhJE+rN0pJKPDcf3RmfemtOIl0PAThlOmUssvNTE0?= =?us-ascii?Q?AAwxKykTmyrPKruWKsNVsM5yISTkz4i7z8oZPIXv9NREA7y6fweimqUZSOhr?= =?us-ascii?Q?4mMDJ7cJwbD7+9X598LU9lblRF7A1vl0NLi30Q10sE2h8ifuOeFtGFsz53/S?= =?us-ascii?Q?5E+gArdO5A+I3m8yutpfrclgYKhkbkQXGiNCKyJPk6Uj2Pwr3qcUlRoRVZC/?= =?us-ascii?Q?RMw7nWhIQ4GsMoNQrNgj6XXePHPu1QYXvbvAbkMbOm+xJl3KDAjlu5WEz99h?= =?us-ascii?Q?R7oHTgYq61HS+/BEEeS86VBe2i90byiQ/InuCn6oAoB2jaB8X2uASzNdxyCB?= =?us-ascii?Q?WMiXXFL2cWg5VgnQlywBvIMai6iePVAaE9IKV6Gj3fVx7zEHhWWl47qHJzNW?= =?us-ascii?Q?2RWy4/bjrk35qIfijhzPDhNpsp5ynTsBItrZLAmj72nmOR7EX4jS7eUIRiVg?= =?us-ascii?Q?Iuu0aDQWI4egBHrAqPsXAAWGzOcACbYMnYzXdrT9LtMwsy608UVglZ8FX5Rp?= =?us-ascii?Q?tb4S3HMDPP5O3nlx/wt6SnrOgHliNbx99UNQk6RnPaF3ykFTR07yT6lOLs0v?= =?us-ascii?Q?ghq3p4FvD+/mxY3aISE6yRrmbWfcAVdF25V0iSPfQHV8a47/TtcPYBco6xOf?= =?us-ascii?Q?sffPeJ/rYTI+CJMSEft6l6NCM2tubFdqe5oA+YlwXoxvLb/PjtnmI6pbw4mP?= =?us-ascii?Q?bvTSeAtc194SfuOx4tQ5XDr2Us0bfjPdB+ROLDn+oBVb70tQJWYCjglWeH/6?= =?us-ascii?Q?N+vuZYDlrhPRg0r9bo3TxuW/8vB+kZY7LymHsrGTPSMamYyCdnwUGNEL4yAZ?= =?us-ascii?Q?LQcBk3EjzNgB1FbbV05G/Ng+rlaV6y1KzOpceHzC9pJu5j7NOtuwpr5jDBAP?= =?us-ascii?Q?O76X2ZKN3czyEyyUaZjNghSMKoKJzyYd2os+tNDMTMQ2zp9FypFbG5cXkwjq?= =?us-ascii?Q?/o1t9vUB8cCXWxsvlrRxclIFA9doY8xbbn6t/qrnja8wttyximIp33TMmDVp?= =?us-ascii?Q?06KLChD1wKXdnaSN0jedsepotjnlJOb6d4/J1Ht4Nvs4h4o7w4mvYe0S4mEH?= =?us-ascii?Q?fCfUwcUtyJTB0aFdP6VadVansuFtORQ=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: p/mVjyFxCCQD7S1Ke4Qu1zSmEASYzaxSMg2cjT7RnEmbk68QsMOI9nq0xujAVD31SvSM2m5E5BdaS1R5R5wAuuEKqdV+BtTBmE71gmIgsEV7Q6h9BgrBPdtHwhtlzIUFar079uv5KfKPr9laaxUh7nUjQszFXYtEzQr4nIy9nYzqaWlUi5fFkIdG0aVmwDVGuQr/B3gzeVpstWoiW5i1sgssR/wJxRPkHsauXhqQKT7Ts6bLDL5ky4qo7UphuC5GR5HF9XENGcS3MXJOeI3ZmmWb8v3dc5OzjOUkMYUWhxJYBTPvnk41+kl4wWuPfj6b5pVV5sNqPA4rkp5PuDtcouSW9xHJyKTEFpWrQJSLw0DpHiKKjk68QzMJ5U8ASsXfhxe17W9DSnwOcP9c6uUgQlHjlNItkkxO1pkCAxaz4k/JqS6byNen8CWzYc74aiYxEL5GPoZYl4C3PUG7NoHXNQvkerfOgk5so+llKHcYhRy0tg54xpFXzg4BiRALjWLz7oMoeE/KwXF4aXjYrUdL6GZxCPf9W0M96b4xH5Uom+UEW8CRDsDzD14l4RJijOIHs/tL7YAJpAUmo7O9M+QwezaPQi666NXiGy1gbSxxFXI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4dce4b93-9d47-4c1d-bfdf-08de748442cf X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:54.0117 (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: RVC/D30T4dRq7jyH233vCYZVHiOGsx6W1C/KVHl75teRyy32MmX+sxRehosGaGnqICDR6hqRZCOzuF1L/fqrKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6319 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 malwarescore=0 spamscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=Y6r1cxeN c=1 sm=1 tr=0 ts=699f180b 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=Jlb6IQvdQG1jHNWhUt0A:9 X-Proofpoint-ORIG-GUID: a5CeMFIexoHmMc-eEw4017X5lzXaVg5- X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX4/QMbDBGmeNa GZAiDTmW/OzA+krfethCDdJu4IyqkXq6kfnYX7EHod40xlid0fDPCQyW9PaZUIJqWo+7qTd9LMN /V7dRp8GTSPbnHWPkEinwp8E2MH7fX1aCgBRoTTG42uzLUzMnuimtoLrF2vcAtZ8qxqUQhUbh+t bZ+p/bUumKdMNL8cVkiqd53IQKf57K4g4Bt56912Q/PEcVE153njXMl3/nyiyNxadQqotdaGAp5 FgnQxoI1uc8McTNbY8Ev2hOHtLE8gh/+r3E9rq8M519zHPBQ5QNEnk9XoWGLhQSnS+M45pJQTGr 7Yi6703Vnu++WbvZKPCfiixJbI78Fda4Aqd7lwxB0/1fV6ZjPR9S7nmC8+im6oLDxxE+lvR3HjK Rq41FUQpFH9V98i4laHyDBMa0we8AIwjiqniv8DQMSraWckM6qKVcNFUPAuIQqmjWDxG5yGNl62 ZiyBeSu2VPmgBLxD9EA== X-Proofpoint-GUID: a5CeMFIexoHmMc-eEw4017X5lzXaVg5- Content-Type: text/plain; charset="utf-8" Add a wrapper to call into mpath_head_queue_if_no_path(). The mpath_disk is added as we can be called from paths when the mpath_head has not been allocated. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 10 ++++++++++ drivers/nvme/host/nvme.h | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index bd96211123fee..fdb7f3b55a197 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -214,6 +214,16 @@ void nvme_mpath_end_request(struct request *rq) nvme_req(rq)->start_time); } =20 +bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *head) +{ + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + if (!mpath_disk) + return false; + + return mpath_head_queue_if_no_path(mpath_disk->mpath_head); +} + void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl) { struct nvme_ns *ns; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 3c08212e4a54f..e276a7bcb7aff 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -1052,6 +1052,7 @@ 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); +bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *head); int nvme_mpath_bdev_ioctl(struct block_device *bdev, struct mpath_device *mpath_device, blk_mode_t mode, unsigned int cmd, unsigned long arg, int srcu_idx); @@ -1196,6 +1197,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 Tue Apr 7 12:21:55 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 60449413259; Wed, 25 Feb 2026 15:41:21 +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=1772034082; cv=fail; b=lF3RXha5Jyv8mDOcRrqWoyGg6o3d8nRaU3LJZajQTek0D3q3wqCqqYiFpScQKIQN6UUyBcCH/bSDy7ZWnX6rkjyqfb8WGk0zYVqdIQHQW6IOrVdZTjB0wW1XtGxirXEQhpi364CCreCvlI8UyMXVpar+GhBWfZeKYHVg3u0fDpY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034082; c=relaxed/simple; bh=WS1kZSWl/fCKtCmRMZb9YdYmbjKOoFEFRBHdWh+nK8E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LOTIRjBV0GSB71uAT+B124s81uErL7cTPZaRtCIP/uWCmZysy49ab3cJy0v/HTwNmC/isqbnAPLk09+KGXAYjmKR0zDRoHNzkr12H978A5XgiOMKXwFwH/DqaUARRC8ATCf6cR/Nfxp7YTocnP4Xx+Zsf8EdysVYy3NduqCaEYg= 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=eOkPE/wT; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=JPvUl2sN; 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="eOkPE/wT"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="JPvUl2sN" 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 61P9wt31359631; Wed, 25 Feb 2026 15:41:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=6TnP7EGk+XWBF+XXQQwdakC4NOwFWDgTYTOguiucEfA=; b= eOkPE/wT8xD9FX5s4noN2Yw0ys9RTFC8Q7H6drtzeNXWW615ObCTPrWiIGGzMQf2 e5HgvyEx6ispkphvjXV2+72NOyVE05Ea64DWsH/j4k0SjgzLWx46XpX/DKU46J+h G+gS3RfKuTzl0c6+oFS7lbg6N88KG46xAoGVB8ZqEtbb29H0iJVez9kLLIbKD1m2 gcxgZf4c2MH0VBsfx29rMZQC+ZQ4j0M5RgYbGJ3v5Sa6icptIuic1T7aaKsy3o9g lNYNQVt6vAALLsEySbwk22i+MiEMB/o20WkZ6SpUroMyKBlOWRN4C3cSIzRaii0o JVKHh821GXCV3edW0MOT4A== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3m7xftu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:41:06 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEE0dm006327; Wed, 25 Feb 2026 15:41:05 GMT Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11011013.outbound.protection.outlook.com [52.101.62.13]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35bgejk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:41:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nzHI7meBspKYuzl1ECDOkUmKQepz16OSFXKEWZ11RZxfxzA0M+7IBPaBIAo53IAJ8T7DifZVg5tsRvzYr+U7PZRECkrZAPJKJom5LfFqN5sI6t0btYs/yGOOCyhGIyFKJyp/st3VKZNSTmh8jKM4CHUK6cWxah4tzWA+JG++81WmqrLBMzLcuRKDJ0GBTeK0ckzrLSqcU31Z5K839d5Ji07MRsOz5b2cTpBc6t+zO6wnLfGIyxY+Gu3JKsCiK8mI8vfbbCdCKN0xoa5gUQhIt0XuDu5RgsqTa3OLzOl3/kajBScprptEThVnyiNs+R5OIBG3I+9m/XY30OBQB8CRIg== 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=6TnP7EGk+XWBF+XXQQwdakC4NOwFWDgTYTOguiucEfA=; b=WTU+zz3xY3D824Kcccb8k59VYvqj9vWQrQ4m1xUlj1JkatYCCPIRdAPIsVlI6ESG+uwlAv9XDGJ5DsDVMN0KwxfyPUvdTnWdq4ttIdsmCybgXeN6rvftxeZgBDQRWGbJs4IzH5uV8wUDe+pVlrH7QTqb+Riz/oKfN+I1fLGBNpf2LR4Vabgi6k4iOq+Me6BiMVD3GGzT7UcI10b7S31W9rBv+N5l1NOGymC4VYImahYaQmrl5GFlLQoKymrmq4JB709sI07HE74wyQIsbABsTfcKprusB5T6S9O/kgW0yG/vMpMeAV3wgZXiKe0Y8+w2cKKKhyyZVTLQHan0szuGGQ== 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=6TnP7EGk+XWBF+XXQQwdakC4NOwFWDgTYTOguiucEfA=; b=JPvUl2sNcNwArujU8XZmPJcfNg8oTb48iVH+69gKM1E9q2jNGi2wddtaFAkLLmN2NQXfEra8qbd3yKMNwpRXE1feRkHEwHITn+9Hx7FsSnuy+Q7BsUSs1DZpwIY7Hcr9S5IFeeLfkF3WgRFpLwyRUvrv1iMj4ue8RNTeZUtfu6Q= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by DS0PR10MB8149.namprd10.prod.outlook.com (2603:10b6:8:1ff::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:55 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:55 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 18/19] nvme-multipath: set mpath_head_template.device_groups Date: Wed, 25 Feb 2026 15:40:06 +0000 Message-ID: <20260225154007.1033735-19-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0616.namprd03.prod.outlook.com (2603:10b6:408:106::21) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|DS0PR10MB8149:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ee733c9-2be1-4d7a-78c1-08de748443c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: O3NLLbFUQvRm3DtgEEZqnRs5BOBheDUc4kKb1kuCHLHTZd2nc0AFX+z7gGW9FEsI41FWErTnCodSiNSOlfnVohH0GtHgu9aGaXTOyS5axlez0URckVcJOgTNavwsJvBKLIEpKunPdfLjZtWoZjfDMX+tOzFGBBlo2k8zuBfpc1U14B4TmcNOHRM8BGv0DBrRLNcs6yz0V51xv8e25oV8/+ZObD6ruIiSy6I52DBXQZoKLjksQSMO2wYEwnTv9kc20/7kjCRUwWDofEhVZrzk28NsqIXDuOcsvxI369vAUX0zl1QzrNnYzqRvGOLxZ7nSNWcBHURMwb9mDJxSyPbyZtfxS3+VYbV+7ZqFKsxUUAmhK86K0l1r/85wxw+NxYX6/dCM/HDnwIn/ft/8f0Y2w51sCnQaiSfMeQpsVXyDSbGcPx3bp480fYH6q9oxQq71O95hfsQlAHT5Klq8xvP4OrhyLX9BvJAhoYUg1r/NLiJMR3P3H41C+zdaBo7mOd89S6PTVDN7O7Prprp4Rn6QkcDy5aElvHsvGHMuzip+FX1HXEvglT4epuYUZ7zJvYw3DentOsHRVjEvwerUqAAmX3Q21glgB394RbR8gSPcXfPCr1X0Ho3izPlRW0mxnbUbZxPlBATD+I0No0fA+JafRFVWucZDg1+y/8cedkBRRwbm3ou6JVrtwZRLOKle16GCwG+VI5AJ1xCSzTI/FB1muYl3I+N4s/lcLyya1EqsVsw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+gAb9HEMMW35t6MyglH7vJXAS8Cd5818hveESJAIe/cswfujU/ya32mWKQiq?= =?us-ascii?Q?n7lfjQoAJ3omCRbAmcyp0Lv2aekzrnc/+UUnhbrh86zPBsPGjsQLK2J7iaHo?= =?us-ascii?Q?+cnokLC/KoCTCsNNVsYXOks4z5VdzEHjAkRI0bPhIF1r7nNAihTbCBb5JTDd?= =?us-ascii?Q?G2nVvX0De+sOybiFjNeqOw3DS2yS3aVyhJOYWziMUVzQlQrIVOdG+zz+t01A?= =?us-ascii?Q?hAQ8SBTuVL8QpbPyNzgW2Pvj+Dk7aKXPfhLTlPF/u3yx/jSqA6A6aMgoeOqd?= =?us-ascii?Q?okqz9Db17UjgW64tdCogzgvfIvq3M0hYuTiODModKAFzUEl+K1WKFGzxz5K+?= =?us-ascii?Q?qPT73YCQjrQm9ZSGHKvjEalmCjUgVOjNi92jQl8KkjPVZqek0gcALl9NhqiD?= =?us-ascii?Q?I3IKY7bMlzcuhoagpJFM2crZFui7d95p8gegf37xbC/u7hgHD//vILx4C8q5?= =?us-ascii?Q?JrTSC7lDDBsoqH9nAbo0YOsLdNZ1Jx0QlYG7McmeubPGhqmRszHjOKiFNJtl?= =?us-ascii?Q?oCSomw+gbYReHM5hNWkxlDAt1KJoiwORig2r7OE1nN9Ftd3rrP+SOXPB45oi?= =?us-ascii?Q?3yVWLAB7jnmm5Od5lpuSS6MyJ1tNlLLI1WFZF1w5Kf+gAqyoxWRhoeW/4Kq1?= =?us-ascii?Q?hpaKqCnJc5X2rxk2VA65wbaJG0XFWizWzjUcyfyd8RI1tep6soBMOqCAJjEm?= =?us-ascii?Q?EUJQjBz6lrtAP3o8JTyZJgnpHRuoeyjIt1pQ3GhNB2SGPFgvjIcF2dfqP+UX?= =?us-ascii?Q?U2BV7fd7KY3WbJum9xe0NDCL4AofV2fqWwhS/kG2jUsXav7lLSdurU0ymwEi?= =?us-ascii?Q?21aEYfftq+ttUtVeR4i5qVYxCVma76Ln0Cud5oxtY1kW0429e3Y3Vz1sNa/t?= =?us-ascii?Q?wo3Ei9JhDdKNVsP6KIQDPqT5I1qykEgE1c4ThCesurp3LIY/O0ItrJ/Vo02Z?= =?us-ascii?Q?6wRixmyEesvNpswPtbSvYoMLvcwYtMS/DoqPnCpQ+1JrUIbx7j6j79jBzm8F?= =?us-ascii?Q?HZLyX5LTZ+VUiVu/DwqQEG2x7Hjs7mGQ+IzDCxLva/xYRwyX7tbiqFiLDKDy?= =?us-ascii?Q?A40ONXBwnXArvGaIXzbyJkVf7HsfNwnUsJ0xW2G1HLmp36zgyrBTbkD5g15W?= =?us-ascii?Q?kKIniE6r1qv74a6irhirInjFaPKQ+ACpWWFouPT4VSIIPlfJs9LeOWZqUXDa?= =?us-ascii?Q?3y+NFK1aC3kUAaEwlqckLEopWkrE89uLAsSJM7Jk/kE87Srh5WX6PNoaHMAu?= =?us-ascii?Q?wlCePvK7oB4E0j3lR/Sz60x5rUp7V2yboL7hM3zTk9NEVLGzrb7kNA696d3l?= =?us-ascii?Q?1FpoyXWEXRYxDARczwpEt9KgmoTWTh9XGvh/ClpALhgsXgt39QZbwxR97ih4?= =?us-ascii?Q?oWkN0KxU68PBmQMxGpE94ITryxT0sTaUlTrKi0DYThJq59Q2SeM1hyfwpTYj?= =?us-ascii?Q?EKUqTycVFq3eMZF2f191Cf243AcJiYV4yKJ5rUch3b2BZPhQiBqpa02i3Nt7?= =?us-ascii?Q?n1s/mbVRO1wmp8wEIp+VXfd1QAPdpfS30Oc8fwMHRcvfrw+JOywzNOn0pbLe?= =?us-ascii?Q?h7KvsKOLQYyysMtd8PiLk1VfG6WswL1hAEJ1RJSLjgJ1+cW96ynn1RaI5Dwu?= =?us-ascii?Q?nNcHn3Kry2H4BLVOLoxVqTuFgPVY5CtznVG/6IkfIB5rgfrriAECjj/bh9TQ?= =?us-ascii?Q?xoS8CioVS+QteS8A4ZcfWgVt4MwrqmdJqnUCQI1t/2AzyJLNc7DTQ1b6Xwa0?= =?us-ascii?Q?Ct5EhuLOYYZRiU1To9WjoWLYvVjbPgQ=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: VDV8LHxmtX9MeQY0cMPj3zpASpTSRYDMJ8nJojQqpHCdqRwaVdS6FEq3xLRCBoW7uzzg41n42rftEBHabGurIlp4kUqOuG3QaZV+24UYgbtwjOMPeExd+zak4FRNxd0Vpc4n9fcT+omIyNuLBH60AoI10kj6jSXVGWCPHOy3J4qoDSPRD4BV+ZIlgUlthrBLtsw3Rhfj/6EuBeoiIzLR067RO21692PB27c+TuJuxeTpVmBFTRun82yNKPTMrYqptOIth0PC5GpSC53pjcyVmFDny/LG/kNEAu3ULyNX7d91S/ah7aQmpo/ZEp+pKY4pwR6r6rK029Ek42OGW7BEn1YDrPWnbOQM4t2uCHr6qcg4jLn+yfgx/LRoyhwb/Wga/HbLUxFfgWwZmG2UnIWOWjpTQETQw3HSW8al1ndD9hGITJvuBbHXMhRke6LDWUisq7H/79xDYGVQlKVpIw2lwsK17Xc7EKY0zlIi9Cz2F53ht6yADUEEWoLt1I0pCFsNEhBqsukHi1F07WvnO76slpnU64Y8AApUR8qRHWij83XLL90el2BH4Nu9zeriARMBu6Y0C5Rsi1l2oZxVTotRAJ5b2vvYLtbSphj0kr7l+gI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ee733c9-2be1-4d7a-78c1-08de748443c2 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:55.5518 (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: ejK+MW6qYs23Gb2Ycr4XsEb0dVt/30gh5jhSwvQ6mREZU5aPuqJVqvOa/Rl5wK2R8Cr7LhWYDKMO7Q6F7f7dxQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB8149 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=O5U0fR9W c=1 sm=1 tr=0 ts=699f1812 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=VmATWuChC3tPMlDHdnAA:9 X-Proofpoint-GUID: CnivKmfMi_8c7EUd9iAB6nA0OxWSzdUD X-Proofpoint-ORIG-GUID: CnivKmfMi_8c7EUd9iAB6nA0OxWSzdUD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX6H13iVrByyzU EdfSsZN2PO08kCaYTJ8YC9DQDxwqrQfb5AnWaixD05zovTkWQB0lsXt6Ary7GwoxxbVee1s+Cqn nOSwQzs6XXopLzsUMPZeLixWKp0Q/6e0StoSgCOLEA65yMan0V2rMPd95Xldm9mJZ1b0nche5ht tsSj1p+jQFsmQZmRqMJlDwWBxFc0ss0DhxZiBLq0kLdR/cB21KpgraTV3gs18pf57t7UzxEmCtH IrSCjCQ9NDXkOKCCDrg7pMIid8adiH+H8Jq/17dVVOUco1m+5XLVCZFnhQJscqFHywJ+c/U75EJ MS9l0quPfivHtqBX+43aDd38uvUf3BF4p5ec9NCaSDW7JE4kBjyq1L2sRj095m3nODUKjGvfEaR DHTmmgQtr/vpVGEFfTZyoTtvZw5E4JVcvbn3o0jzLc6VEei7EESJGoCvRhnAEoC56Ma28WDrlrI 77lhGRQs7phq8nZPtSg== Content-Type: text/plain; charset="utf-8" Set the instance of mpath_head_template.device_groups to nvme_ns_attr_groups. This callback is used for setting the attribute groups in adding the multipath gendisk. Signed-off-by: John Garry --- drivers/nvme/host/multipath.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index fdb7f3b55a197..081a8a20a9908 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -1570,4 +1570,5 @@ static const struct mpath_head_template mpdt =3D { .chr_uring_cmd_iopoll =3D nvme_ns_chr_uring_cmd_iopoll, .get_iopolicy =3D nvme_mpath_get_iopolicy, .get_unique_id =3D nvme_mpath_get_unique_id, + .device_groups =3D nvme_ns_attr_groups, }; --=20 2.43.5 From nobody Tue Apr 7 12:21:55 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 329FD3EFD20; Wed, 25 Feb 2026 15:41:30 +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=1772034093; cv=fail; b=B5YOhJTKtOTX2pGW1bUdK2t8eZLFZEBrO6Ba0sQ+XV6m9pn2zpBl2+dc73VSymiBJcZE04nHAwYDnxp7Xsw6O+1KoZce1h3CvoSKpHERQtRQAnpYatF1sNl+siSnlnBBdGa+BxCijXWJ67Nl04XiE4xnmCpqb18D3yWyPwGzeY8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772034093; c=relaxed/simple; bh=HC3D/f0UoT6eSpm94EmK/tTh0vQLT+Uq/I4ZG1pFYtw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pLjywpHsUlzZFpFJhEs0979ioPsKxgxk45nS3RTyiwejeA9UV2M68dCj6BbdVDm3V1mV4TVCPb39zIPmUym6AkKsEZ1fD0mXKUVimid8qwy1gOEY9dDtpSuM44e7j/0ZsdXENyJsJZgjYVE3h8KP5zaalqQ82+x3xF0BLj0Fe7w= 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=ZQH2Rjes; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=LyIX4aXd; 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="ZQH2Rjes"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="LyIX4aXd" 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 61PA7oPC553150; Wed, 25 Feb 2026 15:41:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=vSDhqDcSXZuFj9C7JKYiAPMtBaETJYAU3gwFkDdXyjc=; b= ZQH2RjesGBK06GiRAFjUYuSCiMevtNe7nXrojZF4XnnU/FP+8fIUIfG3dt1K+duS 4CBgmQ63m/Pg+x2npc47U8IDtWVSexS+TYmF9z+YD3rpGc94hJ7I0MKnpucoKRWZ 1ZJRIeWWVR7EmSzp57VPkyZtDK+YozCxAa0FgEvwHI2wBxESgleFocb+/lCrF/d/ DjYasRcOvdNBpBqtfg6R4HuTtxBL6ru3b9J8Blyk3iPyaO+71pkCnDotgCFCNW4Z uc67nGsw7y4AlI7BZHF/ZXiNkyKU9uhn94oeDnSNlx+LbzFbcs6ditB0iIHflYf7 eOih+xNs0gatSu1dEy0ZFA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4cf3g3pgh1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:41:08 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 61PEE0do006327; Wed, 25 Feb 2026 15:41:07 GMT Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11011013.outbound.protection.outlook.com [52.101.62.13]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4cf35bgejk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 25 Feb 2026 15:41:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rdtuiB+DCHRzUVo6xo3VyqfiYIJDK3BW4rZg0MMtc5BlPhFhzXKcXTByyv/Qp//m0dFrvBMPDkOuTnHU08cmC4zR1rTOazQdumCPCpmmt7rTf+voTVpZrLloiPDNKukv+zAx3IIkPCJqUqDGJJq6ZxUs5fT9F2lwOStJlroChfvaRHDsg6grOMcdNk4yHY3Q4zMzgh+Kt3RY1+VVDx+brlBD533ncdf2tOeCbGev66westW7AwYVNlEhgTrzq5H2pk/a7fKT79HzrGDzALhat4IylD96yWp02zXWjCABq5+t6mCDMazfLk002l7uLhG+CbjQ+0BB+byuou1yod+06Q== 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=vSDhqDcSXZuFj9C7JKYiAPMtBaETJYAU3gwFkDdXyjc=; b=Kv1xtynefORUqmkLqLvgUMlO0T8w90S9wF/ZvIqOE/oG3Gi2LpQv3rgfe8FC5MIL297MpLnTCR+9VDubVGCIli4u2e4JU34CW/Z3uF3XzW0XwyLJfgGQ/O1Aote5bgP8XWuHbtan3Oz2kt2I4GCvRvaFgoNCVKU2q+mp8WfCRG0xswJkPXQIY88fforvDU1F2vyVJnXx120+Wog7GtNGxge5aHvaADaXBnYPUZ4PM5/t8YJRP5X5iQR5beG6bAeCj7MPklibb6xHpc6Nuc4fELHilHf8idKSWXXVNFlnBNSRn25mmGab8O3qeJbetaCzIfxHn0j6H88pslCD0L2tKg== 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=vSDhqDcSXZuFj9C7JKYiAPMtBaETJYAU3gwFkDdXyjc=; b=LyIX4aXd9O4oS4B7Pu2ja/3eezobSbxJ83FThwlfxreb7eeyVIrPXmS3ncPBomMiDLJrPs0a6tDyAasBEPGvOMHQOcudIoRx947/bSl8511u7ljPZ2aK5hvtOV9eBTxETOMVDQ1aHQgbnUPbczrWjFFfTL4awGYURly1XuPq88Y= Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) by DS0PR10MB8149.namprd10.prod.outlook.com (2603:10b6:8:1ff::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.11; Wed, 25 Feb 2026 15:40:57 +0000 Received: from DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a]) by DS4PPFEAFA21C69.namprd10.prod.outlook.com ([fe80::5266:1601:5598:3f0a%4]) with mapi id 15.20.9632.017; Wed, 25 Feb 2026 15:40:57 +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 Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, John Garry Subject: [PATCH 19/19] nvme-multipath: switch to use libmultipath Date: Wed, 25 Feb 2026 15:40:07 +0000 Message-ID: <20260225154007.1033735-20-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260225154007.1033735-1-john.g.garry@oracle.com> References: <20260225154007.1033735-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0189.namprd13.prod.outlook.com (2603:10b6:208:2be::14) To DS4PPFEAFA21C69.namprd10.prod.outlook.com (2603:10b6:f:fc00::d54) 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: DS4PPFEAFA21C69:EE_|DS0PR10MB8149:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b6daf5f-e02f-4758-9be9-08de7484447b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: wohfGMRMwAJ8HImYpFFmoMphUqVyz1ZOiedwGHjyi9GkxUubKmExKu2yQq5aRUgxL81SgZdvsrmE5456x/QpC5lS1/2EpF2rAsalCgiQpcLqMhKpZKNwu+SEhk4VdRwQOAZ7oHqrWc32RvjicXOf+BItq2//45OlCMHHDC9hE5Kloobt6Kmb1hwxS63LCrHCI2Nx3+EMoU0FJak1Gy4JFeIsQm/3pgffqYeTxqWogOyuJjGeAYjpfqPyL0B5oWIQ+ywzzAy898H8kuLdn8HpQs8XdDK0NIy/7noSWpQHSXv96JMitaokprnZdyUlCgbyaLdmE5MAnGMLjjHZjUitjWjSCtFq7H4LPoSFkDpPswqlxQCXBdzB7ISheMPSPxRKnpmzsoP/by1UmRB4BHJzNA+pXM44o6cveIJv5K6xZcV/xCqfrZAxaVIQsJFdIgHP98DlHdF+dLOoH43+Bwaa187erHIWKoGHBgjyTDHHWUSJeFozLI11UxDd1Ewtq+w2pFxxfGVMZXEY3bRm2/+oFgLtXZflpl2hCzudYsdjGzXEtyuJZ6Ba2G3laVP0i/IsmR0J5Jpib0ye/nwIo2hsqa9jBNzVwC/JdGgpV5a0+ZQS5SXPPZblPuv77BLtr8WGdVGkDiPirIc29qlwcCRd6WF1DFvSmv/PCsk7Z0fH9h+UosWS6EOd2jOCFIFhRWl+zBXbNo1h1/nlbE/ONZhP96grinNVh5CiPwfoHFjkRag= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFEAFA21C69.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?734t0HZLe88pf8P+IvqXVazDOMSC0lqpXFQEAVIyY35f4OGApZuDoaua2vhI?= =?us-ascii?Q?k0Zu1eIij1fLQBit5zZc6Itjsiipkk+lFZnVGNlTwrGBKsGLvymqz3Wyoj/Z?= =?us-ascii?Q?5t8AtSQSSscGfY7D3rZ3j/BvJPeJn47xK3aDEsLGhVSxFaHD1/B9ej0PuhMx?= =?us-ascii?Q?8vZmEQujAG8nWIYU3BLdNb0uXjBmrf4h6eScIMy7j6JWIJfU6LUtEEXZim8p?= =?us-ascii?Q?wRHwoJ/ADqvf9/i0JcpDTcZQFbFK1fPnhVfy0LwBLQH/Zq0gIlFw+cIiq+M3?= =?us-ascii?Q?slOu6SyVkrHD6qbyLz5HWW7XE/dHrLrk/b7dMTTIDugw6l5wiZeh5ulwxB3k?= =?us-ascii?Q?72r6Tqhya4JTyAV1qMYRhwcIwH4+N3lrtBnfZmFtGGS9pKb22EHw/7tjC3ID?= =?us-ascii?Q?4U2Yza9XfLR39x/h49V/QYXJdmC9jMzpvORwKD3WeQK0Iw2aSjo6e+j454nn?= =?us-ascii?Q?Zdg8MZLwAXapnMQHHnY38sVrX0k+upoP6Gyqf4zsCt6p0i0E6609zDVVq7s4?= =?us-ascii?Q?SCWcomTLz5L/JJDFiMgqgRzAX2Tptpf388/pAatwDyweL3DzYCzfKEsPwmUd?= =?us-ascii?Q?w4WS9TklaolGhoPa2cEekWA6yJWbzPs5t+US6rSKsZ4U0MrBjdwUXXYqNy5V?= =?us-ascii?Q?j/lHWELDDBHePMAZSvk0+ifgTT8XJJ6xrf2PVE2tDjrsl2yHlDuJEV02oybL?= =?us-ascii?Q?bJB9/95nLH3KFgiLTXdyBPUUTwBLFjQ8q6YTGfKbWaSLGWOlH9KUoOrvy8TV?= =?us-ascii?Q?n+uAXYhlMiZ7uBScTpHtd6rtI5BvQsPglE1FMDAZ3O4oSUJvD6y4KIXxydgp?= =?us-ascii?Q?v0lIibwlqP1IfMWdDY76umPEfqEqSQLRG67JOzlMmV0ty8TjIQx/xt8bd69E?= =?us-ascii?Q?1+Zq8L1sQSbrb1OrmoobtgWDDM/Tg2jkWDeiO3MXn+eHmODmQgkWZBNI5Jxw?= =?us-ascii?Q?IY6hOXDIKTs2tr876GOb0nbU5NWic63GYQ89U7YdVoFew3dHL9Sh6Jubbisl?= =?us-ascii?Q?bL+3k9q/qG02f7prMYAH9LFWqRN1FLKoCcBI+cuFbWPTCioAIyhC+uwJJFrG?= =?us-ascii?Q?1mEr468iEkO2WqJfNUad/UzFpgtnVDV9T7dDlESzd4oTvAqisNC5RqGf2Fxo?= =?us-ascii?Q?Veeq6aIYDmvBmT9VNsPvX4sqpSbQykbe+wM8CNJh07HAclgIa66hDZ24LYPs?= =?us-ascii?Q?NrbkI5hD1BbUOjEymwRXuAGWUeSvwG1Mp2B2zD5FH+6xhxH+LvllFqPdQ321?= =?us-ascii?Q?vsnJccgNCn3bp+71hB7r1YCf42ul3d1+JKobrrzARthqVcdv6eMNHhIzmMI0?= =?us-ascii?Q?KagMy7bDCYvNtbzsba5wnruAjcugTM1B7+tC1Ji4NAnb87QmWtffymwALAg2?= =?us-ascii?Q?BcyLmdxE/W4VDJHubzFD7E0uZd6AtF/PE+kM/6x8S9H6KVGACqf/3w/h2mno?= =?us-ascii?Q?xXT4hJsk4kMyvFIRT7+1doSkfcKZAWw2mPvdXbFtihXHEdV8BtO3huzdVwau?= =?us-ascii?Q?HFERRzcj4WZNfhOs6a/ta0SC6uvc4VUgGYC1eOz9ton35h6X4DszC008MgEz?= =?us-ascii?Q?+YLqoWiPn93wk2khlDMIa0ivsi51EkpYaPY3TWZReU5PwmaqfdSKyQomKt07?= =?us-ascii?Q?KCUvVxzzZgsWul81NJAfNKq6NTxvw/aRN8ckHbwxjU6X3MNLPHUxjTRMJkCT?= =?us-ascii?Q?62GyEm99HrlFTNN2X26DtdqjUXRhK/4FqWZupEyNABEXXt53TiY7XfRvKW6D?= =?us-ascii?Q?lyiYR3qW8MKGuA41t7GZxAfPx2lGu/Y=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QPrjoEWlhALc5PvGh/Lj5HDbSn1ztv6RnhOOx7iWEYh3W9fj2tsCZB+vcK82pmrgkS5ez1i6ck+ElucNgFm/vXDer5/B6u5DLI/F8ky4PSA7kr7toBF8PbBvLnt/WBq3NpUEibRMf0kPE/JANN4CaIAZk+Q50tM3ULHXhygbA5FJE4mJ2fieRhF9M5n0QavHVHPRiItLkQav2KkaN8tIolapuBgrNXaxRgPqmiyAPkMCrwGDp2vq7sLr5SWpfR245lBPIR3dG+fWPRWsYKob2lbfN5R72JKEijmJZDzr/0B8mbu6e+p6mOHLPnyfzK/MQXWaQ09xQIy4M3AFNTLayCVm98hXRp7aDGxOHj//OWT1k9UI39qzVpBEFV9AACTcFFGf/yDR8Ipj6FNdSVtRU+xn910zzK7zy2WGeHrl8onTlfVK70lZXjiI+CBA7txLpeir4Hlo+TTTe+84LHAryKqYOXDu6SxNi8muQZbpnD8jeTG03/4kbsWFWRFEXgB7zcCVPc23++pp5Bl7EpyoTnE5OTy11zdll6N7hTQnwh6LIKIlxKFz2Vz0GOLpJiRwHbDmhX+Kx4/HV6+tajWVWoAq+vI45thKhz52nFL8Swg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b6daf5f-e02f-4758-9be9-08de7484447b X-MS-Exchange-CrossTenant-AuthSource: DS4PPFEAFA21C69.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2026 15:40:56.9343 (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: RmxQXfOEr7Bt10RySWXy+Qf3YDZxehSsEfj9S5G2MhXHVV/UkpnjgHVXujZfq/5cqN3/6jrDrRff0iij3eopTQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB8149 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-25_01,2026-02-25_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2602130000 definitions=main-2602250149 X-Authority-Analysis: v=2.4 cv=Y6r1cxeN c=1 sm=1 tr=0 ts=699f1814 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=HzLeVaNsDn8A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=yPCof4ZbAAAA:8 a=kFJKMHVsF_9EA3gfUxIA:9 a=q-gNWNAGp3vJJuIC:21 X-Proofpoint-ORIG-GUID: zT0tvcMm7ImaFc1b0YKLOZGdMnGfxLnT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI1MDE0OSBTYWx0ZWRfX7g/2yPyt51Ow bxIcy9JF0jlHUGiNTaM7+qs6GxXPx/61E20y72U3TSQ4oyTIpFJezVj7oisSN6/7k341qs3gESM VUFp/bnH36xtHT9RSct1fOfMgbqjemQEL2HQBsLvZPJujD00aFSbJxx5AOyCIuuZssP+1U64ox9 7NGvkQRge5zJaeIVN9nvXbLKapeukSplt+MqEFxWXHYCD//EIanRebCVmUy+Bg5wdhqE3KqMchM iTfbsppCJxTQ0E3DxAMyUHIn3jDxRm0Piz2ecsdjBnBZxqZuxng/OnOJ1yoXm4xNk9EVkGYE0+t q5XGC1mMykbE6DtHPyoOrGdMqW3N3NUwIUidMbtS1XFVmc1QNr5Tq+9EyHoNMRYFdAAI0ImxdDY QSSxKw3kCJ+PigoLZcjyWaaAhVb0rQmSIbXganzF9IbDEaRO/c7zhmek4qlirAdx708DQZYjasX S7GLWxrDYX2c4x/hLcg== X-Proofpoint-GUID: zT0tvcMm7ImaFc1b0YKLOZGdMnGfxLnT Content-Type: text/plain; charset="utf-8" Now that as 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 mpath_head and mpath_disk structures. The check for ns->head->disk is now replaced with a ns->mpath_disk check, it decide whether we are really in multipath mode. Similarly everywhere we were referencing ns->head->disk, we reference ns->mpath_disk->disk. Signed-off-by: John Garry --- drivers/nvme/host/core.c | 65 ++- drivers/nvme/host/ioctl.c | 89 ---- drivers/nvme/host/multipath.c | 865 +++++++--------------------------- drivers/nvme/host/nvme.h | 72 +-- drivers/nvme/host/pr.c | 355 +++----------- drivers/nvme/host/sysfs.c | 84 ++-- 6 files changed, 318 insertions(+), 1212 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 2d0faec902eb2..be757879f19b2 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -667,9 +667,7 @@ static void nvme_free_ns_head(struct kref *ref) struct nvme_ns_head *head =3D container_of(ref, struct nvme_ns_head, ref); =20 - nvme_mpath_put_disk(head); ida_free(&head->subsys->ns_ida, head->instance); - cleanup_srcu_struct(&head->srcu); nvme_put_subsystem(head->subsys); kfree(head->plids); kfree(head); @@ -2488,9 +2486,12 @@ static int nvme_update_ns_info(struct nvme_ns *ns, s= truct nvme_ns_info *info) struct queue_limits *ns_lim =3D &ns->disk->queue->limits; struct queue_limits lim; unsigned int memflags; + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct gendisk *disk =3D mpath_disk->disk; =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. @@ -2511,20 +2512,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)); - nvme_mpath_revalidate_paths(ns->head); + set_capacity_and_notify(disk, get_capacity(ns->disk)); + set_disk_ro(disk, nvme_ns_is_readonly(ns, info)); + nvme_mpath_revalidate_paths(head); =20 - blk_mq_unfreeze_queue(ns->head->disk->queue, memflags); + blk_mq_unfreeze_queue(disk->queue, memflags); } =20 return ret; @@ -3884,10 +3885,6 @@ static struct nvme_ns_head *nvme_alloc_ns_head(struc= t nvme_ctrl *ctrl, 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; @@ -3895,10 +3892,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; @@ -3911,22 +3905,20 @@ 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 ret =3D nvme_mpath_alloc_disk(ctrl, head); if (ret) - goto out_cleanup_srcu; + goto out_ida_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_ida_free: ida_free(&ctrl->subsys->ns_ida, head->instance); out_free_head: kfree(head); @@ -3965,7 +3957,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); @@ -4046,14 +4038,11 @@ 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); head->ns_count++; ns->head =3D head; + nvme_mpath_add_ns(ns); mutex_unlock(&ctrl->subsys->lock); =20 -#ifdef CONFIG_NVME_MULTIPATH - cancel_delayed_work(&head->remove_work); -#endif return 0; =20 out_put_ns_head: @@ -4192,24 +4181,24 @@ 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); + nvme_mpath_delete_ns(ns); ns->head->ns_count--; if (!ns->head->ns_count) { 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 (nvme_mpath_has_disk(ns->head)) last_path =3D true; } mutex_unlock(&ctrl->subsys->lock); if (last_path) - nvme_put_ns_head(ns->head); + nvme_mpath_remove_disk(ns->head); nvme_put_ns_head(ns->head); out_cleanup_disk: put_disk(disk); @@ -4233,24 +4222,24 @@ 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); + nvme_mpath_delete_ns(ns); head->ns_count--; if (!head->ns_count) { - if (!nvme_mpath_queue_if_no_path(ns->head)) + if (!nvme_mpath_head_queue_if_no_path(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 773c819cde52a..a243662b461e9 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -710,22 +710,6 @@ int nvme_mpath_chr_uring_cmd(struct mpath_device *mpat= h_device, return nvme_ns_uring_cmd(ns, ioucmd, 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_mpath_bdev_ioctl(struct block_device *bdev, struct mpath_device *mpath_device, blk_mode_t mode, unsigned int cmd, unsigned long arg, int srcu_idx) @@ -783,79 +767,6 @@ int nvme_mpath_cdev_ioctl(struct mpath_head *mpath_hea= d, return ret; } =20 -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 081a8a20a9908..c686cabfd9d16 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -67,33 +67,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, @@ -103,7 +87,7 @@ MODULE_PARM_DESC(iopolicy, =20 void nvme_mpath_default_iopolicy(struct nvme_subsystem *subsys) { - subsys->iopolicy =3D iopolicy; + subsys->iopolicy.iopolicy =3D iopolicy; } =20 void nvme_mpath_unfreeze(struct nvme_subsystem *subsys) @@ -111,9 +95,13 @@ void nvme_mpath_unfreeze(struct nvme_subsystem *subsys) struct nvme_ns_head *h; =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); + list_for_each_entry(h, &subsys->nsheads, entry) { + struct mpath_disk *mpath_disk =3D h->mpath_disk; + + if (mpath_disk) + blk_mq_unfreeze_queue_nomemrestore( + mpath_disk->disk->queue); + } } =20 void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys) @@ -121,9 +109,12 @@ void nvme_mpath_wait_freeze(struct nvme_subsystem *sub= sys) struct nvme_ns_head *h; =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); + list_for_each_entry(h, &subsys->nsheads, entry) { + struct mpath_disk *mpath_disk =3D h->mpath_disk; + + if (mpath_disk) + blk_mq_freeze_queue_wait(mpath_disk->disk->queue); + } } =20 void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) @@ -131,15 +122,22 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *s= ubsys) struct nvme_ns_head *h; =20 lockdep_assert_held(&subsys->lock); - list_for_each_entry(h, &subsys->nsheads, entry) - if (h->disk) - blk_freeze_queue_start(h->disk->queue); + list_for_each_entry(h, &subsys->nsheads, entry) { + struct mpath_disk *mpath_disk =3D h->mpath_disk; + + if (mpath_disk) + blk_freeze_queue_start(mpath_disk->disk->queue); + } } =20 void nvme_failover_req(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; u16 status =3D nvme_req(req)->status & NVME_SCT_SC_MASK; + struct gendisk *disk =3D mpath_disk->disk; unsigned long flags; struct bio *bio; =20 @@ -155,9 +153,9 @@ 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); + bio_set_dev(bio, disk->part0); if (bio->bi_opf & REQ_POLLED) { bio->bi_opf &=3D ~REQ_POLLED; bio->bi_cookie =3D BLK_QC_T_NONE; @@ -171,20 +169,23 @@ void nvme_failover_req(struct request *req) */ bio->bi_opf &=3D ~REQ_NOWAIT; } - blk_steal_bios(&ns->head->requeue_list, req); - spin_unlock_irqrestore(&ns->head->requeue_lock, flags); + 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); + kblockd_schedule_work(&mpath_head->requeue_work); } =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 nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct gendisk *disk =3D mpath_disk->disk; + struct nvme_subsystem *subsys =3D head->subsys; =20 - if ((READ_ONCE(ns->head->subsys->iopolicy) =3D=3D NVME_IOPOLICY_QD) && + if (mpath_qd_iopolicy(&subsys->iopolicy) && !(nvme_req(rq)->flags & NVME_MPATH_CNT_ACTIVE)) { atomic_inc(&ns->ctrl->nr_active); nvme_req(rq)->flags |=3D NVME_MPATH_CNT_ACTIVE; @@ -203,13 +204,15 @@ EXPORT_SYMBOL_GPL(nvme_mpath_start_request); void nvme_mpath_end_request(struct request *rq) { struct nvme_ns *ns =3D rq->q->queuedata; + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; =20 if (nvme_req(rq)->flags & NVME_MPATH_CNT_ACTIVE) atomic_dec_if_positive(&ns->ctrl->nr_active); =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(mpath_disk->disk->part0, req_op(rq), blk_rq_bytes(rq) >> SECTOR_SHIFT, nvme_req(rq)->start_time); } @@ -232,11 +235,17 @@ 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) + struct mpath_disk *mpath_disk =3D ns->head->mpath_disk; + struct mpath_head *mpath_head; + struct gendisk *disk; + + if (!mpath_disk) continue; - kblockd_schedule_work(&ns->head->requeue_work); + mpath_head =3D mpath_disk->mpath_head; + disk =3D mpath_disk->disk; + kblockd_schedule_work(&mpath_head->requeue_work); if (nvme_ctrl_state(ns->ctrl) =3D=3D NVME_CTRL_LIVE) - disk_uevent(ns->head->disk, KOBJ_CHANGE); + disk_uevent(disk, KOBJ_CHANGE); } srcu_read_unlock(&ctrl->srcu, srcu_idx); } @@ -253,20 +262,13 @@ static const char *nvme_ana_state_names[] =3D { bool nvme_mpath_clear_current_path(struct nvme_ns *ns) { struct nvme_ns_head *head =3D ns->head; - bool changed =3D false; - int node; + struct mpath_disk *mpath_disk =3D head->mpath_disk; =20 - if (!head) - goto out; + if (!mpath_disk) + return false; =20 - 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; - } - } -out: - return changed; + return mpath_clear_current_path(mpath_disk->mpath_head, + &ns->mpath_device); } =20 void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl) @@ -277,30 +279,35 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ct= rl) srcu_idx =3D srcu_read_lock(&ctrl->srcu); list_for_each_entry_srcu(ns, &ctrl->namespaces, list, srcu_read_lock_held(&ctrl->srcu)) { + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + if (!mpath_disk) + continue; + nvme_mpath_clear_current_path(ns); - kblockd_schedule_work(&ns->head->requeue_work); + kblockd_schedule_work(&mpath_disk->mpath_head->requeue_work); } srcu_read_unlock(&ctrl->srcu, srcu_idx); } =20 +static void nvme_mpath_revalidate_paths_cb(struct mpath_device *mpath_devi= ce, + sector_t capacity) +{ + struct nvme_ns *ns =3D nvme_mpath_to_ns(mpath_device); + + if (capacity !=3D get_capacity(ns->disk)) + clear_bit(NVME_NS_READY, &ns->flags); +} + void nvme_mpath_revalidate_paths(struct nvme_ns_head *head) { - sector_t capacity =3D get_capacity(head->disk); - struct nvme_ns *ns; - int node; - int srcu_idx; + struct mpath_disk *mpath_disk =3D head->mpath_disk; =20 - 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); + if (!mpath_disk) + return; =20 - for_each_node(node) - rcu_assign_pointer(head->current_path[node], NULL); - kblockd_schedule_work(&head->requeue_work); + mpath_revalidate_paths(mpath_disk, nvme_mpath_revalidate_paths_cb); } =20 static bool nvme_path_is_disabled(struct nvme_ns *ns) @@ -327,142 +334,6 @@ static bool nvme_mpath_is_disabled(struct mpath_devic= e *mpath_device) return nvme_path_is_disabled(ns); } =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 && @@ -476,64 +347,6 @@ static bool nvme_mpath_is_optimized(struct mpath_devic= e *mpath_device) return nvme_path_is_optimized(ns); } =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, bool *available) { @@ -554,94 +367,12 @@ static bool nvme_mpath_available_path(struct mpath_de= vice *mpath_device, return true; } =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; -} - static int nvme_mpath_get_unique_id(struct mpath_device *mpath_device, u8 id[16], enum blk_unique_id type) { return nvme_ns_get_unique_id(nvme_mpath_to_ns(mpath_device), id, type); } - #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; -} - static int nvme_mpath_report_zones(struct mpath_device *mpath_device, sector_t sector, unsigned int nr_zones, struct blk_report_zones_args *args) @@ -650,51 +381,9 @@ static int nvme_mpath_report_zones(struct mpath_device= *mpath_device, nr_zones, args); } #else -#define nvme_ns_head_report_zones NULL #define nvme_mpath_report_zones NULL #endif /* CONFIG_BLK_DEV_ZONED */ =20 -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 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_mpath_add_cdev(struct mpath_head *mpath_head) { struct nvme_ns_head *head =3D mpath_head->drvdata; @@ -715,72 +404,17 @@ static void nvme_mpath_del_cdev(struct mpath_head *mp= ath_head) nvme_cdev_del(&mpath_head->cdev, &mpath_head->cdev_device); } =20 -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) +bool nvme_mpath_has_disk(struct nvme_ns_head *head) { - 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); - } - nvme_put_ns_head(head); + return head->mpath_disk; } =20 static void nvme_remove_head_work(struct work_struct *work) { - struct nvme_ns_head *head =3D container_of(to_delayed_work(work), - struct nvme_ns_head, remove_work); + struct mpath_head *mpath_head =3D container_of(to_delayed_work(work), + struct mpath_head, remove_work); + struct nvme_ns_head *head =3D mpath_head->drvdata; + struct mpath_disk *mpath_disk =3D head->mpath_disk; bool remove =3D false; =20 mutex_lock(&head->subsys->lock); @@ -789,24 +423,21 @@ static void nvme_remove_head_work(struct work_struct = *work) remove =3D true; } mutex_unlock(&head->subsys->lock); - if (remove) - nvme_remove_head(head); =20 + if (remove) { + mpath_unregister_disk(mpath_disk); + nvme_put_ns_head(head); + } module_put(THIS_MODULE); } =20 int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *hea= d) { + struct mpath_disk *mpath_disk; + struct mpath_head *mpath_head; + struct nvme_subsystem *subsys =3D ctrl->subsys; struct queue_limits lim; =20 - 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 @@ -832,66 +463,29 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, str= uct nvme_ns_head *head) if (head->ids.csi =3D=3D NVME_CSI_ZNS) lim.features |=3D BLK_FEAT_ZONED; =20 - 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; + mpath_disk =3D mpath_alloc_head_disk(&lim, ctrl->numa_node); + if (!mpath_disk) + return -ENOMEM; =20 - /* - * 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); + mpath_head =3D mpath_alloc_head(); + if (IS_ERR(mpath_head)) { + mpath_put_disk(mpath_disk); + return PTR_ERR(mpath_head); } =20 - nvme_mpath_add_sysfs_link(ns->head); + mpath_head->drvdata =3D head; =20 - mutex_lock(&head->lock); - if (nvme_path_is_optimized(ns)) { - int node, srcu_idx; + head->mpath_disk =3D mpath_disk; + mpath_disk->mpath_head =3D mpath_head; + mpath_disk->parent =3D &subsys->dev; =20 - 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); + mpath_head->mpdt =3D &mpdt; + INIT_DELAYED_WORK(&mpath_head->remove_work, nvme_remove_head_work); =20 - synchronize_srcu(&head->srcu); - kblockd_schedule_work(&head->requeue_work); + sprintf(mpath_disk->disk->disk_name, "nvme%dn%d", + ctrl->subsys->instance, head->instance); + nvme_tryget_ns_head(head); + return 0; } =20 static int nvme_parse_ana_log(struct nvme_ctrl *ctrl, void *data, @@ -946,9 +540,13 @@ static inline bool nvme_state_is_live(enum nvme_ana_st= ate state) static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc, struct nvme_ns *ns) { + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; ns->ana_grpid =3D le32_to_cpu(desc->grpid); ns->ana_state =3D desc->state; clear_bit(NVME_NS_ANA_PENDING, &ns->flags); + /* * nvme_mpath_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 @@ -960,7 +558,7 @@ static void nvme_update_ns_ana_state(struct nvme_ana_gr= oup_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(mpath_disk, &ns->mpath_device); else { /* * Add sysfs link from multipath head gendisk node to path @@ -977,8 +575,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_disk); } } =20 @@ -1018,6 +616,17 @@ void nvme_mpath_delete_ns(struct nvme_ns *ns) mpath_delete_device(mpath_disk->mpath_head, &ns->mpath_device); } =20 +void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) +{ + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + if (!mpath_disk) + return; + + mpath_remove_sysfs_link(mpath_disk, &ns->mpath_device); +} + static int nvme_update_ana_state(struct nvme_ctrl *ctrl, struct nvme_ana_group_desc *desc, void *data) { @@ -1140,32 +749,23 @@ static ssize_t nvme_subsys_iopolicy_show(struct devi= ce *dev, { struct nvme_subsystem *subsys =3D container_of(dev, struct nvme_subsystem, dev); + return mpath_iopolicy_show(&subsys->iopolicy, buf); =20 - return sysfs_emit(buf, "%s\n", - nvme_iopolicy_names[READ_ONCE(subsys->iopolicy)]); } =20 -static void nvme_subsys_iopolicy_update(struct nvme_subsystem *subsys, - int iopolicy) +static void nvme_subsys_iopolicy_store_update(void *data) { + struct nvme_subsystem *subsys =3D data; struct nvme_ctrl *ctrl; - int old_iopolicy =3D READ_ONCE(subsys->iopolicy); =20 - if (old_iopolicy =3D=3D iopolicy) - return; - - WRITE_ONCE(subsys->iopolicy, iopolicy); - - /* iopolicy changes clear the mpath by design */ mutex_lock(&nvme_subsystems_lock); - list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) + pr_err("%s subsys=3D%pS\n", __func__, subsys); + list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) { + pr_err("%s2 subsys=3D%pS ctrl=3D%pS calling nvme_mpath_clear_ctrl_paths\= n", + __func__, subsys, ctrl); 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]); } =20 static ssize_t nvme_subsys_iopolicy_store(struct device *dev, @@ -1173,16 +773,9 @@ static ssize_t nvme_subsys_iopolicy_store(struct devi= ce *dev, { struct nvme_subsystem *subsys =3D container_of(dev, struct nvme_subsystem, dev); - int i; =20 - 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 mpath_iopolicy_store(&subsys->iopolicy, buf, count, + nvme_subsys_iopolicy_store_update, subsys); } SUBSYS_ATTR_RW(iopolicy, S_IRUGO | S_IWUSR, nvme_subsys_iopolicy_show, nvme_subsys_iopolicy_store); @@ -1207,8 +800,9 @@ static ssize_t queue_depth_show(struct device *dev, struct device_attribute *attr, char *buf) { struct nvme_ns *ns =3D nvme_get_ns_from_dev(dev); + struct nvme_subsystem *subsys =3D ns->head->subsys; =20 - if (ns->head->subsys->iopolicy !=3D NVME_IOPOLICY_QD) + if (!mpath_qd_iopolicy(&subsys->iopolicy)) return 0; =20 return sysfs_emit(buf, "%d\n", atomic_read(&ns->ctrl->nr_active)); @@ -1218,69 +812,33 @@ 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; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; + struct nvme_subsystem *subsys =3D ns->head->subsys; + struct mpath_device *mpath_device =3D &ns->mpath_device; =20 - if (head->subsys->iopolicy !=3D NVME_IOPOLICY_NUMA) - return 0; - - 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(mpath_head, mpath_device, &subsys->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; + struct mpath_disk *mpath_disk =3D mpath_bd_device_to_disk(bd_device); + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; =20 - 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_head, 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); + struct mpath_disk *mpath_disk =3D mpath_bd_device_to_disk(bd_device); + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; =20 - return count; + return mpath_delayed_removal_secs_store(mpath_head, buf, count); } =20 DEVICE_ATTR_RW(delayed_removal_secs); @@ -1297,87 +855,14 @@ static int nvme_lookup_ana_group_desc(struct nvme_ct= rl *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) +void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 anagrpid) { - struct device *target; - struct kobject *kobj; + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; =20 - if (!test_bit(NVME_NS_SYSFS_ATTR_LINK, &ns->flags)) + if (!mpath_disk) return; =20 - 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)) { struct nvme_ana_group_desc desc =3D { .grpid =3D anagrpid, @@ -1398,23 +883,28 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 = anagrpid) } } else { ns->ana_state =3D NVME_ANA_OPTIMIZED; - nvme_mpath_set_live(ns); + mpath_device_set_live(mpath_disk, &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) && mpath_disk->disk) + mpath_disk->disk->nr_zones =3D ns->disk->nr_zones; #endif } =20 void nvme_mpath_remove_disk(struct nvme_ns_head *head) { + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head; bool remove =3D false; =20 - if (!head->disk) + if (!mpath_disk) return; =20 + mpath_head =3D mpath_disk->mpath_head; + mutex_lock(&head->subsys->lock); + /* * We are called when all paths have been removed, and at that point * head->list is expected to be empty. However, nvme_ns_remove() and @@ -1424,37 +914,21 @@ 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 (head->ns_count) goto out; =20 - if (head->delayed_removal_secs) { - /* - * Ensure that no one could remove this module while the head - * remove work is pending. - */ - if (!try_module_get(THIS_MODULE)) - goto out; - mod_delayed_work(nvme_wq, &head->remove_work, - head->delayed_removal_secs * HZ); - } else { + if (mpath_can_remove_head(mpath_head)) { list_del_init(&head->entry); remove =3D true; } out: mutex_unlock(&head->subsys->lock); - if (remove) - 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); + if (remove) { + mpath_unregister_disk(mpath_disk); + nvme_put_ns_head(head); + } } =20 void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl) @@ -1525,15 +999,16 @@ 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) + +static enum mpath_iopolicy_e nvme_mpath_get_iopolicy(struct mpath_head *mp= ath_head) { struct nvme_ns_head *head =3D mpath_head->drvdata; struct nvme_subsystem *subsys =3D head->subsys; =20 - return mpath_read_iopolicy(&subsys->mpath_iopolicy); + return mpath_read_iopolicy(&subsys->iopolicy); } =20 + static enum mpath_access_state nvme_mpath_get_access_state( struct mpath_device *mpath_device) { diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index e276a7bcb7aff..d83495dead590 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -253,11 +253,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), @@ -475,11 +470,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; @@ -502,8 +492,7 @@ struct nvme_subsystem { u16 vendor_id; struct ida ns_ida; #ifdef CONFIG_NVME_MULTIPATH - enum nvme_iopolicy iopolicy; - struct mpath_iopolicy mpath_iopolicy; + struct mpath_iopolicy iopolicy; #endif }; =20 @@ -525,8 +514,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; @@ -551,33 +538,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_disk *mpath_disk; -#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_disk; } =20 enum nvme_ns_features { @@ -1011,9 +980,7 @@ int nvme_getgeo(struct gendisk *disk, struct hd_geomet= ry *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[]; @@ -1030,6 +997,7 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl = *ctrl) void nvme_mpath_synchronize(struct nvme_ns_head *head); void nvme_mpath_add_ns(struct nvme_ns *ns); void nvme_mpath_delete_ns(struct nvme_ns *ns); +void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns); void nvme_mpath_unfreeze(struct nvme_subsystem *subsys); void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); @@ -1037,8 +1005,7 @@ void nvme_mpath_default_iopolicy(struct nvme_subsyste= m *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); +bool nvme_mpath_has_disk(struct nvme_ns_head *head); 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); @@ -1064,15 +1031,19 @@ int nvme_mpath_chr_uring_cmd(struct mpath_device *m= path_device, =20 static inline bool nvme_is_mpath_request(struct request *req) { - return req->cmd_flags & REQ_NVME_MPATH; + return is_mpath_request(req); } =20 static inline void nvme_trace_bio_complete(struct request *req) { struct nvme_ns *ns =3D req->q->queuedata; =20 - if (nvme_is_mpath_request(req) && req->bio) - trace_block_bio_complete(ns->head->disk->queue, req->bio); + if (nvme_is_mpath_request(req) && req->bio) { + struct nvme_ns_head *head =3D ns->head; + struct mpath_disk *mpath_disk =3D head->mpath_disk; + + trace_block_bio_complete(mpath_disk->disk->queue, req->bio); + } } =20 extern bool multipath; @@ -1085,13 +1056,7 @@ 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; + return is_mpath_head(disk); } #else #define multipath false @@ -1108,6 +1073,9 @@ static inline void nvme_mpath_add_ns(struct nvme_ns *= ns) static inline void nvme_mpath_delete_ns(struct nvme_ns *ns) { } +static inline void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) +{ +} static inline void nvme_failover_req(struct request *req) { } @@ -1119,16 +1087,14 @@ static inline int nvme_mpath_alloc_disk(struct nvme= _ctrl *ctrl, { return 0; } -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 bool nvme_mpath_has_disk(struct nvme_ns_head *head) { + return false; } -static inline void nvme_mpath_add_sysfs_link(struct nvme_ns *ns) +static inline void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 anagrpid) { } -static inline void nvme_mpath_remove_sysfs_link(struct nvme_ns *ns) +static inline void nvme_mpath_put_disk(struct nvme_ns_head *head) { } static inline bool nvme_mpath_clear_current_path(struct nvme_ns *ns) diff --git a/drivers/nvme/host/pr.c b/drivers/nvme/host/pr.c index fd5a9f309a56f..b1002c3d43eb3 100644 --- a/drivers/nvme/host/pr.c +++ b/drivers/nvme/host/pr.c @@ -49,24 +49,9 @@ 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) +static int nvme_send_device_pr_command(struct nvme_ns *ns, + struct nvme_command *c, void *data, + unsigned int data_len) { c->common.nsid =3D cpu_to_le32(ns->head->ns_id); return nvme_submit_sync_cmd(ns->queue, c, data, data_len); @@ -92,31 +77,7 @@ static int nvme_status_to_pr_err(int status) } } =20 -static int __nvme_send_pr_command(struct block_device *bdev, u32 cdw10, - u32 cdw11, u8 op, void *data, unsigned int data_len) -{ - struct nvme_command c =3D { 0 }; - - c.common.opcode =3D op; - c.common.cdw10 =3D cpu_to_le32(cdw10); - c.common.cdw11 =3D cpu_to_le32(cdw11); - - 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); -} - -static int nvme_send_pr_command(struct block_device *bdev, u32 cdw10, u32 = cdw11, - u8 op, void *data, unsigned int data_len) -{ - int ret; - - ret =3D __nvme_send_pr_command(bdev, cdw10, cdw11, op, data, data_len); - return ret < 0 ? ret : nvme_status_to_pr_err(ret); -} - -static int __nvme_send_pr_command_ns(struct nvme_ns *ns, u32 cdw10, +static int __nvme_send_pr_command(struct nvme_ns *ns, u32 cdw10, u32 cdw11, u8 op, void *data, unsigned int data_len) { struct nvme_command c =3D { 0 }; @@ -125,19 +86,18 @@ static int __nvme_send_pr_command_ns(struct nvme_ns *n= s, u32 cdw10, c.common.cdw10 =3D cpu_to_le32(cdw10); c.common.cdw11 =3D cpu_to_le32(cdw11); =20 - return nvme_send_ns_pr_command(ns, &c, data, data_len); + return nvme_send_device_pr_command(ns, &c, data, data_len); } =20 -static int nvme_send_pr_command_ns(struct nvme_ns *ns, u32 cdw10, u32 cdw1= 1, +static int nvme_send_pr_command(struct nvme_ns *ns, u32 cdw10, u32 cdw11, u8 op, void *data, unsigned int data_len) { int ret; =20 - ret =3D __nvme_send_pr_command_ns(ns, cdw10, cdw11, op, data, data_len); + ret =3D __nvme_send_pr_command(ns, cdw10, cdw11, op, data, data_len); return ret < 0 ? ret : nvme_status_to_pr_err(ret); } =20 -__maybe_unused static int nvme_pr_register_ns(struct nvme_ns *ns, u64 old_key, u64 new_ke= y, u32 flags) { @@ -156,33 +116,11 @@ static int nvme_pr_register_ns(struct nvme_ns *ns, u6= 4 old_key, u64 new_key, cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; cdw10 |=3D NVME_PR_CPTPL_PERSIST; =20 - ret =3D nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_register, + ret =3D nvme_send_pr_command(ns, cdw10, 0, nvme_cmd_resv_register, &data, sizeof(data)); return ret; } =20 -static int nvme_pr_register(struct block_device *bdev, u64 old_key, u64 ne= w_key, - unsigned int flags) -{ - struct nvmet_pr_register_data data =3D { 0 }; - u32 cdw10; - - if (flags & ~PR_FL_IGNORE_KEY) - return -EOPNOTSUPP; - - data.crkey =3D cpu_to_le64(old_key); - data.nrkey =3D cpu_to_le64(new_key); - - cdw10 =3D old_key ? NVME_PR_REGISTER_ACT_REPLACE : - NVME_PR_REGISTER_ACT_REG; - cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; - cdw10 |=3D NVME_PR_CPTPL_PERSIST; - - return nvme_send_pr_command(bdev, cdw10, 0, nvme_cmd_resv_register, - &data, sizeof(data)); -} - -__maybe_unused static int nvme_pr_reserve_ns(struct nvme_ns *ns, u64 key, enum pr_type ty= pe, u32 flags) { @@ -198,30 +136,10 @@ static int nvme_pr_reserve_ns(struct nvme_ns *ns, u64= key, enum pr_type type, cdw10 |=3D nvme_pr_type_from_blk(type) << 8; cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; =20 - return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_acquire, + return nvme_send_pr_command(ns, cdw10, 0, nvme_cmd_resv_acquire, &data, sizeof(data)); } =20 -static int nvme_pr_reserve(struct block_device *bdev, u64 key, - enum pr_type type, unsigned flags) -{ - struct nvmet_pr_acquire_data data =3D { 0 }; - u32 cdw10; - - if (flags & ~PR_FL_IGNORE_KEY) - return -EOPNOTSUPP; - - data.crkey =3D cpu_to_le64(key); - - cdw10 =3D NVME_PR_ACQUIRE_ACT_ACQUIRE; - cdw10 |=3D nvme_pr_type_from_blk(type) << 8; - cdw10 |=3D (flags & PR_FL_IGNORE_KEY) ? NVME_PR_IGNORE_KEY : 0; - - return nvme_send_pr_command(bdev, cdw10, 0, nvme_cmd_resv_acquire, - &data, sizeof(data)); -} - -__maybe_unused static int nvme_pr_preempt_ns(struct nvme_ns *ns, u64 old, u64 new, enum pr_type type, bool abort) { @@ -235,28 +153,10 @@ static int nvme_pr_preempt_ns(struct nvme_ns *ns, u64= old, u64 new, NVME_PR_ACQUIRE_ACT_PREEMPT; cdw10 |=3D nvme_pr_type_from_blk(type) << 8; =20 - return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_acquire, - &data, sizeof(data)); -} - -static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new, - enum pr_type type, bool abort) -{ - struct nvmet_pr_acquire_data data =3D { 0 }; - u32 cdw10; - - data.crkey =3D cpu_to_le64(old); - data.prkey =3D cpu_to_le64(new); - - cdw10 =3D abort ? NVME_PR_ACQUIRE_ACT_PREEMPT_AND_ABORT : - NVME_PR_ACQUIRE_ACT_PREEMPT; - cdw10 |=3D nvme_pr_type_from_blk(type) << 8; - - return nvme_send_pr_command(bdev, cdw10, 0, nvme_cmd_resv_acquire, + return nvme_send_pr_command(ns, cdw10, 0, nvme_cmd_resv_acquire, &data, sizeof(data)); } =20 -__maybe_unused static int nvme_pr_clear_ns(struct nvme_ns *ns, u64 key) { struct nvmet_pr_release_data data =3D { 0 }; @@ -267,40 +167,10 @@ static int nvme_pr_clear_ns(struct nvme_ns *ns, u64 k= ey) cdw10 =3D NVME_PR_RELEASE_ACT_CLEAR; cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; =20 - return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_release, - &data, sizeof(data)); -} - -static int nvme_pr_clear(struct block_device *bdev, u64 key) -{ - struct nvmet_pr_release_data data =3D { 0 }; - u32 cdw10; - - data.crkey =3D cpu_to_le64(key); - - cdw10 =3D NVME_PR_RELEASE_ACT_CLEAR; - cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; - - return nvme_send_pr_command(bdev, cdw10, 0, nvme_cmd_resv_release, + return nvme_send_pr_command(ns, cdw10, 0, nvme_cmd_resv_release, &data, sizeof(data)); } =20 -static int nvme_pr_release(struct block_device *bdev, u64 key, enum pr_typ= e type) -{ - struct nvmet_pr_release_data data =3D { 0 }; - u32 cdw10; - - data.crkey =3D cpu_to_le64(key); - - cdw10 =3D NVME_PR_RELEASE_ACT_RELEASE; - cdw10 |=3D nvme_pr_type_from_blk(type) << 8; - cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; - - return nvme_send_pr_command(bdev, cdw10, 0, nvme_cmd_resv_release, - &data, sizeof(data)); -} - -__maybe_unused static int nvme_pr_release_ns(struct nvme_ns *ns, u64 key, enum pr_type ty= pe) { struct nvmet_pr_release_data data =3D { 0 }; @@ -312,11 +182,11 @@ static int nvme_pr_release_ns(struct nvme_ns *ns, u64= key, enum pr_type type) cdw10 |=3D nvme_pr_type_from_blk(type) << 8; cdw10 |=3D key ? 0 : NVME_PR_IGNORE_KEY; =20 - return nvme_send_pr_command_ns(ns, cdw10, 0, nvme_cmd_resv_release, + return nvme_send_pr_command(ns, cdw10, 0, nvme_cmd_resv_release, &data, sizeof(data)); } =20 -static int nvme_mpath_pr_resv_report_ns(struct nvme_ns *ns, void *data, +static int nvme_mpath_pr_resv_report(struct nvme_ns *ns, void *data, u32 data_len, bool *eds) { u32 cdw10, cdw11; @@ -327,7 +197,7 @@ static int nvme_mpath_pr_resv_report_ns(struct nvme_ns = *ns, void *data, *eds =3D true; =20 retry: - ret =3D __nvme_send_pr_command_ns(ns, cdw10, cdw11, nvme_cmd_resv_report, + ret =3D __nvme_send_pr_command(ns, cdw10, cdw11, nvme_cmd_resv_report, data, data_len); if (ret =3D=3D NVME_SC_HOST_ID_INCONSIST && cdw11 =3D=3D NVME_EXTENDED_DATA_STRUCT) { @@ -339,30 +209,6 @@ static int nvme_mpath_pr_resv_report_ns(struct nvme_ns= *ns, void *data, return ret < 0 ? ret : nvme_status_to_pr_err(ret); } =20 -static int nvme_pr_resv_report(struct block_device *bdev, void *data, - u32 data_len, bool *eds) -{ - u32 cdw10, cdw11; - int ret; - - cdw10 =3D nvme_bytes_to_numd(data_len); - cdw11 =3D NVME_EXTENDED_DATA_STRUCT; - *eds =3D true; - -retry: - ret =3D __nvme_send_pr_command(bdev, cdw10, cdw11, nvme_cmd_resv_report, - data, data_len); - if (ret =3D=3D NVME_SC_HOST_ID_INCONSIST && - cdw11 =3D=3D NVME_EXTENDED_DATA_STRUCT) { - cdw11 =3D 0; - *eds =3D false; - goto retry; - } - - return ret < 0 ? ret : nvme_status_to_pr_err(ret); -} - -__maybe_unused static int nvme_pr_read_keys_ns(struct nvme_ns *ns, struct pr_keys *keys_i= nfo) { size_t rse_len; @@ -383,7 +229,7 @@ static int nvme_pr_read_keys_ns(struct nvme_ns *ns, str= uct pr_keys *keys_info) if (!rse) return -ENOMEM; =20 - ret =3D nvme_mpath_pr_resv_report_ns(ns, rse, rse_len, &eds); + ret =3D nvme_mpath_pr_resv_report(ns, rse, rse_len, &eds); if (ret) goto free_rse; =20 @@ -399,53 +245,8 @@ static int nvme_pr_read_keys_ns(struct nvme_ns *ns, st= ruct pr_keys *keys_info) struct nvme_reservation_status *rs; =20 rs =3D (struct nvme_reservation_status *)rse; - keys_info->keys[i] =3D le64_to_cpu(rs->regctl_ds[i].rkey); - } - } - -free_rse: - kfree(rse); - return ret; -} - -static int nvme_pr_read_keys(struct block_device *bdev, - struct pr_keys *keys_info) -{ - size_t rse_len; - u32 num_keys =3D keys_info->num_keys; - struct nvme_reservation_status_ext *rse; - int ret, i; - bool eds; - - /* - * Assume we are using 128-bit host IDs and allocate a buffer large - * enough to get enough keys to fill the return keys buffer. - */ - rse_len =3D struct_size(rse, regctl_eds, num_keys); - if (rse_len > U32_MAX) - return -EINVAL; - - rse =3D kzalloc(rse_len, GFP_KERNEL); - if (!rse) - return -ENOMEM; - - ret =3D nvme_pr_resv_report(bdev, rse, rse_len, &eds); - if (ret) - goto free_rse; - - keys_info->generation =3D le32_to_cpu(rse->gen); - keys_info->num_keys =3D get_unaligned_le16(&rse->regctl); - - num_keys =3D min(num_keys, keys_info->num_keys); - for (i =3D 0; i < num_keys; i++) { - if (eds) { keys_info->keys[i] =3D - le64_to_cpu(rse->regctl_eds[i].rkey); - } else { - struct nvme_reservation_status *rs; - - rs =3D (struct nvme_reservation_status *)rse; - keys_info->keys[i] =3D le64_to_cpu(rs->regctl_ds[i].rkey); + le64_to_cpu(rs->regctl_ds[i].rkey); } } =20 @@ -454,7 +255,6 @@ static int nvme_pr_read_keys(struct block_device *bdev, return ret; } =20 -__maybe_unused static int nvme_pr_read_reservation_ns(struct nvme_ns *ns, struct pr_held_reservation *resv) { @@ -468,7 +268,7 @@ static int nvme_pr_read_reservation_ns(struct nvme_ns *= ns, * Get the number of registrations so we know how big to allocate * the response buffer. */ - ret =3D nvme_mpath_pr_resv_report_ns(ns, &tmp_rse, sizeof(tmp_rse), + ret =3D nvme_mpath_pr_resv_report(ns, &tmp_rse, sizeof(tmp_rse), &eds); if (ret) return ret; @@ -484,7 +284,7 @@ static int nvme_pr_read_reservation_ns(struct nvme_ns *= ns, if (!rse) return -ENOMEM; =20 - ret =3D nvme_mpath_pr_resv_report_ns(ns, rse, rse_len, &eds); + ret =3D nvme_mpath_pr_resv_report(ns, rse, rse_len, &eds); if (ret) goto free_rse; =20 @@ -499,7 +299,8 @@ static int nvme_pr_read_reservation_ns(struct nvme_ns *= ns, for (i =3D 0; i < num_regs; i++) { if (eds) { if (rse->regctl_eds[i].rcsts) { - resv->key =3D le64_to_cpu(rse->regctl_eds[i].rkey); + resv->key =3D + le64_to_cpu(rse->regctl_eds[i].rkey); break; } } else { @@ -518,67 +319,6 @@ static int nvme_pr_read_reservation_ns(struct nvme_ns = *ns, return ret; } =20 -static int nvme_pr_read_reservation(struct block_device *bdev, - struct pr_held_reservation *resv) -{ - struct nvme_reservation_status_ext tmp_rse, *rse; - int ret, i, num_regs; - u32 rse_len; - bool eds; - -get_num_regs: - /* - * Get the number of registrations so we know how big to allocate - * the response buffer. - */ - ret =3D nvme_pr_resv_report(bdev, &tmp_rse, sizeof(tmp_rse), &eds); - if (ret) - return ret; - - num_regs =3D get_unaligned_le16(&tmp_rse.regctl); - if (!num_regs) { - resv->generation =3D le32_to_cpu(tmp_rse.gen); - return 0; - } - - rse_len =3D struct_size(rse, regctl_eds, num_regs); - rse =3D kzalloc(rse_len, GFP_KERNEL); - if (!rse) - return -ENOMEM; - - ret =3D nvme_pr_resv_report(bdev, rse, rse_len, &eds); - if (ret) - goto free_rse; - - if (num_regs !=3D get_unaligned_le16(&rse->regctl)) { - kfree(rse); - goto get_num_regs; - } - - resv->generation =3D le32_to_cpu(rse->gen); - resv->type =3D block_pr_type_from_nvme(rse->rtype); - - for (i =3D 0; i < num_regs; i++) { - if (eds) { - if (rse->regctl_eds[i].rcsts) { - resv->key =3D le64_to_cpu(rse->regctl_eds[i].rkey); - break; - } - } else { - struct nvme_reservation_status *rs; - - rs =3D (struct nvme_reservation_status *)rse; - if (rs->regctl_ds[i].rcsts) { - resv->key =3D le64_to_cpu(rs->regctl_ds[i].rkey); - break; - } - } - } - -free_rse: - kfree(rse); - return ret; -} =20 #if defined(CONFIG_NVME_MULTIPATH) static int nvme_mpath_pr_register(struct mpath_device *mpath_device, @@ -647,6 +387,61 @@ const struct mpath_pr_ops nvme_mpath_pr_ops =3D { }; #endif =20 +static int nvme_pr_register(struct block_device *bdev, u64 old_key, + u64 new_key, unsigned int flags) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_register_ns(ns, old_key, new_key, flags); +} + +static int nvme_pr_reserve(struct block_device *bdev, u64 key, + enum pr_type type, unsigned flags) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_reserve_ns(ns, key, type, flags); +} + +static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new, + enum pr_type type, bool abort) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_preempt_ns(ns, old, new, type, abort); +} + +static int nvme_pr_clear(struct block_device *bdev, u64 key) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_clear_ns(ns, key); +} + +static int nvme_pr_release(struct block_device *bdev, u64 key, + enum pr_type type) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_release_ns(ns, key, type); +} + +static int nvme_pr_read_keys(struct block_device *bdev, + struct pr_keys *keys_info) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_read_keys_ns(ns, keys_info); +} + +static int nvme_pr_read_reservation(struct block_device *bdev, + struct pr_held_reservation *resv) +{ + struct nvme_ns *ns =3D bdev->bd_disk->private_data; + + return nvme_pr_read_reservation_ns(ns, resv); +} + const struct pr_ops nvme_pr_ops =3D { .pr_register =3D nvme_pr_register, .pr_reserve =3D nvme_pr_reserve, diff --git a/drivers/nvme/host/sysfs.c b/drivers/nvme/host/sysfs.c index 16c6fea4b2db6..95f621c0a5b05 100644 --- a/drivers/nvme/host/sysfs.c +++ b/drivers/nvme/host/sysfs.c @@ -64,8 +64,11 @@ 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 (nvme_disk_is_ns_head(disk)) { + struct mpath_disk *mpath_disk =3D mpath_gendisk_to_disk(disk); + + return mpath_disk->mpath_head->drvdata; + } return nvme_get_ns_from_dev(dev)->head; } =20 @@ -183,30 +186,36 @@ 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 container_of(mpath_device, struct nvme_ns, mpath_d= evice); + struct nvme_ns_head *head =3D ns->head; 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); if (ret) - goto out_unlock; + return ret; =20 head->nuse =3D le64_to_cpu(id->nuse); kfree(id); + return 0; +} + +static int ns_head_update_nuse(struct nvme_ns_head *head) +{ + struct mpath_disk *mpath_disk =3D head->mpath_disk; + struct mpath_head *mpath_head =3D mpath_disk->mpath_head; + int ret; + + /* Avoid issuing commands too often by rate limiting the update */ + if (!__ratelimit(&head->rs_nuse)) + return 0; + + ret =3D mpath_call_for_device(mpath_head, ns_head_update_nuse_cb); + if (ret =3D=3D -ENODEV) + return -EWOULDBLOCK; =20 -out_unlock: - srcu_read_unlock(&head->srcu, srcu_idx); return ret; } =20 @@ -312,49 +321,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