From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35BAB47D93E; Tue, 1 Sep 2026 10:46:44 +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=1788259605; cv=fail; b=DrMDkxuT3PJtFstzC2OMerENYN1jeWZSuO++dyjV42LguCPQhf+raYWtLhAllleC09S58cJ9cqga4awpDDaghZ399wF5j/p1NPgDnZKfdxrtE3n6SbIBRPXkdGmESVkkaoggk+s3YVvWNF9FWHFazlt2bAc5hJajn3TPwiAzS8M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259605; c=relaxed/simple; bh=zLtfhO6Xv7wCPv5w1bY4bMrAQbh6OD7k06BJwZhkfpQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rh9t9ECmgW9kReH+/mfEyTx559zrrxoXZ+0VQ95syAGQOUbLl+KAQURAM5YzMwsCEq+RJnKsVSppOTDsmD6vbX1Ko0Zi1JHxBsr75DufqBuhHKGLHwdp5goErmuqVDdf0ys38h7zZaC0Br0qNcbH9zWFSBGOKm+/W4CLvuDprnQ= 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=DAo2twGy; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=uddN760V; 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="DAo2twGy"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="uddN760V" 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 6811rrEr3316819; Tue, 1 Sep 2026 10:45:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b= DAo2twGyT0VJ3vNcsW/y9ldQzzei694ts0wHutfxBTkSin36ZwAFdDgVWxAKe5K7 0SBIST6VvnjDHUN/g8fKaXqOxL9FbeiY/FRVI414VS9dzeqtGHzlkCgwuoWOSf2H 4moWg3N4cVX9iGDYJQbC0vEyE7OePvHHLodArD1KGYA0d5OhkpkFlPRE22SXxh3c tnaopz9LQM5R5sP9sNm1yDTqa3X2MuBJcuXwHyP25dUc93CQptoFgtwlAmYpbXyg gkOnqBq6ZWZN9O2YXx6FoonibkR2zRLqQEzVikbNJVu/gEGbGZmiE7TtlXUichxN 9ibCzsj3/lbH45Oq67HaUw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbaveg1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:43 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjMx5037329; Tue, 1 Sep 2026 10:45:42 GMT Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11010043.outbound.protection.outlook.com [52.101.201.43]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve3463-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:42 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hcNGvtorZKskQKMuShFwtDSkwff1aTCIICQLuSTzbxS5kEUvqej5QKEp1dQ3mFVlOJOwAr6JQagBR5PqI16osm4GNZ0a5v4+Pjrn30ytXT2dWRvAUJVD4BUP2Gq/sp1pts0VMC6Xm2sn0gCQizi+fPyvvpUvvbv36EVgrrFTV2qC62SKDPsyIFtsIToKIqKKDMQ5KOGBXtN5m35jTjxL824VAeFhnmG573S1mukw2F9cCfhx4nRu9PNawntgEfKl+fwYo/OPW2+GGTSemUlZ+rwnAaO6/xb8+/lrqKJcV/RVsasOvyXsGg3q7edqCrh48u5oWwruhNo4BIDuZOjgjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b=k2qWHfUF8tTxQVZuKQ9Wp0cTGj+l8isHCmrvGZDKGto5BehuDrssoCMHGmE2mCWCvMa3KVp01AY186xbT5QcC5iPE6ANJuOKQxEPDSMBaHyz4UBx7S5FV+glP8wKzM3YOieA4pcIUD2aBOTODT/dZ9CUeXx0cTXbMlwGPHwAfsXe1Yj7UscbwyutFjkt7LpqKveTAmFXijts3+JkANM4MChR8UAeRlo8pc42Y1BsVlu25z/+C2/Gstmn9KnNCLo1Y50RyUa0l+AdRSBY8PGZQlRIfa5VuzsCybAwFnst0q7PMpdfY/2aV5lJ4MhheX8leY5su7Uq5e2MvJdRAGkY7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J9o4ieBmGZL18Q+OWSm9FZGpiZapsYeD98jP3kX3/i4=; b=uddN760VJQCijbnGu7LUJ0xGX3GKBmSQogVXAJ39QOXfCFhKTODFlQl+6xePA/H6CZDiQYaPf5b8WVss4FJCcRZ6pr8GdwLfVgUomyZdaZoidg1dLOzOwQsHB24oOtanbwI90U47JsIQ3EKCjhxuW1+Nw1MGvh+KIbCZe+MI+SE= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:40 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:40 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, Hannes Reinecke Subject: [PATCH v7 01/27] libmultipath: Add initial framework Date: Tue, 1 Sep 2026 10:45:00 +0000 Message-ID: <20260901104526.3850621-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH3P221CA0029.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:1e7::24) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: d777b54d-4788-4ed1-ab32-08df08162a25 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|5023799004|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: JpClAxGSb4lndJV1M0NmU9dANOZzcTx7MMkaIj4gBk9MDxxipagwVEUtY8GxTk+d3R4xrFvEPiRKHznwt5rpGc06m7uWwSwcaOEs2qKLhY3oVp7JReyhgoSXaqZRk4pZLPTFJEG8JYqMpSUpJ9QrX6+BO22k6CGehzZUorn9n/Bo0qG8g9NVSRSEiw5MrTuStwe781n2H0E2VoR23lHWNnK6s7TJclwb+bANPwg+m5aKgo51jBqst2nGkedSrc7pm3X+pRfkQQ5xhyqa/npVtcO53uKvn07+NnlNOspg589b2j079RXFqLNFRfGnN3cP/odolEYZ9Haxp6PCaD1ik6YsPEXK6QIN+kfHSy7WF15s69anYEprgRlNau3Mxpg7Ven686nkjLP2wmrAPmETnKh7w+tv1iwUIMK7pxnqCGeU9ApUBFLD7mvB7dDmY8ZG3+e8Pon3MHBXAtJF9TU9dHAYqtx1jeGrqj1SNHDng51QnDc7r2L0CCaO3370UNxn/D0b9fscx9UM66Tu9dWTEbVTUxwGLUYZsPRTD7lt26QT+RikVgOBa3aEuZNUSKzDxu7UEs7qXzRUTyNpgoBdmRXvSgkdoPbV+wQZF3q3CMG8uNIfiDCY/LUsorw2/iXkWpYKFPbmkCV6wfFOnJn9Pkh8sJHu2ZH1N8l08Ezp9jI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(5023799004)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zafI1dWB+Z/nAKF4N0TUNyzWm3fxOZBm9ea6PCUg+Q8fAvNTHDWrSl/1OVYR?= =?us-ascii?Q?8EjUHCR0O8b0COhSp6DQcVo5+9XLSxAAcLeIMvjT/a52mZype9F8bTTTeLe3?= =?us-ascii?Q?ejA4l8AOQNlQzzD4NC5xxMziqZkyKAbE37TkAU1tEvdWkQUHgnhZ6Mh3H8u6?= =?us-ascii?Q?mO/SnDu/7STatj+o9bhzq7Y6cw8wQ3V/JC08h2knZlogB2yI1eQSIdADCbXb?= =?us-ascii?Q?f2oiElss0lyNtam+nfTFH63Th+HMDD00nKGZ1BnrZsUksr9ewdnID47GB7VA?= =?us-ascii?Q?Kt1NTZM6c3MQnL/mcpzEiJ6RzRH4c/9Db56DE18gt8xTTxVwz0NWGtsfTjD3?= =?us-ascii?Q?OrpO7/v3MGStaSx138shjsJ4kZa6w287uvwW5EaV1X8bukYtTYvqf5VU8wpT?= =?us-ascii?Q?68V1VqHK/CeyBt+X0xrHf5GJBdEdawN99E7+eFIjSDNSgwqeHFQCkYGMlCp8?= =?us-ascii?Q?hHdwa+mTLtkialF11QoqT/9tMFiTicnL9e8hUR7BG6qfHUZNzivQjYLF/OyZ?= =?us-ascii?Q?MGs9igSNVN/MMM/PgkObT9DbDs1OOXMp1TdL8BWMCWNpeSeh8ZsM8Ntqtm4C?= =?us-ascii?Q?fRWgG/xiOUFoNfjyfyYd/FofSSmiQ7VJrOSftONfdHb+T8XWTNYuiWNtRlZ5?= =?us-ascii?Q?CyR49s7O+TEmog+uQB41NIucQIrLALJSfK0bH1G+V7A3tykdVXN337Hz5Pox?= =?us-ascii?Q?L/C7DwRFnakE2WpWbpv7jepO6BWEzAiztOyCwrr2tt+N1R37BzRvgc7QGO85?= =?us-ascii?Q?a6Rbr3JCTkIRXOJlfZIRY76uJzkvZGJah9ONKoJTahAPVl73DYhEvW5/OwCo?= =?us-ascii?Q?BKU7ClulwztL9vCsv35CRZ8zCLn0VRFS0WwXFuneUOU7nqOoiHPrNGmuq9us?= =?us-ascii?Q?Ybnt87LCr75rM9Ibq9svZq90bV2PefPLv1GVwR4Dal/g63HYiLmWInM+TrWr?= =?us-ascii?Q?/plNDTPoPghGaB0eIO4Xajurt9f5mBodk2RQQHOTpe28MmVqriwkaspji4k1?= =?us-ascii?Q?AeEfugDtH/eLTawPr6DBaS5VJU84hSNj+WvplZZcLbunjzcQOIRuQvnk4sSA?= =?us-ascii?Q?a6DvLdEpH0jiNTasaJhNgRjracE8HMB5J16uoAyjj50MlwL8qYeRZmqdRJjP?= =?us-ascii?Q?38BrnuSRqxYw24AznzfovvSSOlbc2hXxMcGNbhi5XIBx6n4o76EyulHUTN68?= =?us-ascii?Q?J7XNhyu0uI5+4BpKnQOs64XHtjt3+dOIOdIOgcA2IWMEvepVicU/p1cx/Fc1?= =?us-ascii?Q?P+wxcw6yyRGl0j8UMd269Zz9kOkUDlHv8FTif444V8lDWtD+asQ294DBnUJN?= =?us-ascii?Q?8BkDdDId8rQRUIz63S2x+SqepwyF+rjOf454v4+pK5s207CYoyMLZz0XIcB2?= =?us-ascii?Q?EIbmVOX6dlsF7+veRhh3xt14KdLf0P+qx+G+slsWGcUnsonNJgcR2xkFAdSU?= =?us-ascii?Q?eTIBTQOTGrxk0184fIhf3hj6YWGKOPt9FGbTFYZ5WcCj8q16Ce+gs5i5vCbz?= =?us-ascii?Q?rIig5uuv9F5oB/YCmVEldPaVdKkWoINnbreGYYgmCApxlaiZoFxwZWkD7OSN?= =?us-ascii?Q?q4VhUk7KDoYHYAxENAyFzzyU6kBSzVDoJGYDw/CVMNlwqDkA3/Ic3rX1MKIw?= =?us-ascii?Q?Ir4EgTp3O9Qh1dxKZbf+BsJjtpEo+fFjXYhSCKCVwDREUlqpgJLhnkVF2tmb?= =?us-ascii?Q?M6HNofldHZ/B54F/cxsx06Z1yd7TgwSfkuxVO7LQQNhkWHRzLpYmIBQjeDJA?= =?us-ascii?Q?ftKRUYGP7X/3c0QxWu5rX9ZqLyGCakM=3D?= X-Exchange-RoutingPolicyChecked: vvO+RtCGQWO7ZED3mM9pBKEvfrMLK068FHzBP64h+oxn6Ta43LtrEdk7d9AS0fCjCb9W7Jk4NBgMSkMEneR0SuncufRPpebybaSoqrmMWTD0kbe3TfsuTdpFdk4/Ybkx5QE/Oi+aYfqciiSmBW43m1+Ya0lBulw0PyxKIrFWj+feNPI00LIBxjr5fd/wfV2kgOEjX+KQYNoc7csAhNlwC/pre+aCTuCazsnIBkiTcthRkHQShWHZCe96Y53tIsDyZGSU90meBQe3KyX9Wiqp8XQDodK10HErtkQ+X9DCte5luKD0SAnrwI3kvCexGwioS88ujRN4a/TZwcxjTe78Ow== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: YDWkGWqKFbHC59DWWTjIGDT7Y0jHQyEOj3d0Gt6oFvoq+i70xWvl2o/zcXEiGEstjbhZvgBWI8y8oqMytOcBlL4eYddB3PJQFkoSuHkzZReBcBIGICJZWlpi1jFr5Gmq3Y+3FN83AL9Xp2fT0lI9qSkAl8WLB4anX0gPdvAMp76sdUGm49VmO9RjdlhG2Pt4d1OfLcT+RhQLiCXoVP+EjiYhYTsxd1SzFGk7dDgA+CyX4rggoJNFB0rPr87Xd5GlWyLkzk9xRKDw2xKjBrgDnkCJdqRLvT/BNio/t2vFUGFE1J8s+b/jsSIC2vGo+7FLJY0MSg5XVaefadEY2UFj9VYt77SVq3nJhbI2DjUmfr4K24HvSlHn6r31Fx1l3LRJv3Y05Sf4jaCW9E4nbXfKeDw0Z7HeXHgkLt2ldnJLxo0slpZ7PJLjdblGlT16JBk1gT0TmlZxgahKmZAL01nYK9qJIWmBdvkw2XwgQ9MHefNm24i2MraphBzCn3ZTF7YkC17BSeW94A2hcQ1BPgiao5+VedlfK2ZnIOFoWFeLJm3siWFnnpNa/5j0DTRjgUPeV1LaFZaiqlQcrCwzgcmxtHzGH7kjXHraDZkD9/d2F/Y= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d777b54d-4788-4ed1-ab32-08df08162a25 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:40.0752 (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: Hs6JlAbdNc9zWlOWsD0dn8usSkLIdd0nx12H/JrRZBdA+4hp+07XtSOAhUumpgnrf/HJWtbOFC5F/ORWxSRvAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX6Zf3jt1HpRCo mjeYxn3c1mH1MHAu3EymIHtQXNlW2kA2e12rBsUg1ufya8qI3TDPEmwg4b7nTvtQ3mw0EJyO5oS Rtd4rPMDjwaiyJtMhZyOmpNaAzAl5iI9/+ckiuS2HlKpOTMfPX9o X-Proofpoint-ORIG-GUID: vyzcNErQDkIyqicrZ8c_4JDy_DyYb9in X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX6s2qpWkA/Mkv jLudpBEjjzdVxu5FKFlFvWtgt+XCXsVS7biDGMWcqOd9tm6ZnbEpOXfje7TjsmoBfcgnk4dMngX NGnAGXBUHTV4BuME+lPjIPVzY1nhzjsP9VHJSC3Evt0e3ricJv3HIUG244gGkiwdxs37yFQBBZR pjyDff89yKFTghFZRoMNuETTwqS9Rj7m4YStmFZghIZLegBPdCaTPQjc5IMmdMD+RFOF82Iv8A+ 5It8oVArKEitUt7W3sjZ7bGmxQCQCbUwDmpmAgpkoTKEUYTdBYMOYQNVy7UK5+NmawTuw+pn+TS C24Q2nm7KmnVTVQZrwR0KFdQ/AE2MtCsi4eoz4CnieHQg+toVvKYjpg2XDEo+UHfvbLCoom6Pn/ jEg/F5z+EtHZEjHKqafUAtsdoyL/p+lmOWAVLfRQD1oKI8ZIjvFHUrPMzovip67WYq9Ik6wt3ZO sJf1bQp81XEKIHi86jA== X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96acd7 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=VwQbUJbxAAAA:8 a=IMLwmY2krkRuQTCR-eYA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-GUID: vyzcNErQDkIyqicrZ8c_4JDy_DyYb9in Content-Type: text/plain; charset="utf-8" From: John Garry Add initial framework for libmultipath. libmultipath is a library for multipath-capable block drivers, such as NVMe. The main function is to support path management, path selection, and failover handling. Basic support to add and remove the head structure - mpath_head - is included. This main purpose of this structure is to manage available paths and path selection. It is quite similar to the multipath functionality in nvme_ns_head. It also manages the multipath gendisk. Each path is represented by the mpath_device structure. It should hold a pointer to the per-path gendisk and also a list element for all siblings of paths. For NVMe, there would be a mpath_device per nvme_ns. All the libmultipath code is more or less taken from drivers/nvme/host/multipath.c, which was originally authored by Christoph Hellwig . Signed-off-by: John Garry Reviewed-by: Hannes Reinecke --- include/linux/multipath.h | 28 ++++++++++++++++ lib/Kconfig | 6 ++++ lib/Makefile | 2 ++ lib/multipath.c | 67 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 include/linux/multipath.h create mode 100644 lib/multipath.c diff --git a/include/linux/multipath.h b/include/linux/multipath.h new file mode 100644 index 0000000000000..407d985cd31f5 --- /dev/null +++ b/include/linux/multipath.h @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-only +#ifndef _LIBMULTIPATH_H +#define _LIBMULTIPATH_H + +#include +#include + +struct mpath_device { + struct list_head siblings; + struct gendisk *disk; +}; + +struct mpath_head { + struct srcu_struct srcu; + struct list_head dev_list; /* list of all mpath_devs */ + struct mutex lock; + + refcount_t refcount; + + struct mpath_device __rcu *current_path[MAX_NUMNODES]; +}; + +int mpath_get_head(struct mpath_head *mpath_head); +void mpath_put_head(struct mpath_head *mpath_head); +int mpath_head_init(struct mpath_head *mpath_head); +void mpath_head_uninit(struct mpath_head *mpath_head); + +#endif // _LIBMULTIPATH_H diff --git a/lib/Kconfig b/lib/Kconfig index 4e6b34c3346d5..8e0c3717e8e9a 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -630,3 +630,9 @@ config UNION_FIND =20 config MIN_HEAP bool + +config LIBMULTIPATH + bool "MULTIPATH BLOCK DRIVER LIBRARY" + depends on BLOCK + help + If you say yes here then you get a multipath lib for block drivers diff --git a/lib/Makefile b/lib/Makefile index dfab958327c5c..7041d278f2d1c 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -350,3 +350,5 @@ CONTEXT_ANALYSIS_test_context-analysis.o :=3D y obj-$(CONFIG_CONTEXT_ANALYSIS_TEST) +=3D test_context-analysis.o =20 subdir-$(CONFIG_FORTIFY_SOURCE) +=3D test_fortify + +obj-$(CONFIG_LIBMULTIPATH) +=3D multipath.o diff --git a/lib/multipath.c b/lib/multipath.c new file mode 100644 index 0000000000000..f7b26c66eac7c --- /dev/null +++ b/lib/multipath.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2017-2018 Christoph Hellwig. + * Copyright (c) 2026 Oracle and/or its affiliates. + */ +#include +#include +#include + +static struct workqueue_struct *mpath_wq; + +int mpath_get_head(struct mpath_head *mpath_head) +{ + if (!refcount_inc_not_zero(&mpath_head->refcount)) + return -ENXIO; + return 0; +} +EXPORT_SYMBOL_GPL(mpath_get_head); + +void mpath_put_head(struct mpath_head *mpath_head) +{ + refcount_t *refcount =3D &mpath_head->refcount; + + if (refcount_dec_and_test(&mpath_head->refcount)) + wake_up_var(refcount); +} +EXPORT_SYMBOL_GPL(mpath_put_head); + +void mpath_head_uninit(struct mpath_head *mpath_head) +{ + refcount_t *refcount =3D &mpath_head->refcount; + + if (!refcount_dec_and_test(refcount)) + wait_var_event(refcount, !refcount_read(refcount)); + cleanup_srcu_struct(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_head_uninit); + +int mpath_head_init(struct mpath_head *mpath_head) +{ + memset(mpath_head, 0, sizeof(*mpath_head)); + INIT_LIST_HEAD(&mpath_head->dev_list); + mutex_init(&mpath_head->lock); + refcount_set(&mpath_head->refcount, 1); + + return init_srcu_struct(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_head_init); + +static int __init mpath_init(void) +{ + mpath_wq =3D alloc_workqueue("mpath-wq", + WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0); + if (!mpath_wq) + return -ENOMEM; + return 0; +} + +static void __exit mpath_exit(void) +{ + destroy_workqueue(mpath_wq); +} + +module_init(mpath_init); +module_exit(mpath_exit); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("libmultipath"); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB80C47CA9F; Tue, 1 Sep 2026 10:46:12 +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=1788259574; cv=fail; b=bq3gELXmNawxtAREFAMCgvH+wv60n4nbKB6q012mH42ici76OlNaZcbYxDEWJVoDJNyCQECb0eDvIpj0lq3cY5hcUgLCYU8mhSSDFhr9nRT5XDMFCkV/EUtxGnVT8yN9t9/aR4NeZEGdnWh0s++dvQmXkJiJrCh+q4IFaklv3Qc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259574; c=relaxed/simple; bh=RN+L5KOpEmzubulIU/SUlvSE7bdW9m7T9JWYTiRI2Yc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=O/Vn1mWOBRf6myzK3mRdwjA+wGbK6pCz5s22Ff9AQjGXmBJbNtWgayB2GCrKL21EBbqKYuuQtQUc5P7pbDdCVlHjAi/x+6jOeDdXzju0yREWEMVXtxuZJPv/8MMq+zwv3Sw6wcdpZRiwD/vCxo4nvS5nNXMmH5qqZljwPOgKBuE= 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=Tk6BvUzx; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=hFSS9MhZ; 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="Tk6BvUzx"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="hFSS9MhZ" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBwvX2296648; Tue, 1 Sep 2026 10:45:44 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=GDs+L64Jr6fQBFhxqdr16TWtPoUfR3BFdJpYgHWHLSo=; b= Tk6BvUzxu7SkdYWQC7RHeAPzlVrLKitYWxtTcGChkD2SSDNo2rH4YYAiVv7glRtR z6GkQS3dAw/6OYUrD1fqbIN3QjcpcjBBCa7Zo+eM5IVz3veGnPa7H7NriXHnDy1z jkL3POit6Gg0/N9yCYTfOqDLPpqUmQyBpUAw2a8Nj9Bhr/9Sa9EH/BRpf76/X+Op hmgwbsj5lcsfhQWvy6wSUS9y0k5qJ4gnF+WBpISmXFd/9gHHgmel7EBicxhPwFa0 C4k6KrIDvZDebWkXRWoRF0YZ04dvy2eEefSxW4XvQQwisU1zp4sBAbJaMd8aIv/U Pa9lb9SJbcLf1Wnw0XGFEw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvd9s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:44 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681Aj6KG023288; Tue, 1 Sep 2026 10:45:43 GMT Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11010042.outbound.protection.outlook.com [52.101.201.42]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve0hqc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:43 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uRUE/6CBq+6DUB43ywQeIJGM7LqWFNsnmY3Or8B7c0WFFPzgPRQIFCbfm6AtI8HFWcpTDvjcRUl8ODSyZKskWweQi84Io1//X/7s+QgqM3QGLS1QdmsJlvMKpqOHBPd8ME7tHOXLLcHpLVW5NnywDy/+IBknkrCAgDmY2n5L22l6f7PzviHUu8T+J7WPF2lhYUgAtp0kn00/AZ0h9hMkfT967HPm7CuhQkp++Sbt3a9pVN9XtWorepJJ/V2Jy8RPFyxn1so3DW+kySu4t6NYdvnB8lMDk8NOHyOP10tihC+J18eZMbHMACWLTX6V1b7aSj7DafBdooTka2awyqlPZQ== 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=GDs+L64Jr6fQBFhxqdr16TWtPoUfR3BFdJpYgHWHLSo=; b=GtB500K8qgFCCR1sk/GXhSGqjiB5dFDf6R8p4GMpWI8/hsM+wZvO2f1fSsIpUPdLRe29ichnsdww/NUp3+hETGi0TxpGN2HqnbNwy4ITgL/LX2fJv/bBwJKn0IXc7YV/KbZs00f0w9NlA+LgR+jpvLSmCBizPkBfAYYEuiQEhwfEZd9YFXYWacS+xK3QJzxx9SGma5aXmB9nviF8HnWCzrGdaXX8NIi8qaEOiXBwwqF5QQ12UFhkKNGg2LrHlqGw2bWygO6aah6l3TmwoxKeQBCmUYMIhcS7mIhQO8XgKhTQM/gaajoSrcxZlzysg4MKIhGqqZK/OJkSTM78uV7lcw== 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=GDs+L64Jr6fQBFhxqdr16TWtPoUfR3BFdJpYgHWHLSo=; b=hFSS9MhZFzbirIvKUG+bmLdQhqp4GNIg/sGDZycwhfDMVtK0qsDb6oGoViDeLpR5hzIBqtewVA821yDCGQYcK+8vN9dFf+0S9iias9SZB2nNzZCPa67Ft9Aowmv9MROdSEJtDWT29/j8lVd576SGaLhiRG46bz57nT8MlLgfqck= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:41 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:41 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 02/27] libmultipath: Add basic gendisk support Date: Tue, 1 Sep 2026 10:45:01 +0000 Message-ID: <20260901104526.3850621-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH3P221CA0010.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:1e7::15) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a7b0247-dd21-4d94-5914-08df08162acc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: zFjtlCEtmIAfMQ5rfLUNU+GwOn6Em3GN72x0cBLBDXqD2nQgx0XIlyihjTiqg2hPEx92QYxkx6W0UzPvjbbZLuJDS/yY77exNdnsc2CzkxN1XDzBazd2MqHbCWkKhGO7EzvrcARCwvs1lOa4XoR7Y7ysyOYraklHh/+I4nrZhftzLclWf1jKy8h2IboRI7mHXu28uQ75nMiT7hnmuqipNAmdYNKndyRp6ysg0M4NFxSt7eFgS24lVeizAZvUTHH9bszYLRi1+pfhPL3DI0PjGFt+WjRO2j//YvcaZmph19MD9xVCb6aTHkKwtpvgsTYzfvjMJMYUBFxC496jHtxUuGVfi5Is8JsybdX3ZM4nn0JXjUOIrt/cihOyrNX/UdKYWTHmg2zTlP+myQVJtB/Usbv06BdFi067Lkq3e2iLUViFcng4SM3RBjGUzMG7jsv1GPC5uez+xmC1LtHf51/8whD1WU44GT2k8BBkM98HAUoR35P3CNc/gkMdLzgFEyMQxmTSWUNfXCLWUBtLAjb7CI9de9wKeOVU0MySAWv4rHHITR9jbQt1WLo2BBcnLRtEjOkEJGx9E87GBp9Uj4cIAcUi3+1OP3DWlsdxl67L53B8kjdHGL5TZL+wed9uNhwI798hjk0eangqZIzUXChfJh3mZp8z2TyRzCYLa4jDeqw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dxkMAjbOn0m/cXY5MI/VbAsKKCJiojGyJmzlh1iA382IB/FwEEzhw5oL/87B?= =?us-ascii?Q?PrFgW3MyBGkGH4vVFp/JpOOQxDkgdVLxr/Szehn+JMvGvtrD1aNQXca0+HNP?= =?us-ascii?Q?KM04qh7tAJQ/F0vCHrnl1iULIO/DFbi+gaXfbddz2liqpWXa5hWgjSiKp2/E?= =?us-ascii?Q?rigvHyLCoz4TxM/gllTsv6DoFRiqgiCDFEOJsOLSOnvrOgU5rzN2JgzYWj/k?= =?us-ascii?Q?TXflkhIDlEBG+wHWVWdhvwEyE57RyzA/GoFzmZgp3hjHns1j4yokVXk7ZnNt?= =?us-ascii?Q?7pv/t7JhWXS4YZsRhZYvS7Rc3b7g0sbYtQTPanrtgszp0O1favo6WOVOsPe6?= =?us-ascii?Q?VZjB4tbbGIBGVP51upZEn9Izx0T3oxUXfVStDptyHCIi07gQxwt0Fxhcjw6o?= =?us-ascii?Q?SVkLmArPYD8VUnGfw34IoDpO9fMOYMPugHdppwnGdNnTumL/xsSd65/nKoRO?= =?us-ascii?Q?TaesgUvEvJoh5xCKpjyGKEMzr83V3DNux3ChZQtJ0EJGNWlh9rJBQYq8wX1z?= =?us-ascii?Q?U8cKMNl4rHVG3TQdqJPXjQ0VYIyhm/22aDtlaSfwMoMW4mpyQO9p597e0kG2?= =?us-ascii?Q?CZ0BkSj4A/clW+NFnwm2q0PPcbQRzlrq2dwVgBJQgbt8QW1IcvZEPrYOruhz?= =?us-ascii?Q?o59w8U6pddeX2aFvVdIg72k1yEHAzHLPrb2fDT4crN4UCDwSWE0M7M0JMhc4?= =?us-ascii?Q?IWQVzjiJnopLWhXhB2AaNe8DFmvUwbJx1oj+s/g60Rj8g3Zq3B9qsKX5WYoq?= =?us-ascii?Q?S1Co55MsWwzo1rxhWln94a4FX6KYLAl91ShQG8DwT/yW15exFWef0Ih+t2dk?= =?us-ascii?Q?KFs36MDH41CDRjjIS7S6CxBfcaXE/ANBIq/QsZPXEwhzdpXrDNl8TZPY5nds?= =?us-ascii?Q?4WmWkVYrC4AeSHqCBTIAk85KzR49y4sJ1mQ+yWTw3sKFEYVliM92Cz869RDr?= =?us-ascii?Q?bhTdbdlyr3EusPkA7ruYY/HojzPg9Ej6yxe7PTr5IW6Qxl2dAWKDGTZwbeKN?= =?us-ascii?Q?ZxWTLQ2t1RTIZ4WmUAWaujISzIeC+cCdmlVYsVnjxfDWhW1b86vh6ZsaANfV?= =?us-ascii?Q?hPwsyG0DqT9SAYEgT5lbcXHsD4MQp6UV6EynnoeeyBhrgiKYNpt0xxH0pLoF?= =?us-ascii?Q?vR8ZHLbTQtjNzOueuInySLomJbAYyWzWJV5Q+cgvhUqlMAbMAkWYMB68Z3oZ?= =?us-ascii?Q?MVfeVb+r3jcIHZZ7Uhi4PYkAR4UFZ2e0fQ/hE2pLUgsvIIZt7p0E00gdndHv?= =?us-ascii?Q?Ziv3dkwmooswLRB48vMChQm9ud+5KswKEg8tWMalUn2/IeqNzuXr+L06Uxw2?= =?us-ascii?Q?zeDabSzvE4haaozqEMAvnFY8Z9kDWmPL0CHhWrmxEajL6sCf7zmKgdMKZ26C?= =?us-ascii?Q?/uK0xjiatwf5rIxJibN6RArABhIrnyO73PLXVzOVCqQqdi7AdIonJsxNFM9w?= =?us-ascii?Q?c1VBjb7JIvcbPlslsoupk8+rvICSRf5YHhLM1ndSWbhDvUitGw0am5lCa3qi?= =?us-ascii?Q?hsyxi+hxtd7HNeLlmlPDL8KGqd6H1V9Jxwlq416cOo/5UsCXYbplTjCaX9wc?= =?us-ascii?Q?gEDUIDqI64VGAeVgJANfzcs7eWX2X4JeTRxdMPNzNrFKWHVrYohc8N8q8OC/?= =?us-ascii?Q?EZNpePGo0DUJ00QwsuMEGSBzsOnzD6zFT29B2rtKIISp4zmlMRGmOoNH53LB?= =?us-ascii?Q?Fr7FInykxuqTpEqB9RtjWPjKjXXBrVnGi2lqCjIA2POJpaP7SSvga09ofaso?= =?us-ascii?Q?+e3PXkFYvA=3D=3D?= X-Exchange-RoutingPolicyChecked: Wlw61fwJaw3NMHpQU8ihZTm2/k6V3gYseBoQfhHK43A26pQxytPe/5m4z7NFYI51zcfcX6VnxMvDZ18LVlnUdeNfFQIJOpot4W7VRAIGXymZdGq9gewJ6JGgx5tcCse4Bcq/YBPg7TK0lMxU0/QbF+LeQ2wQ+h9qHsd/vLZMJ2sRasIyLoqMEnNyTzLQv9ffTXyibCjLv+VeN1o7Cd+P6hTPf9iNCvAxWblWIixmMaR0vBurBG71gaZ/yhe6NrfkbP2csfW5BMN9eWWTU7RNsXce+8CsIq/nNxl1KOX2SzeokcLI6LOlQmHpS4jkfHhttIqM6jbAaquml6/fSSzw0A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: H/n/aX14zmrRratIDzUDxG+W2m6Aadkju+4qhZwl7yp4oqbjD+keXs9kYY/nd+QesF8/ouMxV+HSl1sJGzq4zk2nfbIsKlnVexzi81/kV653k8z4j8LnZayWDL8hY02vPyZuni6GAZEvEX0hAIiBfBNp3TD2C4bne43FFv5q3s+cPKVGF+RXIiFbuXCYp9+5/Y2JDYL614UC9rwDU2qb49uoXGzbqK6Xdi2rs6yPGyg53VdVQoCXdwNefodLOGPGSt1iHX98tyRq4m/fouOScvFn7Rmizy3v8OjJgCvk981lxWbMuiVKwDCwlLctcMYTcFUZTt3hYELiPjWJDMo8XQjEg+XlA/7bvhxVy7oUUSZ3MNS7pwsIImVr/OniIOTjYwy4QF0Z3Sfkp0eit1SC1gPXkEopy7zj9rY1TdOy52q1uV4X7pgGrhdRYyONn+7lM3sUKnJ/BJLfEdFtLob4pQeQPfcO9loz4LUdUZ+xGeW4FjkSrKPfas+PWkPtuuL8ci8OSfWdmr9Q5JGtpieJeAqax2iLrvh9NgDoEzjT908+S1aS/k0VfZFyB8/H+A1lOLyTo3fGvp9rPzMyGDugHPlPkDGuo3N1cNaBErXNKVg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a7b0247-dd21-4d94-5914-08df08162acc X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:41.1306 (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: +5MAST6+Q0dFewXmZLytrSVjKWbK4eU0AMC4F8wOrgdkQCenDqCw2YjpN0kBYg4a06yXP6U3F7sAlAFtLYhCtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 spamscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-ORIG-GUID: lUjMWFHA3rNqnwZSYEgWdFyDOVLStdfA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXxa6b1g0aNgHt Y6gZdsHvHsnS6mWsLH04cE6ylqBMM4goLKVH810cUdTSuakWblQ2DWPiaejo7ph4KaLLuSezC8T Lve4qVEtxKbIetm780TYeK5hEdb9wPJqPW3ArXZLwJutZh5JlcyCjy+YAN50yhYpEfiMsz6C4uk cZ8c+UW5zUFiUFjGd+Ol+IngmfNR6a0hh9AwAKFW21S7AJKiMk2w5oUc8P0fmyZjarxk047tb2v XgB3MeZcZW6kC9VDGg6i11DH7+9mJfKkmzYrEyFrwFruQ8G3XfXyfwo40Im1rE/xHzY0WL26U2v Vjq1FGtlY03rTmtgc9ZeYDunLplbCwDx1ptYvFgaK+FEncaYbfywPXVtnfocuZ1EPuFWOrG30Ud CLOnDWPjan4b9YnmGagLwEnclCCKjSz1AzRY+eocwZqSnpBrA3bVFFulWetlDDrAcEPo96AVNbs bP74xIpTvI1i59+aC7w== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96acd8 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=B52eoxIPv8yZRAGToxQA:9 X-Proofpoint-GUID: lUjMWFHA3rNqnwZSYEgWdFyDOVLStdfA X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX1FM065qQVZtI Q5Z6HXoWEQ6bFkylDbro6OR0wyWv9FbXfuDfYEkCXO+DESioS3Y+JOXyVCXdRlbJHFLtluR4OBp M7RCB3uKhCb7TYwJWRdzwAb1JNCnqFRynoEF0l3m4zHSdjA8ut9L Content-Type: text/plain; charset="utf-8" From: John Garry Add support to allocate and free a multipath gendisk. NVMe has almost like-for-like equivalents here: - mpath_alloc_head_disk() -> nvme_mpath_alloc_disk() - multipath_partition_scan_work() -> nvme_partition_scan_work() - mpath_remove_disk() -> nvme_remove_head() - mpath_device_set_live() -> nvme_mpath_set_live() struct mpath_head_template is introduced as a method for drivers to provide custom multipath functionality. Signed-off-by: John Garry --- include/linux/multipath.h | 38 ++++++++++++++ lib/multipath.c | 104 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 407d985cd31f5..ca6e02505be43 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -5,11 +5,19 @@ #include #include =20 +extern const struct block_device_operations mpath_ops; + struct mpath_device { + struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; }; =20 +struct mpath_head_template { +}; + +#define MPATH_HEAD_DISK_LIVE 0 + struct mpath_head { struct srcu_struct srcu; struct list_head dev_list; /* list of all mpath_devs */ @@ -17,12 +25,42 @@ struct mpath_head { =20 refcount_t refcount; =20 + unsigned long flags; + struct gendisk *disk; + struct work_struct partition_scan_work; + struct device *parent; + const struct attribute_group **disk_groups; + const struct mpath_head_template *mpdt; struct mpath_device __rcu *current_path[MAX_NUMNODES]; }; =20 +static inline struct mpath_head *mpath_bd_device_to_head(struct device *de= v) +{ + return dev_get_drvdata(dev); +} + +static inline struct mpath_head *mpath_gendisk_to_head(struct gendisk *dis= k) +{ + return mpath_bd_device_to_head(disk_to_dev(disk)); +} + int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); void mpath_head_uninit(struct mpath_head *mpath_head); =20 +void mpath_put_disk(struct mpath_head *mpath_head); +void mpath_remove_disk(struct mpath_head *mpath_head); +int mpath_alloc_head_disk(struct mpath_head *mpath_head, + struct queue_limits *lim, int numa_node); +void mpath_device_set_live(struct mpath_device *mpath_device); + +static inline bool is_mpath_disk(struct gendisk *disk) +{ + #if IS_ENABLED(CONFIG_LIBMULTIPATH) + return disk->fops =3D=3D &mpath_ops; + #else + return false; + #endif +} #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index f7b26c66eac7c..1cf20b0f62d07 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -36,6 +36,107 @@ void mpath_head_uninit(struct mpath_head *mpath_head) } EXPORT_SYMBOL_GPL(mpath_head_uninit); =20 +static int mpath_bdev_open(struct gendisk *disk, blk_mode_t mode) +{ + struct mpath_head *mpath_head =3D disk->private_data; + + return mpath_get_head(mpath_head); +} + +static void mpath_bdev_release(struct gendisk *disk) +{ + struct mpath_head *mpath_head =3D disk->private_data; + + mpath_put_head(mpath_head); +} + +const struct block_device_operations mpath_ops =3D { + .owner =3D THIS_MODULE, + .open =3D mpath_bdev_open, + .release =3D mpath_bdev_release, +}; +EXPORT_SYMBOL_GPL(mpath_ops); + +static void multipath_partition_scan_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D + container_of(work, struct mpath_head, partition_scan_work); + + if (WARN_ON_ONCE(!test_and_clear_bit(GD_SUPPRESS_PART_SCAN, + &mpath_head->disk->state))) + return; + + mutex_lock(&mpath_head->disk->open_mutex); + bdev_disk_changed(mpath_head->disk, false); + mutex_unlock(&mpath_head->disk->open_mutex); +} + +void mpath_remove_disk(struct mpath_head *mpath_head) +{ + if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { + struct gendisk *disk =3D mpath_head->disk; + + del_gendisk(disk); + } +} +EXPORT_SYMBOL_GPL(mpath_remove_disk); + +void mpath_put_disk(struct mpath_head *mpath_head) +{ + if (!mpath_head->disk) + return; + + /* make sure all pending bios are cleaned up */ + flush_work(&mpath_head->partition_scan_work); + put_disk(mpath_head->disk); + mpath_head->disk =3D NULL; +} +EXPORT_SYMBOL_GPL(mpath_put_disk); + +int mpath_alloc_head_disk(struct mpath_head *mpath_head, + struct queue_limits *lim, int numa_node) +{ + struct gendisk *disk; + + if (!mpath_head->disk_groups || !mpath_head->parent || + mpath_head->disk) + return -EINVAL; + + disk =3D blk_alloc_disk(lim, numa_node); + if (IS_ERR(disk)) + return PTR_ERR(disk); + + mpath_head->disk =3D disk; + mpath_head->disk->private_data =3D mpath_head; + mpath_head->disk->fops =3D &mpath_ops; + + set_bit(GD_SUPPRESS_PART_SCAN, &mpath_head->disk->state); + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_alloc_head_disk); + +void mpath_device_set_live(struct mpath_device *mpath_device) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + int ret; + + if (!mpath_head->disk) + return; + + if (!test_and_set_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { + dev_set_drvdata(disk_to_dev(mpath_head->disk), mpath_head); + ret =3D device_add_disk(mpath_head->parent, mpath_head->disk, + mpath_head->disk_groups); + if (ret) { + clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags); + return; + } + queue_work(mpath_wq, &mpath_head->partition_scan_work); + } +} +EXPORT_SYMBOL_GPL(mpath_device_set_live); + int mpath_head_init(struct mpath_head *mpath_head) { memset(mpath_head, 0, sizeof(*mpath_head)); @@ -43,6 +144,9 @@ int mpath_head_init(struct mpath_head *mpath_head) mutex_init(&mpath_head->lock); refcount_set(&mpath_head->refcount, 1); =20 + INIT_WORK(&mpath_head->partition_scan_work, + multipath_partition_scan_work); + return init_srcu_struct(&mpath_head->srcu); } EXPORT_SYMBOL_GPL(mpath_head_init); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F14E47B439; Tue, 1 Sep 2026 10:46:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259574; cv=fail; b=lJDFfPuRf47A/EbmUA7hzV5hmVqbCcQ6xEXj641Ee7EzbFqnx6ebthnaBocPCHrgqhm7VJgVKqniUE1ffAh6uqX0JUt9dO03JnE25I+RoMPJ1+m/IEjf7FwTogQR3G97qTVp+x3DpZB8FO81VfEFeLi/aj235+z3bTE1XwT/UNs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259574; c=relaxed/simple; bh=6iK7AsgaBWJeqs9ICeclYH26UuCoLOooL8REcMQoLto=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=a8MkUbrk9jyrPqqdEgRCce2JSivsVuMLp6YQfsm3oteTNUm21X46s81f2E+2Jl5Jl7zdZmzZOBKQlAOPAuklJ2D4X7lASl+JJxsdmpCG0G47gGyH/gs9l42xSJhqgCSWeEMvIiqfE4YKgKfYTYbySq0uGofyRn+wYRJ6eD9d/CE= 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=TBpuRdZS; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=n70QCG3i; 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="TBpuRdZS"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="n70QCG3i" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBpPQ2679686; Tue, 1 Sep 2026 10:45: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=DKSFKTdoWfDQmvLxvUJGgl+xWWAh7awUAfTfe7zHED4=; b= TBpuRdZSK/tqjzZTo9GweFwI4Mvl/xHQ5DEpDdVhpVLRhrMTzkjYKSPEl3ktSzFd dT5aO1l+bPhGa/5RdB/nHLJfxgNIc+cUEubibjOo57Zut+jU8vf2ciFZFoeAw41t dMuHlLBTcurHfN1zEoDhv6eFV6b2kA5bMA/v/dMgAX81PhjZYE6Gt5Mwsk2F5TAY fBSN9WnptowHaWkaqEzQ5oPtveKVuDB/T5o6Mk/Jnj4NCum4/rRyUuV4Rkkr79ID 2vsR+QClsuzVYQuRXZcRuYVIQzI0HNF1Wq1jMKKIvC+JXLcQZr7wZqbtPOnWRT4E qVTizzEZ8FhzeU8FFUc/yw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqa7mbxe-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:47 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjJtC036963; Tue, 1 Sep 2026 10:45:46 GMT Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11010002.outbound.protection.outlook.com [52.101.201.2]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve348d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:46 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W0+JDrNNDSAfOI4E9gIJnDoQvwkviFPgf8XJ7I1wEUVWSgd/1xSylnLkR5vi+unw1GUM7KGKtjEUibKyeEXXFuYPQT50zwoMXsiB+Hn1/Xo3eVXN7mXN5AaiJi2FNnkqxGQPXv1a8rGUa8fZm4aQ58fOM6cWxqaozCo7Wp/KgoBn0t10PGqS7PRQN91P4T9Zco7TYIllfdomTh7m8AeR3cvBDvbfm+uvlN0cjNEd6puEJKKYnLgbTmM/u8iZCVuRsb93T62H/Q+MZDEhVyiy/ntjk3xKg0g8n/f8nf6vat1JOWIiG7qFQ1bROv3EoaxShammTezNNpKsRx6FoD3uQg== 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=DKSFKTdoWfDQmvLxvUJGgl+xWWAh7awUAfTfe7zHED4=; b=MR4uxkDteLM+zi6+RTe2b51P0dFWOH3BycLtaojljvLVUGC0IklOdAr3pDmXA4BRBu8nvPwu5mNzT+sGVU9f6//33pSy+QSWeArysMCoArInH2FDYozLpFlpdgZtee3C+lNtRKkB9gTZqiHCmSEaET+ffC2OZwK8sA/Ss3Y56vSdPbWDPUxPX4CL0RyHMRWaMC+N0CI/jmVeohuxxOlb62s5mgevl1NpEavDhFJ0t5bxgxhXRMoE30ubnft2TegY3bpi1wj3V/kvbAciS+hSwVjZq8BVt2/cjslbppgAqI1nEvj9WuzUPUUJgHQQKJASgHsjCbVRfG65fLB9r1opcw== 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=DKSFKTdoWfDQmvLxvUJGgl+xWWAh7awUAfTfe7zHED4=; b=n70QCG3iCGhWZhy8mpf8UbNLMS1AHaqXKwS3Mz/HRqqM8/pE2LEJtjqFwKZXuLPjT50i0y/xIqBxugaSlvbJZpLjVkSYwgCfkkekXTeMZDN+MBKlA9gkdHOEqHbIGaerjjjyetYFuFf3Xta3fESeviZoCB0CqTxZzQbQ42N81Ag= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:42 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:42 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 03/27] libmultipath: Add path selection support Date: Tue, 1 Sep 2026 10:45:02 +0000 Message-ID: <20260901104526.3850621-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P221CA0041.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::25) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f8539d4-93c6-465a-c1c9-08df08162bcc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: iqYaTIs/G5A/pHZ2N7dl8Hv5gu+PZ3QMiTh93HS2KKag8JbA5ZdOEEjE+UCjkRONflp2+rZvlm+/oVhu2Ofga/9JU+Ndda/hkurDTFgxj+ELxpp0DdrhzQAp5af5+UWfyvIqs1s3a+0v7zoSJd48JcJNWgrU14PrP8+cQrHg/mKjKvpiVj1RjkjQqBe0sb/uLix6JDsU6dEfN5hpNF2fwADirQyOC9W94/Dala4jTRiX6HaZDIy42/AuZvqTkz7ov8HpBc1RYbMLdZHnxkWvx07MT09DFzE+EmYNp9G27V3RmzySxbjiYiqY3alvBgVOteAAfqMlM2I6hNKFxHk07aoyO9WJvcwT8qZocmzjZPHFE++KSpD769Duk9AYHES/xomBYJ2vUrDfTeWiANHsfo2egpy7pp0EC5qDWozrDUBsNUQr6coXXk+wVQDCCshqLayP5/WkOzvloiR6hSm8wWbSUO9U80Z6pkTAJVBjjXPQGg2K9+Ni3Sq2RP9e2q9B6882L9a8B+DNWzVI7pCWLmjPP0ugakuw1fZJ7PdKZcfejWf8NgcGpdNu8oixwFMj75Dx+VMUXBgMbk4TyagOmnW++fxAZvdFMw9m78Fm3ghwM343t1FPIfPyUt/V8qAJfUNed00gU8ZMbCovjHxK+CiRbjZ7LaeGOeoki34k7Ss= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9TM0Nnh+LrxfetB2Jj5aXw2qV03KRPPO0OyMqoThZq8KrTjYqvkABidf0x0q?= =?us-ascii?Q?ce8LioGgoPv4yBnKhKq9mOAnPpp3c2JxY9Ex3f/FUNZvSbzyIXQWr+iuXAui?= =?us-ascii?Q?K4n4tXdqUvrae3Pr8OpQU2/lPvFR5YaH32qiPI79LpMQsKaG+d40ChhOFgq5?= =?us-ascii?Q?3g7RVm4UsqBwlJXu9Gz4Wcpu7vzLPw+Gc39lHNOqQ6O9+n8aAUXq6Hpzm2Nv?= =?us-ascii?Q?rOJIW7y0uB4/f/c5KhGSx5Wwxl2l29bQyBFlzy8Ssfb96hg1tUlj3lZ5sguW?= =?us-ascii?Q?vBGK3eV7dTdn6zlmMTKhNsFpqPp9nvAdTB2sQhXvpIc00xUQrl+apvS1CekI?= =?us-ascii?Q?z4e5hh9M9mSAVS4H6rcRuy8XDYY2NcWzU7XBNST35U1GOoJ8WoJ38Y+2K8t6?= =?us-ascii?Q?3A25p2vy1kFrVKZ9CurtlsbD/jGfN2Ykiqtg9Y9m8UVr6bwmd1OhZo9ZPvTE?= =?us-ascii?Q?Jsf7htPw6DGIG5G3JSAiZ457yoERZMuZlz/fM9RcnYDRCHHKhXUXJidr65TJ?= =?us-ascii?Q?zA4itxij1uiVG/jBUfa30AXwun4fup5nce3oCtk7FWlUr0760dnVbSgOKUx9?= =?us-ascii?Q?ir2HNRZTbpCWGU68CtJHRPX4ZCzZHI7j4rJNUTSaLb7rzvZwniWjgNi1qGfS?= =?us-ascii?Q?3Fm+qlR/b4DHaKgzOtXUqdgQiVXhZNQOHd7kpygHX+0o3t9pzYMcu6t+RJCZ?= =?us-ascii?Q?lUkIuG6sMdiMDsqxTn8SaSeZXHmQELbS1skndvQyOwmzsJh5sJLHrdl0Xnop?= =?us-ascii?Q?pO13WBfX02CyPsJ+SD2ToH0Ow+4zJbmHLeHVv3F+8Ik2s6/OhiISFFH5GWHn?= =?us-ascii?Q?FjrssiqjiaJLDVMUHNynCiZrbJ54L033QNwhpuuSpL5UxxM/5MOnxRfuPd1f?= =?us-ascii?Q?BFRmuOpEGJGADON9rkolyUnhjdYiyzsedS6MW41ROagNGdZghROP4YK8yjGc?= =?us-ascii?Q?PhSHxRjNpSJyZAG6ftOqhc9Yl6TejrCQlzQ0HmCBWOOJRRLJ9X0sEck6ZcDi?= =?us-ascii?Q?JUPdK/BpPO4Db+cXmBCvOiwMXvOdTzVV0gHZP+5G7fnXqqY+/32AEXKh7nxp?= =?us-ascii?Q?wz3aU7IJH0+Op8mM6e1xrFW3oAF1+DaXYA83j396H6BigIMlT9aBJWCwupcT?= =?us-ascii?Q?qLNWyGUG2vjMSwAIg1j+IyllapwavgjBCWiqRAQoeXMhFuqfOvxZg+8KgVoD?= =?us-ascii?Q?s2VXKrZvr0xDMyNel5UnEDFKKXYHBLne8HpZqvP6rRxFwcgIAYnvdNXhqhC4?= =?us-ascii?Q?VMtV3XX9rK08XAHEdMJgCLNCP7GOahbZ2upXVsvOMx8wrmFMs8nrqxhIaYBf?= =?us-ascii?Q?nTDn0CafnIv6HWmjeX9lerMTwcsjD0lqxwNy5FJB5/Ndml/WVhWu6H6VyoDM?= =?us-ascii?Q?4wfISBPISv3UDfit6sHJfexy9T/PSyQN3cdkSLHeyeXCufzr7TZclCmPOlxh?= =?us-ascii?Q?bT29VtHIAUMk5vaJifveFNfEFdFCVKSmVlydSSPpyDa+uL7B3hCiZ2dxokVh?= =?us-ascii?Q?T+ApUkq0gYDDo1vejeTTMTlOToTDKh6l0UtArG2957oG1RuvO+wxsf7av+eg?= =?us-ascii?Q?FXVn9Xg3kLsO88fmkUheqjBHYMt/Vk+odQTJvXWp2X4/KUOzNqIo3dbxMy1r?= =?us-ascii?Q?MmSrVsV1W3PJGBik6VeVyCqorAXNeWeCPYZBTGKgaYQLt6xV8bEyRSxUteJv?= =?us-ascii?Q?VUOKyetVRfH9nSmc454y0+2iJNHX8bVbHmJLR+4fp9vwU17Zwrfnlpk4ZsY5?= =?us-ascii?Q?toIS0NGu5Q=3D=3D?= X-Exchange-RoutingPolicyChecked: nuMw9/bETXPlH13efh+k0aSW44cGnLxK1uEmh68JI8QvCJTQ84K5ltBmDB5T983gzKTddFEoBTDD8eLT9aG4QUA8/xdO4BrylFZk0BKqHLWxdSd54ZvWU2tzyvnmoSs6czbH+K8jVwRWACL7Vca0J5W/9RLb5QyvxntuzFUICREQf8hnixTategwOYQ5/yOJ20s1OPoAO1dkI2vBo2R5RFZB1vRoCT6ApdlyQYQ278gdwZBcg7rL+L2aZHRKRjDqXuxrsbTzTaNMA8UslLsh6IaqIVy4PVnRau4y1tm/znO2Xm+jj6cF5p61+EcenMqmC+SEHcMuCRMf7mAO1McaqQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bANdlXgoQ1Zj1sRyFoBI2yLULXwyM1sQk/bLoP9ibaA6gZG0QN6rmDA3icBu528Vp3QGGYdXfJytqzHHgR8Q81aWkKhhTUh+E6wISHg1z3Z5X99Og0baVegMOlDuHpY0GTSW/gkdxkhVjaosOYkeS0vGyPm5E4MChmU3at3veI5F0oa63du9mi1+R6+QU1ny2ZcciowdpoHBZ+dRqnLmE0LkTKhfXY3i0PZWth8jwNXWinjB3rng9wk3QkP7LCEHgtZVDhBpe/K9B/QlTgCaDq3LGPPtSEh61lvor8Q3MOPu8PbZ+bfUrhlLFcypdeEl9dKHxTOZojKfiHMEJvkNR2ZK4sCrl4wMTt8FHYNl4x4hc0ZJWWaGlCBodWsAwNoiEjuX8qBXkw2xbUlAPP2itXiVbv4cWVevIiFas1ZgWxk5sYTtXj4Q4oIm770EL7M3qM+lz1gKTPjn4YKbAxhiBj8sbvbrDOSn1AkDNgrS16H9mN/+dZxgZh3fbwnifq55VEyRP9gJDq8e1aSu2SxU8WJGqJcYspuW/MCTQdUvonb8r4QWekJZMj19fGng+0T5iI2xQ5VHKepLZAgfNVpFQWCH4etziFCH1bUQ/CVfHRc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f8539d4-93c6-465a-c1c9-08df08162bcc X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:42.8883 (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: 3SQ/INCTddttnEJyAg4um6A9XFDIftbJB9xgHsHkPYfBSVwrQycHLzO8iZwkZ3i6nhuuu8DfyRWTLwLiUbqAXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX5f0gaya682UG eT8vhPM0Kfu/cqw7Yk08LBIFoo14dhDkDp2jVAnlmkralAdTK1V/phkJjcZ+S8z6NiT/3najnES wAG8L+gObgN34jfm8OtYRgQeaUIeCsBoHf60rIrPywQEeImuCzkx X-Proofpoint-GUID: ogzVaZ6qsIfxrz7GTNlXADHbaxo9JGZx X-Authority-Analysis: v=2.4 cv=DPu/JSNb c=1 sm=1 tr=0 ts=6a96acdb b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=Lb5UtHSxAhypNmDEWQsA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-ORIG-GUID: ogzVaZ6qsIfxrz7GTNlXADHbaxo9JGZx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXw/XEZJUFsfE3 1ikwwDXDgTGm0eQmXyd6kEqCBoFii77qMtj0Ag9SmXNY8cRJvcdudzesx5CDdtx9Rg1LalM2BAJ VLa89CH8AhvcFP4w5ttoUdqMYHCmk11M2KeLmi5/AzWon/prKkRtU+JWWNKjuIztbfUe9/W6GsX k3m9B/9BQ7RBos7Qwo2WaFcEav3oRcZnrjI74GunVlviEYLv6+SJfBs54c4YD/1OrmKyJ1nMLLl V8x/4wJx0YaPT75709BYTRoV7PmophjN4OGTx+rXkZCO2QIn1umuKaCAD4uP2EpCOGePQvKel0Z Ol1/RHDnE7vyfkCb/cGLdPC4t4P8X4kptYiKA0nX9t+v7cw4TQb4HKqZZeC/dLramd7XNuzwmQZ L68vj3QTNcZKxaxW98qUXixj333WrSArtgQQLI2dcjcKvl+td0zeFOXm84Sz3bp8+/Sw00h4u7X KS0UvLLLpwW37onbhPQ== Content-Type: text/plain; charset="utf-8" From: John Garry Add code for path selection. NVMe ANA is abstracted into enum mpath_access_state. The motivation here is so that SCSI ALUA can be used. Callbacks .is_disabled and .is_optimized are added to get the path access state. Path selection modes round-robin, NUMA, and queue-depth are added, same as NVMe supports. NVMe has almost like-for-like equivalents here: - __mpath_find_path() -> __nvme_find_path() - mpath_find_path() -> nvme_find_path() and similar for all introduced callee functions. Functions mpath_set_iopolicy() and mpath_get_iopolicy() are added for setting default iopolicy. Signed-off-by: John Garry --- include/linux/multipath.h | 33 +++++ lib/multipath.c | 253 +++++++++++++++++++++++++++++++++++++- 2 files changed, 285 insertions(+), 1 deletion(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index ca6e02505be43..9bbab0aa8961a 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -7,13 +7,31 @@ =20 extern const struct block_device_operations mpath_ops; =20 +enum mpath_iopolicy_e { + MPATH_IOPOLICY_NUMA, + MPATH_IOPOLICY_RR, + MPATH_IOPOLICY_QD, +}; + +enum mpath_access_state { + MPATH_STATE_OPTIMIZED, + MPATH_STATE_NONOPTIMIZED, + MPATH_STATE_OTHER +}; + struct mpath_device { struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; + int numa_node; + atomic_t *nr_active; + enum mpath_access_state access_state; }; =20 struct mpath_head_template { + bool (*is_disabled)(struct mpath_device *); + bool (*is_optimized)(struct mpath_device *); + const struct attribute_group **device_groups; }; =20 #define MPATH_HEAD_DISK_LIVE 0 @@ -25,6 +43,7 @@ struct mpath_head { =20 refcount_t refcount; =20 + enum mpath_iopolicy_e *iopolicy; unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -44,6 +63,14 @@ static inline struct mpath_head *mpath_gendisk_to_head(s= truct gendisk *disk) return mpath_bd_device_to_head(disk_to_dev(disk)); } =20 +static inline enum mpath_iopolicy_e mpath_read_iopolicy( + struct mpath_head *mpath_head) +{ + return READ_ONCE(*mpath_head->iopolicy); +} +void mpath_synchronize(struct mpath_head *mpath_head); +int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy); +int mpath_get_iopolicy(char *buf, int iopolicy); int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); @@ -63,4 +90,10 @@ static inline bool is_mpath_disk(struct gendisk *disk) return false; #endif } + +static inline bool mpath_qd_iopolicy(enum mpath_iopolicy_e *iopolicy) +{ + return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; +} + #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index 1cf20b0f62d07..26714116023a3 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -7,8 +7,245 @@ #include #include =20 +static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head); + static struct workqueue_struct *mpath_wq; =20 +static const char * const mpath_iopolicy_names[] =3D { + [MPATH_IOPOLICY_NUMA] =3D "numa", + [MPATH_IOPOLICY_RR] =3D "round-robin", + [MPATH_IOPOLICY_QD] =3D "queue-depth", +}; + +static int mpath_iopolicy_parse(const char *str) +{ + return __sysfs_match_string(mpath_iopolicy_names, + ARRAY_SIZE(mpath_iopolicy_names), str); +} + +int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy) +{ + int policy; + + if (!str) + return -EINVAL; + policy =3D mpath_iopolicy_parse(str); + if (policy < 0) + return policy; + WRITE_ONCE(*iopolicy, policy); + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_set_iopolicy); + +int mpath_get_iopolicy(char *buf, int iopolicy) +{ + return sprintf(buf, "%s\n", mpath_iopolicy_names[iopolicy]); +} +EXPORT_SYMBOL_GPL(mpath_get_iopolicy); + + +void mpath_synchronize(struct mpath_head *mpath_head) +{ + synchronize_srcu(&mpath_head->srcu); +} +EXPORT_SYMBOL_GPL(mpath_synchronize); + +static bool mpath_path_is_disabled(struct mpath_head *mpath_head, + struct mpath_device *mpath_device) +{ + return mpath_head->mpdt->is_disabled(mpath_device); +} + +static struct mpath_device *__mpath_find_path(struct mpath_head *mpath_hea= d, + int node) +{ + int found_distance =3D INT_MAX, fallback_distance =3D INT_MAX, distance; + struct mpath_device *found =3D NULL, *fallback =3D NULL, *mpath_device; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + + if (mpath_device->numa_node !=3D NUMA_NO_NODE && + (mpath_read_iopolicy(mpath_head) =3D=3D + MPATH_IOPOLICY_NUMA)) + distance =3D node_distance(node, + mpath_device->numa_node); + else + distance =3D LOCAL_DISTANCE; + + switch(mpath_device->access_state) { + case MPATH_STATE_OPTIMIZED: + if (distance < found_distance) { + found_distance =3D distance; + found =3D mpath_device; + } + break; + case MPATH_STATE_NONOPTIMIZED: + if (distance < fallback_distance) { + fallback_distance =3D distance; + fallback =3D mpath_device; + } + break; + default: + break; + } + } + + if (!found) + found =3D fallback; + + if (found) + rcu_assign_pointer(mpath_head->current_path[node], found); + + return found; +} + +static struct mpath_device *mpath_next_dev(struct mpath_head *mpath_head, + struct mpath_device *mpath_dev) +{ + mpath_dev =3D list_next_or_null_rcu(&mpath_head->dev_list, + &mpath_dev->siblings, struct mpath_device, + siblings); + + if (mpath_dev) + return mpath_dev; + return list_first_or_null_rcu(&mpath_head->dev_list, + struct mpath_device, siblings); +} + +static struct mpath_device *mpath_round_robin_path( + struct mpath_head *mpath_head) +{ + struct mpath_device *mpath_device, *found =3D NULL; + int node =3D numa_node_id(); + enum mpath_access_state access_state_old; + struct mpath_device *old =3D + srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + + if (unlikely(!old)) + return __mpath_find_path(mpath_head, node); + + if (list_is_singular(&mpath_head->dev_list)) { + if (mpath_path_is_disabled(mpath_head, old)) + return NULL; + return old; + } + + for (mpath_device =3D mpath_next_dev(mpath_head, old); + mpath_device && mpath_device !=3D old; + mpath_device =3D mpath_next_dev(mpath_head, mpath_device)) { + + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + if (mpath_device->access_state =3D=3D MPATH_STATE_OPTIMIZED) { + found =3D mpath_device; + goto out; + } + if (mpath_device->access_state =3D=3D MPATH_STATE_NONOPTIMIZED) + found =3D mpath_device; + } + + /* + * The loop above skips the current path for round-robin semantics. + * Fall back to the current path if either: + * - no other optimized path found and current is optimized, + * - no other usable path found and current is usable. + */ + access_state_old =3D old->access_state; + if (!mpath_path_is_disabled(mpath_head, old) && + (access_state_old =3D=3D MPATH_STATE_OPTIMIZED || + (!found && access_state_old =3D=3D MPATH_STATE_NONOPTIMIZED))) + return old; + + if (!found) + return NULL; +out: + rcu_assign_pointer(mpath_head->current_path[node], found); + + return found; +} + +static struct mpath_device *mpath_queue_depth_path( + struct mpath_head *mpath_head) +{ + struct mpath_device *best_opt =3D NULL, *mpath_device; + struct mpath_device *best_nonopt =3D NULL; + unsigned int min_depth_opt =3D UINT_MAX, min_depth_nonopt =3D UINT_MAX; + unsigned int depth; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + + if (mpath_path_is_disabled(mpath_head, mpath_device)) + continue; + + depth =3D atomic_read(mpath_device->nr_active); + + switch (mpath_device->access_state) { + case MPATH_STATE_OPTIMIZED: + if (depth < min_depth_opt) { + min_depth_opt =3D depth; + best_opt =3D mpath_device; + } + break; + case MPATH_STATE_NONOPTIMIZED: + if (depth < min_depth_nonopt) { + min_depth_nonopt =3D depth; + best_nonopt =3D mpath_device; + } + break; + default: + break; + } + + if (min_depth_opt =3D=3D 0) + return best_opt; + } + + return best_opt ? best_opt : best_nonopt; +} + +static inline bool mpath_path_is_optimized(struct mpath_head *mpath_head, + struct mpath_device *mpath_device) +{ + return mpath_head->mpdt->is_optimized(mpath_device); +} + +static struct mpath_device *mpath_numa_path(struct mpath_head *mpath_head) +{ + int node =3D numa_node_id(); + struct mpath_device *mpath_device; + + mpath_device =3D srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + if (unlikely(!mpath_device)) + return __mpath_find_path(mpath_head, node); + if (unlikely(mpath_path_is_disabled(mpath_head, mpath_device))) + return __mpath_find_path(mpath_head, node); + if (unlikely(!mpath_path_is_optimized(mpath_head, mpath_device))) + return __mpath_find_path(mpath_head, node); + return mpath_device; +} + +__maybe_unused +static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head) +{ + enum mpath_iopolicy_e iopolicy =3D mpath_read_iopolicy(mpath_head); + + switch (iopolicy) { + case MPATH_IOPOLICY_QD: + return mpath_queue_depth_path(mpath_head); + case MPATH_IOPOLICY_RR: + return mpath_round_robin_path(mpath_head); + default: + return mpath_numa_path(mpath_head); + } +} + int mpath_get_head(struct mpath_head *mpath_head) { if (!refcount_inc_not_zero(&mpath_head->refcount)) @@ -76,6 +313,7 @@ void mpath_remove_disk(struct mpath_head *mpath_head) if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { struct gendisk *disk =3D mpath_head->disk; =20 + mpath_synchronize(mpath_head); del_gendisk(disk); } } @@ -99,7 +337,7 @@ int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct gendisk *disk; =20 if (!mpath_head->disk_groups || !mpath_head->parent || - mpath_head->disk) + !mpath_head->iopolicy || mpath_head->disk) return -EINVAL; =20 disk =3D blk_alloc_disk(lim, numa_node); @@ -134,6 +372,19 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } queue_work(mpath_wq, &mpath_head->partition_scan_work); } + + mutex_lock(&mpath_head->lock); + if (mpath_path_is_optimized(mpath_head, mpath_device)) { + int node, srcu_idx; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + for_each_online_node(node) + __mpath_find_path(mpath_head, node); + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + } + mutex_unlock(&mpath_head->lock); + + mpath_synchronize(mpath_head); } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCE33396B96; Tue, 1 Sep 2026 10:46:10 +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=1788259572; cv=fail; b=U7b43NvAbfhM0wif2+WUYjWo84zd6KTYHIIODd4KlEQl5iiVvCZIy9taPw1tuoMqysBMd1IbzI5UtKRz12XD9Um96Fo/W+dzfMWfQOIfI3CY9CpuT25c4aHkifh+wu2NVNO/k7nFPqoF066+/iS4FyOXwZVYnqFYGOHm3d/oDdI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259572; c=relaxed/simple; bh=A54aNMOs+oXOOE+acUkCEe+SowsCg0jxufQuFaUahBY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FBl1ag9JFqj6HYDcuea5ldZ2DwmBkH9iVpPGUTZ0YsvM5s0l/dCBBzjFuNum1FY8JiPYfDKm5KQ4zVgyIRTr6QTPlYfT45/V4e5cRjKthMvzlFrdAiZDnIG7Lobht1FzMMfLOS4ACBS41Rv3kHaKKG9emHRqI9UM+tPeHBFCj4Q= 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=GaI/hM0f; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=N9zL28AW; 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="GaI/hM0f"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="N9zL28AW" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBwvY2296648; Tue, 1 Sep 2026 10:45: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=qnoFbCS2l8YgfLivgtz/nYusuYA/aAxy9zsvPCESYb8=; b= GaI/hM0f6vHRaK9T1FUT3pSfqTlavdo8ba5Q98nQMDDcOovy1CizVtEPxAcAjO0s 0fH8cJe2yNgq0n6Q7geLL6bIUz4YQ61pZvWBRC1ret0igudbl3rUv6bnTc9q334K dUJQarhPbhEVwvqxoGURy6XLZtt8/wxF7pGWKVWuSZEe5HVQMaGAepEJdgY43AKh 2n7xo68mkKDWKAv4953rNjk54FHjRcJ0bgGLZNgtBMC7ztqxnaXrU3FkZKi6NMDC pOinGtZwCogleGkl3N/7Ff7y40Ybbf7V2HXt9l+S0bSAirk7NM55MtJ5whENTLZQ 4lRCbJr/KZ4f/wKc/IWXxA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvd9y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:47 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjJtD036963; Tue, 1 Sep 2026 10:45:47 GMT Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11010002.outbound.protection.outlook.com [52.101.201.2]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve348d-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:47 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CqeHWAyQZBTVOHQz5QVxutT2SyPGvqfQcPWZlgVa6hsmB3XQLOCDIxuO5CoZIjl/0qAw19ssildkmGnqQVUkn9cZ6KLGysONwH+rpV0aMX+YXSDtM98/Z47ghbBFotnLZDzXouuKy5RPLw38X6ppu2D4uROEcFe/uhdOFUnafa3vbaOWuzeoeaBqZ0VlN9xJ4g1enluMo9EPYe96QPqgRdowr9WsfJ/8qyl4LZpywcykEOMG6jhJZlXKSeaUFVAbDVu7HHe0W0CDJVO9rvRkAS/tQ5uOQ+5ya8VYm7p1AsKl9RJuw086T7anB11J3vvrdNJkItmJTfMZXbeIykI+pg== 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=qnoFbCS2l8YgfLivgtz/nYusuYA/aAxy9zsvPCESYb8=; b=satTRJKFRsYEXdX12UiCoPZo5wUxM91IZvpJ6mOlJzTcn/S2kp+e78O1O9JkszfHDhvpaueX+KlzR8j2P/87tvKLAtM76Qx0EA48/WQ/uyHqNarQAqNOKHLnoKXLzPs70vhZqIjk4MpP1yu4PvhxJfzGXdP01UUlFzyXEnAH05CI9DdtcBaPK2RznFA2TtTcsbNjaAr0O8TZRRWMzVT78atkdUjbFDCcU9DzkrnH0Zk9UMUUFwjHKZKqaOTUaq4q8aLUBZe0TBUQc42qZUAeAsybkhxXETOTKl4upJsLpumWps9yep7GQER3GGAAb3VDWTnGkTjCTT9H6bQrYYSmJQ== 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=qnoFbCS2l8YgfLivgtz/nYusuYA/aAxy9zsvPCESYb8=; b=N9zL28AWx051o0ib/8AmhY8wghEpibJqDcs8qh14DHKuwe6HS0AF5/lfQFIG3xXc5qMdGbqZ0uX7VFGKm/jj74sLEJ42OBd+QwhpruRCTY4UCd+TpZilUC1oTp/mgbyBjJaigBBQsG6kgjdpozL98LrcqwBcyg3XvcQfjKBQZYU= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:44 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:44 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 04/27] libmultipath: Add bio handling Date: Tue, 1 Sep 2026 10:45:03 +0000 Message-ID: <20260901104526.3850621-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR20CA0014.namprd20.prod.outlook.com (2603:10b6:610:58::24) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 0585c0b7-05af-4c91-7004-08df08162cc5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: pzNtyAIPHPHcQfKhITT53G3LQPIuFbm5iiWLJBe76P3U7Fjigl66jnH8voBdEEJ18TBxq0Fc77Xw+rlPdVqP+JArhv6ZwReF16UsDJ8Duddgu9EBJvfEDrDCs6yt7TmEDA1Hr3BIslZHBI6uZ7ABWNKPFtaLOyuZc1iKk5Dy53hemzWFcgcunelvEMDDlrxlXgap36eaH5T1YG4c10r0Jk0ZTVA4cZHfP0A7CupusBKVEjhrtvzeJ6V1RCXNePPn9BBTSOoER+UJIPEdlUVmmvv10rHzjYToEuO+hioNxQczCXy3jsGDCBFQfasjfIBecMuxzjYwRaaIst5ThJUXRVkQa9XQ3WpLzgxCJozrieXXgooD8IW40mOooZHHSz4Q49Mna1bK9KeeK2dUVCMUMSquYJYwoNNKO69CXA+R6VOHSA6kgoIxVbr1RVuMi7QwfE6Rqn0AkYDb1wJw21B5dTPtJfgtUGCyxdbrtSKHm6gYOdQK4T0rVXL8U8m2wBvLEsJNOlXP0E8oSQ49zMk8jF/U0Bbnn9nZ/FibD16IOQ2mON7S0q8O94z/rifeJrE2T/Ad/eNs/LZomDL0kBbHcpmahAE1tTXD+lIOiAaVU/pijzW4ZFPjEs56NHFJIW6rBbGM6BgOM/hdtA6xznVwuOYQI6+Sqx/cnFprp1U3das= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?88RrywEJqWJXf7QcZoM4770NdKnkwN43B1WeIqbwuXl/sVo8IWh6T93F8Da/?= =?us-ascii?Q?o/Ze+wlBhQij+YYW37T545wXP6DDgE4RABN5OytdPT7uK9Yl4RQ//jeUtmud?= =?us-ascii?Q?tvPPUB+f0864N+auH6Xv/Yyh3H0QTEv4ZKUSQfHPXWDCu1s9NWIF+mf7RTjK?= =?us-ascii?Q?Cw4YP7f41fnbKqeMRx6mzrgTtBAoNMKWDKjA2UqKH2G5WXoYOpxSzu3iGSaV?= =?us-ascii?Q?M7X/noSrVQRXdDhEwU9xQpyrYrZZG+dRqSyeXWtMitGFCM9YMf9L/m3faYT8?= =?us-ascii?Q?hEG22EuoX5EzLlTH9rUvp2vQuhw0CrJkhCYAzhuUtK/mbWnPsC2lIBGzzfqo?= =?us-ascii?Q?Pbtw477Ntnwx+7/U8dYu6+D8OAzQfgtVZTFs9Lubpveow9xY/TyZFcYvTxFW?= =?us-ascii?Q?e9iVmZwhJCBlPWO0Ev77oAs81mPoESYzTP4QFfZx+UzQ0E9x3+1PbJbe8My8?= =?us-ascii?Q?rarlEwosoZDbV2tPkaGW9qtDsSUsPoZTWCTgqJ17lL3q5flkeggXBL+sO5u4?= =?us-ascii?Q?ClLhIHK2/+iYHVGzMv8PmaskFMBCaWlfoDmz0+bZUrki6bYTklguJWLVR6DE?= =?us-ascii?Q?3isgoibE47sW8yBGr0YHWSwr1W/RfZJVwFspwI9/FP9zJyY3ChhtF6aRujRr?= =?us-ascii?Q?gSsT17w3x+fniqbGNI+JIwvPy9zCctWzuw2f50a4wDgQ4HIuDJV+3kiQHpkw?= =?us-ascii?Q?j0Ve3IaPWDLLqmyNis6TFSYjsFSe4dunhkWGO97LmDN/WPAspl4UIVS3RTWZ?= =?us-ascii?Q?/qIRCYeti1i4Ge4gLmB45CbYBNDg5qeI1ke4g/xlFJApI1DnIsOb8ox7Fmoa?= =?us-ascii?Q?RSJsJitTVDwQD6dpuX0mmoHZJlsfZm9W/K1/7zym3n1LhtpYCRaUzeFwUROo?= =?us-ascii?Q?sHclxG3mVbwGfPtHBPfWY9GXw279TJ36ZI++3SpYip0JqhRd0XRvmQlUwNSG?= =?us-ascii?Q?N7B2ff58p8u6KhFgcv7s+nA+o/mg15UB1sKaNfgD4pvxvsOgN2xMwHD57Fjw?= =?us-ascii?Q?Y4nrZ0a/Zsk5s4QpLZ3v/tLVvdL3Vn6V0Mb7sMpGUc5kzaqaBKexvoUb3PV3?= =?us-ascii?Q?0/K2h2tICXTa4bz+Y+VjIqfYX3LxOp6/2NrbEK2grEhcniQXwGI+EEgvn1CF?= =?us-ascii?Q?S2D9PFJSpGI+z8XFQnHjG57/DK05Q5iZ/95b8ga4SDRfHaOqgnZrj1S+LRC8?= =?us-ascii?Q?iLz2aTXdM4vM4IvXjFegBsUlZ86pT+04wJONKBlVHTIYm0sPlVssIjpH0jRD?= =?us-ascii?Q?IttwsAlEggz5t21gMxm2Tlf3JacGEsMQFJ3syLb9ldthE1OwY4m9aTOP7ObN?= =?us-ascii?Q?fduGcbgqxn9Wf/vp5qgAU7epSl6/QHyAZp27V+77ANQhR+pGikoxB/UaNN0c?= =?us-ascii?Q?CtF6Q9z41+AoRPuXCxvdmD+g7d4YOBYKJERBmBpB9XH749WyBZc6opD5bvpt?= =?us-ascii?Q?o3bE4ttgYemHhBKxMd7R2zsJlaZV9iSSz9nFnMobnRUJ4es6eF10gG7awySQ?= =?us-ascii?Q?iVnDAl3GbBaykPRWe4qjKw3Ibs3OkHXq/EqHwRyZr0lPrv56Sa3P9nvMDcdk?= =?us-ascii?Q?iQtbsrJb6K1srxEGpMhD1E6MXSl3z//vC7GCvEee8sfdQbVWnGvofUN/p6sE?= =?us-ascii?Q?h/br/jyT/xt4lbN62xRBvHH9uM/c9Nzh3Debuszolw33YNFdwrpcfeEzmk2+?= =?us-ascii?Q?KOkqy0imoRa9mrJ0PUU+ZMQSF1Q8KXhJ8lTL9l1/v8WcA2+GjhzcFG46ddPk?= =?us-ascii?Q?cUwP70akzg=3D=3D?= X-Exchange-RoutingPolicyChecked: QVsYvqNtKEp3ZIni6GOzaeGXU+rMw6Qk3w89msyxNNANpLhqgLtsRi7fxlCFFa7AXnt3eXE9g9FzG74CMKG0heodKQ337EqbTcCZ8GhlhNCeqBUe4PSCZjqZnN7QD+6oVDQdR8DdB761awALEf1rpHBeCPDMcqBqlSvJyDZG/N3uK1e0V4dwKkDRar8zr09cWPF77C+kdvgh4yaAMBfRoxZUMVBtq0ZqHCwzwHrYe2D84L5Qx6KKCPqKnaSlKXL5cFf/idmJxqln7S3UX41LUm+gxRB849/rPQ1jVrCzl6mxNjKi/QGMl6UTBC/psycs5QDltMp2ERC+qSI/HHx0eQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ilL4sVDiHO5//BnPjt5ZjesN4UuepMg2m666IPTtBCVj1YknBhJTZAJ3rmYBWXX90WdGOmOZJDdVbn9bBtAgdU/i2ePAapTIGoN28OwTiCjnrEpRlahikwpF3KacB8eCxb2pMdmimjx0W0a8yVjxbgLRbIIvm1pHWM2E9dqTJxvjQCwL8oiMz1uVJQ9UrQeSCv7vUaBVPPV/Zf0VlGTjqvnEHFmVHg1SdH5ZOnbkOOE5zElZtgMbTXyVquwmh1Oqx5ZbLpATRHnoL1bAuVyuMa4Kxpv1I2Zzb3aARKWjJa9nXB4uyV4wU1YNARJtAezphW1sTCHYwSG1xWsFRQvVC8dMG9O6Pt51x88aXD5iLNmi3IXXKXpzjB/15tTXcv5sFJUJ7UKPRbo4LqAkZ6ElwRjtnI73oW2VoN8y0+mP8LVsojA5P01Sv6y9cpgfcMQ98CZLBZsz0nvQ77MsVgFYlHetZw7uxieEm2kdu52eqdYs1aXbevVK2DI40uCWKXylOD7ytHGxFg5u/F+eHrzENP5EGUlBMhkBRDRcbbAwXUyKuHSUdp+1rgiBexcmKtM2S7Jv4ozIiD/q6JrgBLFHPJ4RKZh3FZOM2x16C20vdE8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0585c0b7-05af-4c91-7004-08df08162cc5 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:44.4645 (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: hQIv6AUXlHytVsK0x5IZIso4jWw4YUixbIeT/1XDHmQp0+xoZKXQFjs53Ryp44zfTKaLFK9LOgPf2gISz5ijtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-ORIG-GUID: RISG4w9HvGrb1qxQLjQ84rBS4CnTTXZB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX8QZzmOfDt9Y2 TwPDsOm9y7QkypbjqBX1XIPdqxuhxJJuCe5opajC7ej7zK5rxfUMj31qu2y8Zw26ETYoRmy2/Ie 67xSlGPa5JLsJRZAx29XFtHbZgbCZy6mBuGFldYHCGNlrSwtzrPYBfbM4lAGYMVIHLXQKrdKd+0 x+e/3/OZ78lRkwNcmzOdCeR2ksIbAzrMmfsSQYttc2B/zMm0V3WzUtijTxvXdcuC3CxrE4VPkhU jj4jNs4tsqBW0jAU6YYQR9sOmm7gDIFzOCvRFYZ+l1ouf8AaatXDXsj8vUENQBjcJkE+E/mhM0D OAIogFlWvpq7a1zaZ0mEOv+kp7FJs2L8p+8rvlZ6T3tcXe7RgxUdP8T8+pzHVTVbBNu2hl+emny SCYDqH4ikasyeELMrH9X8v8cAJjdshpGV2t9+IFdvdd+f5gOY2jJTsdQnOgDkfQ5zjNGpWWhGrh PWheUypxz23AT84nUkg== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96acdb b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=0Q2gd2vOsnR98QmcnEwA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-GUID: RISG4w9HvGrb1qxQLjQ84rBS4CnTTXZB X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXzKoIfE8jpi+/ 4xnZ+Ddvt+PzlNSEt3hJ+UQFYk1sZt8L8SfBjUezcFLiCAbD38g9LFndV1JPOLUMC98KlLlbHVN l285sN0XxUnJ2BOzv1usdyv2FknvAjFJC7GLLu++OyUNrXYZG5OC Content-Type: text/plain; charset="utf-8" From: John Garry Add support to submit a bio per-path. In addition, for failover, add support to requeue a failed bio. NVMe has almost like-for-like equivalents here: - nvme_available_path() -> mpath_available_path() - nvme_requeue_work() -> mpath_requeue_work() - nvme_ns_head_submit_bio() -> mpath_bdev_submit_bio() For failover, a driver may want to re-submit a bio, so add support to clone a bio prior to submission. A bio which is submitted to a per-path device has flag REQ_MPATH set, same as what is done for NVMe with REQ_NVME_MPATH. Signed-off-by: John Garry --- include/linux/multipath.h | 22 ++++++++ lib/multipath.c | 108 +++++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 9bbab0aa8961a..374f0531f7e07 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -3,6 +3,7 @@ #define _LIBMULTIPATH_H =20 #include +#include #include =20 extern const struct block_device_operations mpath_ops; @@ -29,8 +30,10 @@ struct mpath_device { }; =20 struct mpath_head_template { + bool (*available_path)(struct mpath_device *); bool (*is_disabled)(struct mpath_device *); bool (*is_optimized)(struct mpath_device *); + struct bio *(*clone_bio)(struct bio *); const struct attribute_group **device_groups; }; =20 @@ -44,6 +47,14 @@ struct mpath_head { refcount_t refcount; =20 enum mpath_iopolicy_e *iopolicy; + + struct bio_list requeue_list; /* list for requeing bio */ + spinlock_t requeue_lock; + struct work_struct requeue_work; /* work struct for requeue */ + + atomic_long_t requeue_no_usable_path_cnt; + atomic_long_t fail_no_avail_path_cnt; + unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -53,6 +64,13 @@ struct mpath_head { struct mpath_device __rcu *current_path[MAX_NUMNODES]; }; =20 +#define REQ_MPATH REQ_DRV + +static inline bool is_mpath_request(struct request *req) +{ + return req->cmd_flags & REQ_MPATH; +} + static inline struct mpath_head *mpath_bd_device_to_head(struct device *de= v) { return dev_get_drvdata(dev); @@ -96,4 +114,8 @@ static inline bool mpath_qd_iopolicy(enum mpath_iopolicy= _e *iopolicy) return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; } =20 +static inline void mpath_schedule_requeue_work(struct mpath_head *mpath_he= ad) +{ + kblockd_schedule_work(&mpath_head->requeue_work); +} #endif // _LIBMULTIPATH_H diff --git a/lib/multipath.c b/lib/multipath.c index 26714116023a3..93b82eea7d38b 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -6,6 +6,7 @@ #include #include #include +#include =20 static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head); =20 @@ -44,7 +45,6 @@ int mpath_get_iopolicy(char *buf, int iopolicy) } EXPORT_SYMBOL_GPL(mpath_get_iopolicy); =20 - void mpath_synchronize(struct mpath_head *mpath_head) { synchronize_srcu(&mpath_head->srcu); @@ -231,7 +231,6 @@ static struct mpath_device *mpath_numa_path(struct mpat= h_head *mpath_head) return mpath_device; } =20 -__maybe_unused static struct mpath_device *mpath_find_path(struct mpath_head *mpath_head) { enum mpath_iopolicy_e iopolicy =3D mpath_read_iopolicy(mpath_head); @@ -246,6 +245,81 @@ static struct mpath_device *mpath_find_path(struct mpa= th_head *mpath_head) } } =20 +static bool mpath_available_path(struct mpath_head *mpath_head) +{ + struct mpath_device *mpath_device; + + if (!test_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) + return false; + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (mpath_head->mpdt->available_path(mpath_device)) + return true; + } + + return false; +} + +static void mpath_bdev_submit_bio(struct bio *bio) +{ + struct mpath_head *mpath_head =3D bio->bi_bdev->bd_disk->private_data; + struct device *dev =3D mpath_head->parent; + struct mpath_device *mpath_device; + int srcu_idx; + + /* + * The mpath_device might be going away and the bio might be moved to a + * different queue in failover, so we need to use the bio_split + * pool from the original queue to allocate the bvecs from. + */ + bio =3D bio_split_to_limits(bio); + if (!bio) + return; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + + if (likely(mpath_device)) { + if (mpath_head->mpdt->clone_bio) { + struct bio *orig =3D bio; + + bio =3D mpath_head->mpdt->clone_bio(bio); + if (!bio) { + bio_io_error(orig); + goto out; + } + } + + bio_set_dev(bio, mpath_device->disk->part0); + /* + * Use BIO_REMAPPED to skip bio_check_eod() when this bio + * enters submit_bio_noacct() for the per-path device. The EOD + * check already passed on the multipath head. + */ + bio_set_flag(bio, BIO_REMAPPED); + bio->bi_opf |=3D REQ_MPATH; + trace_block_bio_remap(bio, disk_devt(mpath_head->disk), + bio->bi_iter.bi_sector); + submit_bio_noacct(bio); + } else if (mpath_available_path(mpath_head)) { + dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n"); + + spin_lock_irq(&mpath_head->requeue_lock); + bio_list_add(&mpath_head->requeue_list, bio); + spin_unlock_irq(&mpath_head->requeue_lock); + atomic_long_inc(&mpath_head->requeue_no_usable_path_cnt); + } else { + dev_warn_ratelimited(dev, "no available path - failing I/O\n"); + + bio_io_error(bio); + atomic_long_inc(&mpath_head->fail_no_avail_path_cnt); + } + +out: + srcu_read_unlock(&mpath_head->srcu, srcu_idx); +} + int mpath_get_head(struct mpath_head *mpath_head) { if (!refcount_inc_not_zero(&mpath_head->refcount)) @@ -291,6 +365,7 @@ const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, .release =3D mpath_bdev_release, + .submit_bio =3D mpath_bdev_submit_bio, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 @@ -308,12 +383,35 @@ static void multipath_partition_scan_work(struct work= _struct *work) mutex_unlock(&mpath_head->disk->open_mutex); } =20 +static void mpath_requeue_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D + container_of(work, struct mpath_head, requeue_work); + struct bio *bio, *next; + + spin_lock_irq(&mpath_head->requeue_lock); + next =3D bio_list_get(&mpath_head->requeue_list); + spin_unlock_irq(&mpath_head->requeue_lock); + + while ((bio =3D next) !=3D NULL) { + next =3D bio->bi_next; + bio->bi_next =3D NULL; + submit_bio_noacct(bio); + } +} + void mpath_remove_disk(struct mpath_head *mpath_head) { if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { struct gendisk *disk =3D mpath_head->disk; =20 + /* + * requeue I/O after MPATH_HEAD_DISK_LIVE has been cleared + * to allow multipath to fail all I/O. + */ mpath_synchronize(mpath_head); + mpath_schedule_requeue_work(mpath_head); + del_gendisk(disk); } } @@ -325,6 +423,8 @@ void mpath_put_disk(struct mpath_head *mpath_head) return; =20 /* make sure all pending bios are cleaned up */ + kblockd_schedule_work(&mpath_head->requeue_work); + flush_work(&mpath_head->requeue_work); flush_work(&mpath_head->partition_scan_work); put_disk(mpath_head->disk); mpath_head->disk =3D NULL; @@ -385,6 +485,7 @@ void mpath_device_set_live(struct mpath_device *mpath_d= evice) mutex_unlock(&mpath_head->lock); =20 mpath_synchronize(mpath_head); + mpath_schedule_requeue_work(mpath_head); } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 @@ -397,6 +498,9 @@ int mpath_head_init(struct mpath_head *mpath_head) =20 INIT_WORK(&mpath_head->partition_scan_work, multipath_partition_scan_work); + INIT_WORK(&mpath_head->requeue_work, mpath_requeue_work); + spin_lock_init(&mpath_head->requeue_lock); + bio_list_init(&mpath_head->requeue_list); =20 return init_srcu_struct(&mpath_head->srcu); } --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA87D47D95D; Tue, 1 Sep 2026 10:46:17 +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=1788259582; cv=fail; b=JGvjqWDspxZvtslu407fCUvzVuyQ9KBQrlL8LB/5kjxAKtCaEUacyt9aBgnzQ4F+tMO4uk+tJxURg4vTOYw7HAIYyuezUHHHUFZ/0zBBRdMrzaFJCTqbpkjYUOecss0z75uZ88lB5bThu4L2wa32YxtuviqBdlDovfkJx2/pnmY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259582; c=relaxed/simple; bh=0JZ14Q0fGwDCnjRTbG+h01uOwkGWQIXuqag805PXpKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HlJBIA+u/ih25B9EanOXuStdF9NqQx1vuJW1tigVVRbj0WxeXo8Lz2nU7WlIzJVR0/uph7UQhYe1E5C7Db6uVc5Cm3qKtuG88PhlLmKuF/o1OTGP0OLRRgFMjc9iSS3ru92CYZQ/BkqMspSaAiZk5hE03MQ9Z342xRfPVPsZkTU= 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=MAQwcGxQ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=q7Y1w10h; 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="MAQwcGxQ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="q7Y1w10h" 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 67VLBpDq2846754; Tue, 1 Sep 2026 10:45:58 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=ZMovxh+wf8jZqfOPnrTLdy+1cRRjhk6c4HUjpo8erTo=; b= MAQwcGxQ9c57kSDoeIKh/miM5U1XT7GiDcCqGJGOFLWVCx0Q97nZ3RDsI/mAJO7z PGDT3a37RLZQTIf1g8P+eX6L3uulLIHOxpIhythZ/sHaTURG+Lg5X3uIbba2KHj9 6k6XiFLBoWOmVtg178WjykpUYVKmTih1hFBFI1FZ8q4CzGOldg7VUtycV5E/TtIp yyO97hPFOQLm7U5tobSa+uzeqO1LmID93zPKb2cjYrzXHUfoKwFGCsbMy5pAniWe pODVi0RhSnZYd8/5tKwjKxSaZsaaWIPxjmp25sUGUv6NlmRPixPBQybjN4l4+jFY XnnHtly8ljVqlibIoU3saA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbavegv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:57 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjY9u036488; Tue, 1 Sep 2026 10:45:55 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:55 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O8wHbzR4PCQs6xWajKn3QHrZA4wWfyeSeouqStOeGpZrxg/lBsFd2m3ceF9GaFr/lznP1nh6POAz9XV6ou8XjK21pX7jmR8yTG4dhB5Jl2hmybQz/VKBpZ09Rk4RGcfzc/pkWCBJIDFgvHAzU06bTBR6DB6/rnkWAYuFAliVpNBupZXxRVWn7cSJ5SSv4osjRNSs/XmkXj/YJFUjwYWljvIoOXvJL0s4HymHDls4jT0aWJZH76WHXXwWoJG/cqVpe936ZWwRWaW5ymTwz6OcX+kQWm0dXbZu/AQQmMa9QJC4MWz++9z5XrHIQkvgZVxBtbiSzkVoysuGF3AtqIc0rQ== 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=ZMovxh+wf8jZqfOPnrTLdy+1cRRjhk6c4HUjpo8erTo=; b=TXUeBKPvy+8VWit2i0MAMnQ8rU5kuF19rgW8v4+eVJLdowvassCh3ZYdD8oE4yEOoErGq/8W8tHTIk7YkuK/pl8ZQynR+Xn8Rt5cSUnJ95JYlrZSuEF131S6W/FQYxlDEFN23wH6lBDXWQxdj6ghSIjt0fhvxnN3lfI8fmkWW9aaDUxce2wIHYLi5c5q3ehBPbzeah4Dv7kCv3BtdXXeA/qmcl8bs0fKyhvBGsT849w+lfCKuBxK1nylYWLtHHiw39gb3eFi2nNiXlCV1SXtRNk7l31BVIelyD5nBxVos7UL/dMJPy+Rnf0XNgJEYYoo0Nxi4Ii+eD+X4psCkIXe9w== 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=ZMovxh+wf8jZqfOPnrTLdy+1cRRjhk6c4HUjpo8erTo=; b=q7Y1w10hUj8RU5fmswLXRH9GA7hzRPt8pzBfMTarL6JnxGhuxfnp4ypaF3DfXu0FNAodsSHib0DG+q8ART2U1Ch3YFHB1W/RgCRXdL6nILlddP9+JXBtoiWuQaA7TFbX5RAwca9a18fNGU1eGurpzPoSmC2QfuzBjRGptdb8jGU= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:46 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:46 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 05/27] libmultipath: Add support for mpath_device management Date: Tue, 1 Sep 2026 10:45:04 +0000 Message-ID: <20260901104526.3850621-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR12CA0003.namprd12.prod.outlook.com (2603:10b6:610:57::13) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 5965db82-5f50-4abf-d391-08df08162d89 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: GSIAze4MMpFplQs7s4T0wPeuLP5Ft50/XeC0iWXg1XpwpN5kJL7qPkm+kYMFdcG4zjGbZWhpIoCBsSkTQ7o8FPwjk1kCyi8wz1d2WXTQ+HpznmEI4T/rO9T08rCOEl/XWYwZ33xyllwIpPgMhUJNj7y15wNFjFeqG2Y7BYCZKn/z2FgybyPCy2TTS4kpZlWK62ziRu8PT2V32EcHoHsNDNfdJqCGS3hVqEQL9LeSII6q+9g+1sMFA1+PjtI6vaNHZRkkpF3m38FfbYtaMyFZVX7pqCvuyb0fcu5THzQw/fBZITBem/Ifq2+et5fhVY+mypE0ljAKWHEnnHVXDJCIU2yBeT/PEdH7khpVm81tQca8cvNRkjlnx43/nje10Rlifcj0NDDq8IdrHh8PLR9jXvRDGoFnrIshrD1HU5coc+jggPgtt6uqdyvj1nSlqhH1V1V8FLb7A7EEwmzDLfh44vkavUI8eL27K2bV2vEILkMPyTGMZqPYzq9/jORzSh3URaPHweClMOD10qwLSomEZQMoN9XnSESDtb7/2VnEQTL5lT5IaNl5F/6Lt6J+yW3YbQg07YzeMmj2yULvxM8ZkHJ97U7J8hk1mJ1+Vin0wfgL5WxpubIa9qrmkDe5ssY5NFo2krIVAp8DVeSYb54Hn3Ul/4lE/C8Wq+SD7SXoUe4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zoFYP8hGQZ9pH+ZTfb0Q3hFcHeoS6hiqpBPBiESxRcz1m6Bg9PS8fKgmkcxk?= =?us-ascii?Q?OfwWB0AC6SZjHcpByx2obulflsM12PKXrSuGY7fQDStmTMX1tzC5urjPI6l1?= =?us-ascii?Q?ncpLTneWusVeIVn/1nqiiCLFYJCnumdR/R8BPkL9dmnzRDNPIPf/5p5Lu0Cz?= =?us-ascii?Q?Zd9mSDpMsDjxYoz/95VuF23KuXhW/CXZA8mnQQecSIC7bAEpSG2ad2TVHLD5?= =?us-ascii?Q?BNzS38Z20fK299eNuPlPg8ONTftYb+IEpq+1Hwkkhgne6tX1QJ6QDB2kjOzv?= =?us-ascii?Q?m4wtIfxWdeFy8lxFYY8z4raKo5yBj8es5Rg31wdZHYF22oQuaGVKD9zqoHuL?= =?us-ascii?Q?QW4UJ+AxGxruw2XBFKGzbJ3slvMk4YkJSQPWCC/Th5QmwVRIAsYW0nzDehKk?= =?us-ascii?Q?9y+EDG3IjTdzTa5rShtdB3XPrwJaQnXakMFvNxStqP7zLUxn9yp6vhqXHW7R?= =?us-ascii?Q?Q7tJ0wKW5HuhMoGNKGdyUWDytVYzaCQ3Ncu8QNBaK5YOUpOz7l2mZhHvhoSq?= =?us-ascii?Q?LZ05AWfTJk02GUj4cd4U1WGpSMIaCPVSivlYaAYZlU8edDMJPZB1bDdfwI63?= =?us-ascii?Q?r0YJZ6eXmHvG0GfhJzFLy5X0QywHys9O2FDJ3qEjhm1cIDWjJd4AeOG/R7KP?= =?us-ascii?Q?Ad+mL/qD9RaCITgKys0Ws3sU1WW9879iZbezKtOVi6kVr8uUwqWXLeD0uZuG?= =?us-ascii?Q?KypI5LTLbPHHeTvtVPTPjKaUznQYKGqFMGNZNgj2CapfmKI+6s62/YjCZMwi?= =?us-ascii?Q?s1K3Z1aeBTb7BzUcBq3Zc1rlEnugiys9Dmt3tpB/YwctTUcxGFNDW8LZsn6L?= =?us-ascii?Q?4s2zE9np33Bopj72Hf19wFC/VBAZzOoUCp1MecGu2+EEck2uhcEMNZRMk9zZ?= =?us-ascii?Q?yMGBIax1q+pqvsSHgN8NAfXLbIaUNFxvzkiQ7V51SNvohpu2gKVp4cOvpQ55?= =?us-ascii?Q?+OHNGrgvCkFvctZZejXx16ya8DPVbz0oa1V6ENRGbJWvNYKklMxULDEIyoc+?= =?us-ascii?Q?/qEHbymmSgl/l7KhZ2I5K1ZSJsaUOBeQMkdVOPpjtwDUCizvBh78/gSYRZlP?= =?us-ascii?Q?cV4vd3J95MANDn7fDuVIZIYN6BWpIe/+a/VXhXK4+5/MzcRBdRB6u0c7cmP0?= =?us-ascii?Q?gQa9tBR38aJ4xmIzMo9RzKWVD2ZE3d0Ct7dtxH3y4DNQPVbjYkcVLZ/4ir5c?= =?us-ascii?Q?6vwERxYL4OiSlzGCAKIGXmgXCfV9BNMwwCSiOfqIGbGXCg2XPedgyQh83UKY?= =?us-ascii?Q?ygsrmbxmyqQKsXYxRZS/K3q0bLWtl7C2XiwQXNtCpiP/aAONtSZaGm3PkuMj?= =?us-ascii?Q?T1okfkHfUA/8gNCGGQMEsMf81Cb3GtPPZyYatq03xMjN/ClhG8PwPRCwa4St?= =?us-ascii?Q?rB5ate3IeMQGbS2ZbK6ivZsvdQVUs2jdQ+AbCEXw7beMimt438Skbmh0r136?= =?us-ascii?Q?kHKpTd3BS668z64cPYMvpROpngFDSHFwojT1zOhHnJNqX0fnqjWYkrDk24f4?= =?us-ascii?Q?aLLqAv7XTd71XmWzbMLUNClFGrFNQMqBWFmUnAToLcfCloR+OG5UgGZKvoQ5?= =?us-ascii?Q?P6Q2Ogt4n/oas6aRWaEu5QN/BrnYBGwTljW17gehyo/vqEfqFsOEzUlarxlh?= =?us-ascii?Q?LcWxyQogTJZBwbliJ6omdUAppQf3n5Ffg0lZFaGugZk1LpnHQtaNEaNKtsLp?= =?us-ascii?Q?cNsPM0FL2chzsN7wr4d6OGwWE/RF5DADUJNu474pVpEn82u6vbajFukueEGO?= =?us-ascii?Q?auA5IFJiOQ=3D=3D?= X-Exchange-RoutingPolicyChecked: AV3U9najLBirtyiYFwKWfnvAlN6QGmv8Fpb0/rJ+Zog7kwPydYlsNZX96WV5+dZ1/pGEFBecS0yLVbnQSyQgH+b8Sf9b1LyrADeKuNUXzpSDWyyNrU+Np6s6vhX+hwn6hYM745wI+OF4iL2NnEn63PG9LaNhLt9Y6Cy3vCSuRc/kk2RbU1jS43rYK5+XrcwNNsypaOmrTbj9B9On5EmatyjYJ+T00MN3nbH5Zm++dlDJlDGAUQ1DEPKI2+3PffaoDvsYFWIzuuJXcg4SvKOOpau7jexLE32IqqzgMX7GsT7g5a3Fz0OXx847mIcJZKGnYOLMFC+b4c0E7hD0iteJuQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: qwAjtuDT3seFSCJs82hcGfud/8GZjn7njyW1yZ7hJ5/Ziy0ir2Yk4gx7/ljNALn5hn0pSKbBjceK3fnzjrZglvfe2VPFPhBcSNCRAUgxhsxGC0pzUKdNEP310brjv4dLxPLuaKeeckGZ/WIKSMYyDYZMb5aUoq+2lHAPpbnYYpQr3UfGlHmbZZsMcTbxy0QvnP6HLS1NvoocyaAMlqScui7sShRuaYqJOmBPedC9cDxc3RWwCuQ21ccXfTpocTs9U5I61+BAfvNttbsrXc+9Ckoq//2Uee0rIplqHcY2dFEG5/Br3nitm+70qTwjntlsyZgDhGaPG4Slj26FP1D2l6uUn9pQmfQ8qYXQFs2AW7Ld/0ySjA0UvRXsoFZHiy9NnPoEWN1osKhsF8AfgdHXJfHtagCeTj2PGs3jRqPrxQ8t6sRoVVmfh6wjA3bzPq4xtKTjjZdpsY7+z1gZMgWMA1++AxmM0trGadRTXDef4AdWPhxuzRGevXMAzi8ZOg9c92kQJwrIJyUL8rQ6bETQJnYAIz7e6FqzCY1bVzy/Kqyt/7P5ICdOniFdx6UdJdUbuESQpZUx8498i9ctaG0whZ4ucTBed0tb+5SX+NEeivw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5965db82-5f50-4abf-d391-08df08162d89 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:46.0258 (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: w4ZlGsE0V4bwM0CP7xP2LWp+kJ+R3X/1clDJ6eZnVXkpVexpBeIVnBJEBvSd1v7/h64owJHyTKqvLF9SbeEPkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX+7+6gJIteCXQ /eeOcpCCLNkjADbspm0YHYM+KWN0cSeGj2aUPxyRXJS5v2OADsBkSDUyWBlXilial8ybGTjejJf whfm4nq4y02FqBex2Ac5i5K9ntYfKamNqlE+2Rw97n6075NyFU7x X-Proofpoint-ORIG-GUID: dFYtnu5_RRiXuqljeKRmXGATBu7fz9Yn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX0GoWdkB4VolK 6ukOSpb6cvBv5HxewNItEIr9vknyG+v6vRWyBAnZMsjFLp4FjJBR1wJeC942GsCLTIYbhufRYTr joEPRYJiPyzGstdWhiBV44RF8SNOQZCQXuup84A/nm50uWdKLnZTydmfoPo6upTIb37xbdtID/l Lmpz1hAlBbhVlSMGnapKPBDWf3JAD6To/wAHKfoQxaarowXP6CCtr22tSqq+z5qWFQ8xfJk+0pK rx8n300hDW8RGfTpwoEmQgQs3Ib9UJL+wSjcDGEebG5dTAL1EtRF6P6otR9A1YkbhqNZWn5TsZv ktOKSKq+J+AlWy/tZ/1ZzIZNihCS1V4itDI6mRBewSiq9eRsOfck0MfvC6YXzhm9knMUdMVkqJ0 zEin9sWEfxzYIQ5cVOHOrfREtx0xwzCkNjLBepx32ewGpr63qSeytAy2w3MC78qBRNkEOiuQWr5 GtgpsVl9zhZZ/0LvJFWb4/sZZ7Dy1KcZD1WCY7po= X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96ace5 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=WlZ9DiTZ2y1qVm1cHVYA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: dFYtnu5_RRiXuqljeKRmXGATBu7fz9Yn Content-Type: text/plain; charset="utf-8" From: John Garry Add support to add or remove a mpath_device as a path. NVMe has almost like-for-like equivalents here: - nvme_mpath_clear_current_path() -> mpath_clear_current_path() - nvme_mpath_add_sysfs_link() -> mpath_add_sysfs_link() - nvme_mpath_remove_sysfs_link() -> mpath_remove_sysfs_link() - nvme_mpath_revalidate_paths() -> mpath_revalidate_paths() The functionality in mpath_clear_paths() and mpath_synchronize() have the same pattern which is frequently used in the NVMe code. Signed-off-by: John Garry --- include/linux/multipath.h | 12 +++ lib/multipath.c | 154 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 374f0531f7e07..033ee8d54bbe9 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -20,10 +20,13 @@ enum mpath_access_state { MPATH_STATE_OTHER }; =20 +#define MPATH_DEVICE_SYSFS_ATTR_LINK 0 + struct mpath_device { struct mpath_head *mpath_head; struct list_head siblings; struct gendisk *disk; + unsigned long flags; int numa_node; atomic_t *nr_active; enum mpath_access_state access_state; @@ -89,6 +92,15 @@ static inline enum mpath_iopolicy_e mpath_read_iopolicy( void mpath_synchronize(struct mpath_head *mpath_head); int mpath_set_iopolicy(const char *str, enum mpath_iopolicy_e *iopolicy); int mpath_get_iopolicy(char *buf, int iopolicy); +bool mpath_clear_current_path(struct mpath_device *mpath_device); +int mpath_add_device(struct mpath_device *mpath_device, struct gendisk *di= sk, + int numa_node, atomic_t *nr_active); +bool mpath_delete_device(struct mpath_device *mpath_device); +bool mpath_head_devices_empty(struct mpath_head *mpath_head); +void mpath_clear_paths(struct mpath_head *mpath_head); +void mpath_revalidate_paths(struct mpath_head *mpath_head); +void mpath_add_sysfs_link(struct mpath_head *mpath_head); +void mpath_remove_sysfs_link(struct mpath_device *mpath_device); int mpath_get_head(struct mpath_head *mpath_head); void mpath_put_head(struct mpath_head *mpath_head); int mpath_head_init(struct mpath_head *mpath_head); diff --git a/lib/multipath.c b/lib/multipath.c index 93b82eea7d38b..6b8f6e846987a 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -51,6 +51,87 @@ void mpath_synchronize(struct mpath_head *mpath_head) } EXPORT_SYMBOL_GPL(mpath_synchronize); =20 +int mpath_add_device(struct mpath_device *mpath_device, struct gendisk *di= sk, + int numa_node, atomic_t *nr_active) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + + if (!disk || !nr_active) + return -EINVAL; + + mpath_device->disk =3D disk; + mpath_device->numa_node =3D numa_node; + mpath_device->nr_active =3D nr_active; + mutex_lock(&mpath_head->lock); + list_add_tail_rcu(&mpath_device->siblings, &mpath_head->dev_list); + mutex_unlock(&mpath_head->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(mpath_add_device); + +bool mpath_delete_device(struct mpath_device *mpath_device) +{ + bool empty; + + mutex_lock(&mpath_device->mpath_head->lock); + list_del_rcu(&mpath_device->siblings); + empty =3D list_empty(&mpath_device->mpath_head->dev_list); + mutex_unlock(&mpath_device->mpath_head->lock); + + mpath_synchronize(mpath_device->mpath_head); + + return empty; +} +EXPORT_SYMBOL_GPL(mpath_delete_device); + +bool mpath_head_devices_empty(struct mpath_head *mpath_head) +{ + bool empty; + + mutex_lock(&mpath_head->lock); + empty =3D list_empty(&mpath_head->dev_list); + mutex_unlock(&mpath_head->lock); + + return empty; +} +EXPORT_SYMBOL_GPL(mpath_head_devices_empty); + +bool mpath_clear_current_path(struct mpath_device *mpath_device) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + bool changed =3D false; + int node; + + for_each_node(node) { + if (mpath_device =3D=3D + rcu_access_pointer(mpath_head->current_path[node])) { + rcu_assign_pointer(mpath_head->current_path[node], + NULL); + changed =3D true; + } + } + + return changed; +} +EXPORT_SYMBOL_GPL(mpath_clear_current_path); + +void mpath_clear_paths(struct mpath_head *mpath_head) +{ + int node; + + for_each_node(node) + rcu_assign_pointer(mpath_head->current_path[node], NULL); +} +EXPORT_SYMBOL_GPL(mpath_clear_paths); + +void mpath_revalidate_paths(struct mpath_head *mpath_head) +{ + mpath_clear_paths(mpath_head); + mpath_schedule_requeue_work(mpath_head); +} +EXPORT_SYMBOL_GPL(mpath_revalidate_paths); + static bool mpath_path_is_disabled(struct mpath_head *mpath_head, struct mpath_device *mpath_device) { @@ -473,6 +554,8 @@ void mpath_device_set_live(struct mpath_device *mpath_d= evice) queue_work(mpath_wq, &mpath_head->partition_scan_work); } =20 + mpath_add_sysfs_link(mpath_head); + mutex_lock(&mpath_head->lock); if (mpath_path_is_optimized(mpath_head, mpath_device)) { int node, srcu_idx; @@ -489,6 +572,77 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +void mpath_add_sysfs_link(struct mpath_head *mpath_head) +{ + struct device *target; + struct device *source; + int rc, srcu_idx; + struct kobject *mpath_gd_kobj; + struct mpath_device *mpath_device; + + /* + * Ensure head disk node is already added otherwise we may get invalid + * kobj for head disk node + */ + if (!test_bit(GD_ADDED, &mpath_head->disk->state)) + return; + + mpath_gd_kobj =3D &disk_to_dev(mpath_head->disk)->kobj; + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + + list_for_each_entry_srcu(mpath_device, &mpath_head->dev_list, siblings, + srcu_read_lock_held(&mpath_head->srcu)) { + if (!test_bit(GD_ADDED, &mpath_device->disk->state)) + continue; + + if (test_and_set_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, + &mpath_device->flags)) + continue; + + target =3D disk_to_dev(mpath_device->disk); + source =3D disk_to_dev(mpath_head->disk); + /* + * Create sysfs link from head gendisk kobject @kobj to the + * ns path gendisk kobject @target->kobj. + */ + rc =3D sysfs_add_link_to_group(mpath_gd_kobj, "multipath", + &target->kobj, dev_name(target)); + + if (unlikely(rc)) { + dev_err(disk_to_dev(mpath_head->disk), + "failed to create link to %s rc=3D%d\n", + dev_name(target), rc); + clear_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, + &mpath_device->flags); + } else { + dev_info(source, "Created multipath sysfs link to %s\n", + mpath_device->disk->disk_name); + } + } + + srcu_read_unlock(&mpath_head->srcu, srcu_idx); +} +EXPORT_SYMBOL_GPL(mpath_add_sysfs_link); + +void mpath_remove_sysfs_link(struct mpath_device *mpath_device) +{ + struct device *target; + struct kobject *mpath_gd_kobj; + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + + if (!test_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, &mpath_device->flags)) + return; + + target =3D disk_to_dev(mpath_device->disk); + mpath_gd_kobj =3D &disk_to_dev(mpath_head->disk)->kobj; + + sysfs_remove_link_from_group(mpath_gd_kobj, "multipath", + dev_name(target)); + + clear_bit(MPATH_DEVICE_SYSFS_ATTR_LINK, &mpath_device->flags); +} +EXPORT_SYMBOL_GPL(mpath_remove_sysfs_link); + int mpath_head_init(struct mpath_head *mpath_head) { memset(mpath_head, 0, sizeof(*mpath_head)); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1679476CC2; Tue, 1 Sep 2026 10:46:19 +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=1788259583; cv=fail; b=SKBfLRd/+gBN5KD8zZN2Yc2DfMTnrRSoWKzkGzuk2zdRaNPg4137ObXoqBkxxBi0hRsdT7GRlf0pPR51AwbT83GvPwb+iYO+MkiLwOPNhvkjGJ3aZrDsPMgrjIMJXVmsH1Cob9NAcioJRZsgb31BBgGXfMqTl0ULLhR1y4Bku/Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259583; c=relaxed/simple; bh=n1ZHkZejQUckZdRrC7phXm/Ks2LMJJoS1p0UyBezGS0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pTT3e79kbZWR+ehz+sIcKO+t9FZUdfFFCKrL9yGT51rM3v6ih5blQAz07PVpdbfuyIBlRf1p9g8C3/MTTm83dFbAORdBN/UdmBc74YoQAaC9gLVzkDI8SFMxjM60LmgnBefQ7MlT1PRHtLjLR9mSjKh6Fe5c2mU1m639YUFTeqo= 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=XBvQheuB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=oZZ+aNvn; 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="XBvQheuB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="oZZ+aNvn" 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 67VLBvCG2846793; Tue, 1 Sep 2026 10:45:58 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=Ur5FzgoLQOLKvnMIPofATlM/EaZmZTVUw4Pkj6EOhIk=; b= XBvQheuBUUoTVZG3/QBpcCy6laJSoKe+iP4IVjgn9fh2WGRIQYGzDDRxbko71yFk zxyOo6s3PwuBhLcnRvZYZ4UlqPtwJpVKXENPm8z864GXc9KlnRhkvIbXENPb6Jm7 wrcO6wc9PBS9xjz9bxZQKniW+r448D7+r7lcd7cHMYG4xg2t2QsYMLVdz6mjOHzC ASU8DsmD0Cve7iU7Lwb9G+rnLFL85HaoM0DR1zdkZzHgN+X0eIXmKNi8YN8HtuzM NhU7aLzVMzw6RWUnP929prt9zjtVfGb0sLM5O2JvmWJxVVIiy2yUihFjDuG80Gv/ rOQtxv2kBYkDk0VCrDwr6A== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbavegw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:57 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjY9x036488; Tue, 1 Sep 2026 10:45:56 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:56 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T5hIIf/vTTH0iE7/E0DP0sykH8YBddXziswO6BjrN/PqJfgrPpa75bngET2h1X4ALZIJ4ZjdLwF+0e/Fod/9x6Qex7GZLpElbEIT6A3ka4a2FoKg7PAlOM7RO/MnbAuAE4DHIpS97DEkB3OccHC7IeuoihdxQSEPKcWAhg7zzh65L7Oy27QXnUpZ/rYfKSZAxT9JCEAZ+Z/jOC+lFscnsRUPbp0M3KnAJiGVXKKarsUdqfo3EQm6PPkZd1ej2zc0vPqtjTpSx7ZdnOmxY6SHlC/JaCJ2PVAdczuisC5VdcZmJgtC+5ynS7K/ciGEs9HucuXAes4uF25WxVYpYgyHhA== 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=Ur5FzgoLQOLKvnMIPofATlM/EaZmZTVUw4Pkj6EOhIk=; b=melN0CWVj5ZN16YnK5uEt+E/ZLwxK84tlCvhIv0xn6VN4DPDlhCkLX6DirY76SJf42MW3Az9IBG340ESvqn+VSrbxxedJaiT4Rp4hA9XMgENlvaZgmSxgAU9NXK6RVU65AksHmQsnnXO4AW8jm1zfnvu7EYDnfjbg0KG9E24LPn1kAQYH4wz0kEersc/4h+RS7Ho9HUxg2LE6wAyw5gJK3SArBtIfNR8viXJqc4mBC2/9/1hpsj1hMa8dAqVHnjUXdgm5JHOVU/H5hlTKkkxwAeBYjBTbr7h217KsbqKM9Kr2EoMR4U6USfZdHwUQZ+RlR7tnxwsgPoguxi0ioYwEA== 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=Ur5FzgoLQOLKvnMIPofATlM/EaZmZTVUw4Pkj6EOhIk=; b=oZZ+aNvnrq3ywo/EmotBezSWQBMIMWTfnls3xA8StC7nfaHaQrwsLtjHZl177eoswIjOUJ94Nm1IrUhYRfEx+MIByds73943lE1QTNZxOLFAIGWV9IykbibbNRPH3ZWfs1zi8VywgspI8lms+x+i8SEMuMqNv3wcUzFaMocbbuI= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:47 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:47 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 06/27] libmultipath: Add delayed removal support Date: Tue, 1 Sep 2026 10:45:05 +0000 Message-ID: <20260901104526.3850621-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR02CA0026.namprd02.prod.outlook.com (2603:10b6:610:4e::36) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 7edefc4c-bd6a-4553-a232-08df08162e8e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: mj+v0CbPx0Q0s0C25hkIaSPCds2fMgNmQ/u4FW1r0TdPFm+IRVYwqJd/CIEzeAyEm+7sH/IqMG7hdY/7bpl6qPiM005FnAzK69pLu3Tt5ZGgf9QHPZ5+qXSAIFrfEFhPUvOc2l8IC6peGgjNdyaTlXJRfAe2ejV5kbwJFbSGdjJSoIYSHRO816aqaGI3v8eE58aIdhdVb7ftv2TWMHA05tSi3ii3YlMbPwbcVWUtbiClf/N0gn26WXUmG5skuWzYACIM3gYBdd+jRZBOsO+EoNm+3KWbu2VP1ja1OyvpnCCyW/DJFb4N0yKsaeUNethrxGsZiQ3vqSMjRhifwiPXrhQprwm4v2WAyyChJ60DxtMyTr8kdzP1fsy/vFJGkwyTFdb48TIhJqCoVbBlHjDO6ubt+e4i9h+wroOZAmX8rfTtQST7/hHTW5sPsa7Y8dxAlxCFz38N2QzGlwXmQSz+Doipz51Y09fwy4DfwCVyxL5EV+h3FeBB35CcuMA1NkOYDGA2dpjlJVIwD78YM4SxLg0+WmO3QulsOOw06EuKmRiJbRj4UDQBECQ9I8R7nV/8YbtIOMcfXyGGi1mg+busM/ZmxChTDdrZcYgFm6GaFJCOxsa8DFipvGH0l+hO2XrufNGTUsr2y9LTmT0PXlcntrT+a8qKG9YL0f/AuIdLouk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QsMZFrkcqafnViX7lBVW67FXU9qwpkIiFGCjtupZJwNbbHCk4TEDvX31LVS4?= =?us-ascii?Q?MwbcR/f7qjW9CWRqr0wmJ/GNvj3/xV8l2gRnR59kfEXT32iFmKbPU2Ay7a14?= =?us-ascii?Q?gLhRgkIrGJGHXf8CyGbZ7EbI1DGlXuJNlfGLBc8KnmmJ0wmB856bOZh21VY/?= =?us-ascii?Q?KzF0jyDYdEyaZQvZ2SnnBbDkhrpFqZXPMylTcGdo2cvOfEZkwg8/YxiH8gSB?= =?us-ascii?Q?RM9jx9uRJSG4IujZpzOim7y5swkV84mUHN9KhZJC8mtjG3kJlFmGMvG71pWp?= =?us-ascii?Q?O4pNHKwxWm4AcIS32D58Kme3uYtnr21DNbtgBHlIl7x+63BvTgr2lWv9I6eA?= =?us-ascii?Q?UNciZ+PcbhrSq/Z7z5KaEKJiyDLM0mRbMI/Z5yFsYTWIXKyYSsPimbRTFOUp?= =?us-ascii?Q?PAL4ESCfw6+KPeqRKzLgyHAE3kJ5qSGLsfkb2hfhhtF8iXe5nEAD0IeEMioX?= =?us-ascii?Q?+XjnT47481NeGA8SDdlc2T9KcP68BAY280/EZ3ZAcJYx3a30qfNa7HicXoIC?= =?us-ascii?Q?w1UpF5SNP9UGXadfpVE/MgWJk9MBvv+An0vzpmAog92bjZiH7r0MKxb/iHIS?= =?us-ascii?Q?8NCzhg0kdDdtSO1HLf9soBCNGGc3rB1LyoIVKNKMq4w1071/+h00ZIiMeRxB?= =?us-ascii?Q?H1yzKKE3GZaXUvv7ONqRxznWQNrlpLGvGs2mEk/C4hcBFqa9HsaVWKiSMtKB?= =?us-ascii?Q?eQuyzm831fPybPAzfn7it7+kvGEClyFQIZFnHzgIwZjsEkLaeR5+GKryefD2?= =?us-ascii?Q?YZxkBQZk7aVDSJkMNdoOPQf1KrgNSNBqqTMHsjyr1bLRPvfBPg5xsZr/8qUk?= =?us-ascii?Q?Lg+mJqemtyaFs0cfm4G71QHEE9idpUyzs79CSfQmYHrBdrG+G6jh9Ly3aPRU?= =?us-ascii?Q?7NpjWofx5dsDEEtMsffKNfvK7SQaNyaZ9ZTkCj5DYOGqRz9sJBIsjjNUvwdl?= =?us-ascii?Q?54Meq+q9pata5jJIjR0u3EbYwYTWSuQeY/gHQlPIRcNDpDrEHk26yoGdfCj7?= =?us-ascii?Q?ajMP1q7e/AqW6O8gGKriwYNtu5VHxTQroLRk8dNTdFpwFMkxT/T5C38HRZlG?= =?us-ascii?Q?PRMj7mqe85QWpgQJE94Fvucv3lXn29UO2hBN/Q9KTmJAcjEiQYtutFUKcW1H?= =?us-ascii?Q?HNmsgSmyQZB6HoVHPJMM8N2kljh8QL4MCMaR6Re1fjjipBzBieUqHLUlOVdP?= =?us-ascii?Q?pHwbzp43yFWEgmhydmdT4EWUzztCj9xYzIG7bJUykfcFGUyfkZu3TQ1jMzVq?= =?us-ascii?Q?n+jWldLJ8wnQqbGDMBcimcYI33Me8FuT/PWTcmPUksLZLJy5AiWaCEFRUTtv?= =?us-ascii?Q?twekYi39iyCdo+J4T9ISvopCD2ui2uPvSHolz18VbPuC/je+2JWRoty2t62l?= =?us-ascii?Q?jsipCv2QFTNQV9RwlYOyjjIqxOV0ev90tbqT7r/hYuX7jXtSRX8DhsmPGNHR?= =?us-ascii?Q?2TZbJwUiNwSCG7qhdDh7CYnwAB0aDvbKD2VsghboxknjDArFfj9FNxKKET/2?= =?us-ascii?Q?Ciho8wMIx0WF5omdtJw6B+hQ7zPnCtb9z04nD4QocKv64PsqcA3pdNimThaa?= =?us-ascii?Q?9aMMeNdqLn6IOhLx5/OPJ6oUi8y0StWTLmMwQn8TxF7AgYsMNrO4wLMu5LqS?= =?us-ascii?Q?DIZUwxGvFhItUTWsYQ/1YPO7zkWieuj8Kat6FhLgPGfhQKBluo32yAY2nTof?= =?us-ascii?Q?+lN0tV0L70r2S+qkGLL2NbU/yRoJLTI3sa09NeM3oggJK482nkNFsUtMH6K2?= =?us-ascii?Q?7zmogRpTNA=3D=3D?= X-Exchange-RoutingPolicyChecked: CzS7C8lSg2d/DGOiJ1kRqrP2kTC9SkLXFXBy/5qCfzv8HWvu7N+aacZlJmiYsUUs4RY4AUXIWY+i+SKitdVKFE7PLxhWwbGTJ+FkRav3MAPPaNv+sbc+5c/NcSARX0xpkU+iDKdW0cWnoz8V7/UzAM/OX6oRHsHC3whgaKKWgWRzolVZRf9zsug1Q+dozn8gl4oqeyB4l4mC72fpHksRFzlfOym4t0fGutmq2fsB2gw7L2iif/716f+XES4Wq2krdXFpeW/9dbSWLIre5AoQsJk40qsjs0QzmtqM+m9P+2EeX5cUwtkbDfsk+vhoBqRv0ufTyqzFxJrvivj5RKVXkg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: CFzD23zVUuA1YW8OQrvFVV58MR3+2c1z9DnuTGgwlqbgoH713rd4hGGeikxhSHxlwPn9Lbd1eY6pkUfbzusrzViQ2JuucvhVCxD0l7dJszRzLniITpbwph3nYyKH5Wh6gxSxk6NU4ETV8ermBRVkn9jsnbvy5w6DUyPNdegQjV5aEVwwT7ZDzNfdQ7lUk7Ex5o/8ziqoEmGDRofW1Gv3zVMbtkIbT0Lg4bq7MTWtFMy89vLBkBa8w8jICFVPqsOI3oMkKWHEur94xrzXZynrVfqet/F8mM/7prYmBIDWghWUAMiOVAsP+BR9foLAL5MVfVWh/7Q3hVp3XtKLG/AT1ef2o/kXL0/D+PF+oAr9M7Cik7ttrl++pKiLVYBJsFaX2AQyDNA+FAAOypTufKJWR42RJ4azLqoa66CYaREuYrT+EowyNIcmgVmTy6dmoVyU0yJ0McWhQEmgjgn/xAdKiPvu2xqsuTmOxbYJPqcK35k6RUacBtxO8yUM8HGD3F/lgvkPWV4VgIkw5fSdmUO5XKNv/8j/E7Av05R4HESSf51MUBjq/I7E8k758utzOy8leGXGFnxC7us15ooKInKceNG39IGMKIjNPvxGueBfigs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7edefc4c-bd6a-4553-a232-08df08162e8e X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:47.5133 (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: OMbdWqO48zW8rlTQ0n/mor6porfo5F+9zS9ul8H12I7/RSUlkoTwlCTcsRnYClN0S5y1SYE73y7jvCdj/nyRpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX7Xz5w9Y/hgpT GnjlxsM3dDv9mFT/tVYZMmrSIWOLkvcqrtJVuxVF76WNUfbsZpdyClZQJl570hLMNIpXi6EbwcX 6eC2LIBnjiag/pK4phR6NwBnnA2u/zcdMSdN9UHAIJGjFeXx1fYp X-Proofpoint-ORIG-GUID: As53WtS4RIiqP6sSO3YcfGka6l_o0BE_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXy5LWwMtOWdMa 3dHnWu8S96Hf94Kkhe2F2Rykb7wAZHBpvi+/lVcrWO8utnqaZQqZ5bhSXyfAujcQusoDuTP9e9l zG7wF0nJ3zNy3DmR17mYV3t3IEMf8g+sN5LECZq8+SmMNJH9QdgnucQ37fJRf2/7oFYp3on4X29 lPI1+X9ZnDAqf+X3Qteyomj4BrIXZwKM1ddlUzU0H33/NTDPI7hYKLJzKrpyLqqMTTtd8L8DSwh 7FgW/n9nj/lIevRlwkCxtYkAkk0HQEhlIhnd5tAx2t9XsxLX4/02H7ClybbXV88wiaiDZzRec0I FhjmA/dElZZb9vLaU5glHf4hUNP/kVJ8m1W7C69xaNSCa43553Y1AbfErgahaUKTSVycChvlgjl d6VN3VUHIZz/deOatOWtjhz72DVzYzS+/HV4DioESfYk/qKdlq2N8XEv1l0rtX67LKektiFhaYW jTdtq44UQkfEGyAmTxMLmg96FQKwwsr2AFNV4Fh8= X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96ace6 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=BfxcaXdt0Lgmg1IeN-8A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: As53WtS4RIiqP6sSO3YcfGka6l_o0BE_ Content-Type: text/plain; charset="utf-8" From: John Garry Add support for delayed removal, same as exists for NVMe. The purpose of this feature is to keep the multipath disk and cdev present for intermittent periods of no available path. Helpers mpath_delayed_removal_secs_show() and mpath_delayed_removal_secs_store() may be used in the driver sysfs code. The driver is responsible for supplying the removal work callback for the delayed work. Signed-off-by: John Garry --- include/linux/multipath.h | 18 ++++++++ lib/multipath.c | 91 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 033ee8d54bbe9..66b6ad9c2219a 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -34,6 +34,7 @@ struct mpath_device { =20 struct mpath_head_template { bool (*available_path)(struct mpath_device *); + void (*remove_head)(struct mpath_head *); bool (*is_disabled)(struct mpath_device *); bool (*is_optimized)(struct mpath_device *); struct bio *(*clone_bio)(struct bio *); @@ -41,6 +42,7 @@ struct mpath_head_template { }; =20 #define MPATH_HEAD_DISK_LIVE 0 +#define MPATH_HEAD_QUEUE_IF_NO_PATH 1 =20 struct mpath_head { struct srcu_struct srcu; @@ -58,6 +60,10 @@ struct mpath_head { atomic_long_t requeue_no_usable_path_cnt; atomic_long_t fail_no_avail_path_cnt; =20 + struct delayed_work remove_work; + unsigned int delayed_removal_secs; + struct module *drv_module; + unsigned long flags; struct gendisk *disk; struct work_struct partition_scan_work; @@ -111,6 +117,11 @@ void mpath_remove_disk(struct mpath_head *mpath_head); int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct queue_limits *lim, int numa_node); void mpath_device_set_live(struct mpath_device *mpath_device); +bool mpath_can_remove_head(struct mpath_head *mpath_head); +ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, + char *buf); +ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, + const char *buf, size_t count); =20 static inline bool is_mpath_disk(struct gendisk *disk) { @@ -126,6 +137,13 @@ static inline bool mpath_qd_iopolicy(enum mpath_iopoli= cy_e *iopolicy) return READ_ONCE(*iopolicy) =3D=3D MPATH_IOPOLICY_QD; } =20 +static inline bool mpath_head_queue_if_no_path(struct mpath_head *mpath_he= ad) +{ + if (test_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags)) + return true; + return false; +} + static inline void mpath_schedule_requeue_work(struct mpath_head *mpath_he= ad) { kblockd_schedule_work(&mpath_head->requeue_work); diff --git a/lib/multipath.c b/lib/multipath.c index 6b8f6e846987a..fada92bf9754c 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -66,6 +66,9 @@ int mpath_add_device(struct mpath_device *mpath_device, s= truct gendisk *disk, list_add_tail_rcu(&mpath_device->siblings, &mpath_head->dev_list); mutex_unlock(&mpath_head->lock); =20 + if (cancel_delayed_work(&mpath_head->remove_work)) + module_put(mpath_head->drv_module); + return 0; } EXPORT_SYMBOL_GPL(mpath_add_device); @@ -339,7 +342,16 @@ static bool mpath_available_path(struct mpath_head *mp= ath_head) return true; } =20 - return false; + /* + * If "mpath_head->delayed_removal_secs" is set (i.e., non-zero), do + * not immediately fail I/O. Instead, requeue the I/O for the configured + * duration, anticipating that if there's a transient link failure then + * it may recover within this time window. This parameter is exported to + * userspace via sysfs, and its default value is zero. It is internally + * mapped to MPATH_HEAD_QUEUE_IF_NO_PATH. When delayed_removal_secs is + * non-zero, this flag is set to true. When zero, the flag is cleared. + */ + return mpath_head_queue_if_no_path(mpath_head); } =20 static void mpath_bdev_submit_bio(struct bio *bio) @@ -481,6 +493,39 @@ static void mpath_requeue_work(struct work_struct *wor= k) } } =20 +bool mpath_can_remove_head(struct mpath_head *mpath_head) +{ + unsigned long delay; + bool remove =3D false; + + mutex_lock(&mpath_head->lock); + /* + * Ensure that no one could remove this module while the head + * remove work is pending. + */ + if (mpath_head_queue_if_no_path(mpath_head) && + !check_mul_overflow(mpath_head->delayed_removal_secs, HZ, &delay) && + try_module_get(mpath_head->drv_module)) { + mod_delayed_work(mpath_wq, &mpath_head->remove_work, delay); + } else { + remove =3D true; + } + + mutex_unlock(&mpath_head->lock); + return remove; +} +EXPORT_SYMBOL_GPL(mpath_can_remove_head); + +static void mpath_remove_head_work(struct work_struct *work) +{ + struct mpath_head *mpath_head =3D container_of(to_delayed_work(work), + struct mpath_head, remove_work); + struct module *drv_module =3D mpath_head->drv_module; + + mpath_head->mpdt->remove_head(mpath_head); + module_put(drv_module); +} + void mpath_remove_disk(struct mpath_head *mpath_head) { if (test_and_clear_bit(MPATH_HEAD_DISK_LIVE, &mpath_head->flags)) { @@ -529,6 +574,9 @@ int mpath_alloc_head_disk(struct mpath_head *mpath_head, mpath_head->disk->private_data =3D mpath_head; mpath_head->disk->fops =3D &mpath_ops; =20 + INIT_DELAYED_WORK(&mpath_head->remove_work, mpath_remove_head_work); + mpath_head->delayed_removal_secs =3D 0; + set_bit(GD_SUPPRESS_PART_SCAN, &mpath_head->disk->state); =20 return 0; @@ -572,6 +620,47 @@ void mpath_device_set_live(struct mpath_device *mpath_= device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, + char *buf) +{ + int ret; + + mutex_lock(&mpath_head->lock); + ret =3D sysfs_emit(buf, "%u\n", mpath_head->delayed_removal_secs); + mutex_unlock(&mpath_head->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(mpath_delayed_removal_secs_show); + +ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, + const char *buf, size_t count) +{ + unsigned int sec; + ssize_t ret; + + ret =3D kstrtouint(buf, 0, &sec); + if (ret < 0) + return ret; + + mutex_lock(&mpath_head->lock); + mpath_head->delayed_removal_secs =3D sec; + if (sec) + set_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags); + else + clear_bit(MPATH_HEAD_QUEUE_IF_NO_PATH, &mpath_head->flags); + mutex_unlock(&mpath_head->lock); + + /* + * Ensure that update to MPATH_HEAD_QUEUE_IF_NO_PATH is seen + * by its reader. + */ + mpath_synchronize(mpath_head); + + return count; +} +EXPORT_SYMBOL_GPL(mpath_delayed_removal_secs_store); + void mpath_add_sysfs_link(struct mpath_head *mpath_head) { struct device *target; --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6829547DD71; Tue, 1 Sep 2026 10:46:19 +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=1788259584; cv=fail; b=qo61+eTmbS2Lk2DGAqUX6qfTdQlO8Gav84LTG65stbj/3NK81rbb2d8V9d4RbOOQL4mbBjUoL3bDpTiJEH5lgVZEhWJB8YlLuOhgWQswTV35NWs9j0Kj2aiVlvfEpOFK3N6U9kbtr7ideGf2b+cMk9nDmneXT5Xs7HlVj+uk154= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259584; c=relaxed/simple; bh=b5l4HgyMPJklc0mR4fvgO3vVspaet0zsUO7coT8TZsE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mux+u4yyfLO4rKzxbAyuqcahb7U9BhIh6lwEb0UQtIbyz9+FeYUY3IYKoucJqOp4Hdl5e7mW2S8ml+Kts9UbeXbnrvNEAgwC1W9htlfXfSAJlZLNgfMMLeerBf/CtBgnNeNRHGbHMgE+HhTgwTDKuhdcAl2BCLbNFHCjyluLHe8= 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=bt51wNIb; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=cGDo6OjU; 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="bt51wNIb"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="cGDo6OjU" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBwvZ2296648; Tue, 1 Sep 2026 10:45: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=7NK2lOISdE0e8zVgrSBxKnZ4wModahQ2UE5f143WLx0=; b= bt51wNIbUSSOqR17qriG4IykcWhyVnN04yn2QCElAfoTEa/Ydc8elGOlrj7LPLkp 9Wa7RKd4YFx8Bk1krY0pHt/mcp1HLoFbxhFjhPJbkFduaX87lHY3wLef+I+WHXKc Asu71/ngVnU+0mkc+63SpTtUMB0k5VfafhYDNXK4HWDduiC+cNYxz7X9mQCdTVtC yNNpQDdFba5OEd1KhJ/TANoO8bNAzSuAWpRyOFVzWuUXlCV7WdxCXOc792dB2CTI gLy5ohfBvAuBPGVzUUzhd7yKZATjsOP6i1+KwhQqNgRLxD+8ctlethlUN/yNgDhU 4+PwqDR5JXHUOdXrukAOLg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdap-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:58 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA0036488; Tue, 1 Sep 2026 10:45:57 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:57 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iHvATLjP6WpmJKiDVJPtQbY5uEpwfxJ3kZKgPJKWEqddeNCtdQaw1CgkYOrahlDsmnx9JSJlJkZ61uS59ApU/ElBD5g8EqpP7x+Ng4gaEoWSFfDMy6Fr06BMoX7iQn/3XMVmCfuUt3xdZAyL/pFqSAwWLrJFtTYNPgPfY8O6v4VYHOBuJ5vS9iAIZ+3K8H3x0kTyyrHJnhuY6ZXB3KhKKgeAmvHxqYBT6htblv6GPWrrHLmUczhcUs6jCI00Aj9jo0FKFy/xl6QwN9fZX3qyI5AxB5C5SVxCoqf9x/79H7BhuVqCjpXJwBv5XHt3yqO8wGPpg4oCgsotl77q4B8aZg== 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=7NK2lOISdE0e8zVgrSBxKnZ4wModahQ2UE5f143WLx0=; b=qjMrSPJJX6KqcW0J027V2I7h7kGg+H8OeoRahIst0QHZVBhlGvfMqNLPBTYnwERbs5H2UVWV++LkdXC269SyzIpEe6j0SFlFHUBc/aVqLQoG5wNiz4G+rFd/sHrI6T2lxuo+xmGwIpi6bVuykMGymEro6eBCktmRtKHa+8illTea7+wqSauWfyxZA8AH1UxcXA5HVk/LTyZT9zPPj59/j9KPEfOqKt+ze6/eodLUCUPSy3HJT/wSHw8sTqa0F60btnypmjDwbAvScNkuDSNENiNoW/+Rr68CISdy7AQyhnjhKdgsjFwPfj2IJFjHwFpuoONZMdK+EEndSSdhOc2PZA== 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=7NK2lOISdE0e8zVgrSBxKnZ4wModahQ2UE5f143WLx0=; b=cGDo6OjUbf9uk2geS9QVpgd/y6V7zbF8pbq/uZa1jQcd9BxSX3dId0vXtIORZHx92Ug54BrwTIrDQxTnxPpktAxYU0n8xBO62CfmXGLtGwp1wr3eXg9PCK961W8dHt+d6ccrnHUsai1XZyLuU3+z45Hxu0fHJKD8MY+W5/PB4/g= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:48 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:48 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 07/27] libmultipath: Add sysfs helpers Date: Tue, 1 Sep 2026 10:45:06 +0000 Message-ID: <20260901104526.3850621-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0PR03CA0225.namprd03.prod.outlook.com (2603:10b6:610:e7::20) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: c208cf67-3bf4-4435-172b-08df08162f54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: Nag8J5PMvyJUz8beFZh26oUuAaRrfojL6CZCzXZ1z7JhKm6oM5CcGR5j2e/1B5gBdjQgkY3ifygTcHqPql3nBi91Dfu9WFMgc91++54kWeznKnTAb+uhjmCBptW9eYw0B4jnGblyl7WSBkzpH++vr6qVcDWNOVu9saGhXBhYQsxsA0tPh4HwzzBjEHse1nv0FALERZXleWzu/2pvORwij5Mwh6SU3IEvJoFB0uMnUh14xUk0eNZnw5d4s0AL7Tb/doEaEhSxrYPsxFAMDEJoQVNsz5sOq8JFW5Ljt4gPev/Cl1ZTyZRurDGp7qPg6t6IjqEKSnHqDhGsNqXgweiecNN58WU3A51w0AKXNKH99VB8ZeQN/l82U6Zx7YijEBszRGgkcPHs/LUiCJTNgwYft4E0CHhBR1tYTJjma2kWHoMXQunTgu3gazmZsDGqyq5sGFgRGZ9p/lkb+1Z7IpIU+sBnE2bVTkvEHEjwfa4XfG9+riMBzxjBi4l1xti2v5/UMAsXWACN/YKMHQ6xR++1GwlSWiv7Er0/nq17Vff1HRfTCq/KY8IJbrjLBNJ8oRmDWDTelBU4hqJDAVvCFhFrwGovUkbp7kePSJoxbrw7i3gBMjQtMW2H3E9kjK0ipzbhFjXOPuBU/doVIZGpm9dVwmnpNxE5Eh1AcMOKXUdmQoI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Rn+C7po5LfetLZiauDtsuZTL0RSXL2EhwMhxLXhcOZaruVK46cogJKoIkCWL?= =?us-ascii?Q?kaJAebwgJLvX+set6JpKuEMYnO/JtB/H1rWjA0kk36PJv7GQ9ywH7GRwrFgl?= =?us-ascii?Q?iec2OQ83yP1MNM/wzxGHU+LdbyWLR71dHGWG3L5gIsKZFZRvm8Jk2XT0ZyMP?= =?us-ascii?Q?xkcO1/vE1XBOXlTcoz21gNC6UjdHY89pFjqMhffyf1BUodpKU1/gmLPy368f?= =?us-ascii?Q?xHHn8bLaKTGccq6oBxRV2TA1VeksutCpiwmmagM+xomZErTxrHauDK83F+7+?= =?us-ascii?Q?Qq90LDC+RVUEkDEnXNCgCdOqgwEbRUi8A6TqmumD467kY7UQqad2RrY6zlMh?= =?us-ascii?Q?tiHAwj8gX6H4PLVqcf8eYdONCyqEQJaLVQa7pmUu7yhOOVxm4ApkKuEg+2gA?= =?us-ascii?Q?zp8VVkv9IX8bMmzsr3sBWRFj5SHJ5up8ihdNRkty73KkalvdhTnFN7iMAqKn?= =?us-ascii?Q?diMdsew8K+eOr6WeYAOmGG2bpxSieGeKUfROF0VlDRpXY20/+Fp3X7jmpIpJ?= =?us-ascii?Q?cEuKemfgLL3NlJ0P/2XpAXnIMALtCxZP4TgDl/kQZhcroktNGi2uxHQ8DPRz?= =?us-ascii?Q?rCDNY/++LrJeAzyodivM0winq2DuFqo8+nIKy+xItOQnMQW1vDm6OMkR0Gpm?= =?us-ascii?Q?vN60PVKCwFa4frRPNVcOKeCaqh+JiKXmqqpEToV7vr4ID2YBx9Vtnb/wA46J?= =?us-ascii?Q?7ovEquvHOcwzUplP2owget9BsrYc9tBhdKMmtofZhndhNk4TAQhbiPxoE6ZA?= =?us-ascii?Q?MEcW7Ua1cbDm3EIwczMwnML+D6fvm5+1CMGGQCaGTRCzSWmdh1iPLrpWiKf4?= =?us-ascii?Q?aO3oJchaAK3aR5yVTKy9VgbqrCPBbFT1WOZ9AoEczqS5LA7K3cYxAPZ0F7fF?= =?us-ascii?Q?eCsyB9kFzwZmoTBe+u9fVOtyn5H6faZl7GsJOOGG7w0TCIIAbmxLRcXHLCKa?= =?us-ascii?Q?VQbF0oIxUjj42FK0l25BmObPAUXb0CYFWAszDUhDNk1SnPZy5U0qPkUY+1Vz?= =?us-ascii?Q?Ixq953I+nD9wkcvs7XIWop2c3SMLabpJa/paFUs2SDNf02mj749Mi2gQ6uOO?= =?us-ascii?Q?NVX01mg1EpaWoAGZ5cA8PC0pt1UACOC0i6UVMfCvafO2ox7RmRf9gK8FdgO3?= =?us-ascii?Q?Z5VG2IXHiyIbvCfVEsuqeaHx1FxStheoe8YX44H/FO35xN114QDQ1Mbgf9pQ?= =?us-ascii?Q?AeEo0UH5j92e0m6bY4/Z87h8pn2MTePbScYoR1rNHhEjAeyJk+9WwL3hlGHp?= =?us-ascii?Q?qjMZFOj7chDDmUZrOOy4cPq/ca3BMrbTrInZF5EKQHQmsCX0Puy9enT+tHrH?= =?us-ascii?Q?C2g6fM1ytI1woW2tCN+a6+gGteQVQX6I75PuL6AHg2XkeKNemd7OOGNwyZPY?= =?us-ascii?Q?j8k9t8p39fUVBViWoe7MFFqyz1v68l9gViSrVNoR/NYVd0YXXrw9y3Z66kD2?= =?us-ascii?Q?fd0Xr8aAAaFAya+i9ufV4eOzs2GODdhkGAbKd0iW/2XRwrGhrEys3KZCvENR?= =?us-ascii?Q?AS2bW1W001U2cfJj7acjqHFkWJrqvKs7mhgsxuC9pf1PeIF8SRG6I8kZrbM8?= =?us-ascii?Q?+Ya1NAkf55CqZ6SHkCUsx3Gc/Gjk7h+QgoREyDzxgvOduyJZ+Pkp2XsdJraM?= =?us-ascii?Q?v/6RUiDTXDV1rQb4phMladF2XKH9cXkYl7RaaJzuf5fsA6es5Ty6mu2EKc4W?= =?us-ascii?Q?eafaFl9lQ3tUPANN2qQTA8JccL3ji+KVf780AZCcgFNXWhw/VYt+ee3VkSHC?= =?us-ascii?Q?ARGbwhnCVg=3D=3D?= X-Exchange-RoutingPolicyChecked: fc3tCzq8ID6PXGZ/vP9ZCbpmVpZddGXAZjvehjQAS5SEZ/gUNhJkxNIDtfhvXMzWMw7946HBff5xcrXMrZtqDfEFL2TN10NkNvA7mLpN6XQ6nanaOcdGMl8QILGvl/+Ht7KCj1w76Q3E+3kR5x/yIr6DVFGqayuPE1zVEsoBsJwpKnglSALiCBDX4HxKdXJUyoxj0D+tgaDiV/04iNhgRQrohiUJy3RijnQ15iwT8f/2N3ELIj4iXL045vUO8aZXs7noc5187zKWd6xfzsuV1kW8mRQulpo8smDcyLgcHlhDte98SJa4qlY7OnvP0Lxez4dG2L+JprIjSFkzwNxIgg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /filII8MxGD3bzot3To1hXEEEgt1QDDDqZ/IZpbR+ktb0huyNorppSM5C9UPaas5G6MXek6oA7HXSxgDmjcHg+y0S0iJ3yQ2J93k6//kzni2rn13jgc8vlHzz6Enk/cWNOsGJ/tDLkOgWzUyNrUk7VaAurESz7NxgwnB/qvb44C1JADc6HIxWwr7CiqFc+zkfaQEmxijHB2Lc/Ph1PqJDBLZtMjbOLJeBj8DokLhxIojVjxW55EBzjqh0zdq7XmP+3Ul2sKmYuyd1JkqfaZsGbPpVhX826vShkgp5VWZ+D2fAwaEen0EdnVTCGA3YYMRBhnqhDLYK5kKHh0cU5fVPLiUXVT81BOFuTO04yQVBIVgOdgxXq8k9VpR3lWF8W1OwdxyblIEwsWXkDLJC5M1M74VgDKmCP/xV9wJf7q14uwBw4S6zJNELqQVLKmWGLPe5UV83WALJiW7MXQrckIpsbPbMd0D1uezUKXm5WTOAOWR4VT9d54oU74M+1UxsjYrvmzgj23fUz6clFC+jgLTY8zwZyXDRCyVrL6GG9EiGSTVWQjdY1e7i1GrHGUqrX5Nkp3LSy8/Dr99OClC8QKRnGFI+K2V/a4tblzdIK1cSpw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c208cf67-3bf4-4435-172b-08df08162f54 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:48.7571 (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: MxbpkBbd00aGjLWlvc3deUfiY9iee3CSCnqxLnYwyo+E/Ih8qHvuyfJQiF6QXxnU1VsJpDRm/1YlCSJvO6bf7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-ORIG-GUID: kpneRblYwjExh3ajy1OTrrhyn7W0Q6TU X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX7V52eBPpxe3E HhuHPFNsx1JXWEbUl4F+nTWhbMwz7z5uDODbrPcHCgZf5eHQ/gw6/UoflMM1sUZpWbIlQgPvKyt aVJ2CxkeIebId8owfTekmdFDU1UpfP9v5643xm28xxlH/jx5grYn7SyQYlWh/mXaDhucFYn9xjK ECPwk2iC6Ev90kc3UVaeaD+46vFe7rWSnuFNYgoVAWPnfRuV2a4z/xNOAinTHVmrGVgb4ZvsElM 9PMie8diMx/gOLJ3L7GGQOno3Xjv6fnv3PiPzxC1HOaewy2fnGsI1gsrtR+YmM7x41AD4Fti5v8 LK+Y0AqY65m+2moGrkBeajyRwOCzfWtfrS/CX3JoeQw6+SnxB/7BWRqFsry3RJF21wwV0+vx2kT sKurPPMxNjZgAMzPjOiEu1Gs7cPr1S4nvoaci3IHVZTjXy5EVTRRioNM4dPWGcJShU3KnFUJ/a1 8p0tZO+n7JewX/drXmv0NNhoAF25pET6KtdgSfVE= X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ace6 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=JWw5DRbbQmmJTouRsXkA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: kpneRblYwjExh3ajy1OTrrhyn7W0Q6TU X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX9TOXFxfN0kPd hUhvZih9TSEc+33b2l7FxN1d2AwYHwh8pWq170fsk5jnEyR74y5SzvAI6pGSvPBn2nXDCjNdUvV nRMt8ZdNMmc/psmvY33CwAo/Vaip7twg/ie6MoTDUDNtPxQllfag Content-Type: text/plain; charset="utf-8" From: John Garry Add helpers for driver sysfs code for the following functionality: - get/set iopolicy with mpath_iopolicy_store() and mpath_iopolicy_show() - show device path per NUMA node - "multipath" attribute group, equivalent to nvme_ns_mpath_attr_group - device groups attribute array, similar to nvme_ns_attr_groups but not containing NVMe members. Signed-off-by: John Garry --- include/linux/multipath.h | 5 +++ lib/multipath.c | 94 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) diff --git a/include/linux/multipath.h b/include/linux/multipath.h index 66b6ad9c2219a..7a3708ff37254 100644 --- a/include/linux/multipath.h +++ b/include/linux/multipath.h @@ -7,6 +7,8 @@ #include =20 extern const struct block_device_operations mpath_ops; +extern const struct attribute_group mpath_attr_group; +extern const struct attribute_group *mpath_device_groups[]; =20 enum mpath_iopolicy_e { MPATH_IOPOLICY_NUMA, @@ -118,6 +120,9 @@ int mpath_alloc_head_disk(struct mpath_head *mpath_head, struct queue_limits *lim, int numa_node); void mpath_device_set_live(struct mpath_device *mpath_device); bool mpath_can_remove_head(struct mpath_head *mpath_head); +ssize_t mpath_numa_nodes_show(struct mpath_device *mpath_device, char *buf= ); +ssize_t mpath_iopolicy_show(enum mpath_iopolicy_e *iopolicy, char *buf); +bool mpath_iopolicy_store(enum mpath_iopolicy_e *iopolicy, const char *buf= ); ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, char *buf); ssize_t mpath_delayed_removal_secs_store(struct mpath_head *mpath_head, diff --git a/lib/multipath.c b/lib/multipath.c index fada92bf9754c..58eb9be5bebbe 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -620,6 +620,100 @@ void mpath_device_set_live(struct mpath_device *mpath= _device) } EXPORT_SYMBOL_GPL(mpath_device_set_live); =20 +static struct attribute dummy_attr =3D { + .name =3D "dummy", +}; + +static struct attribute *mpath_attrs[] =3D { + &dummy_attr, + NULL +}; + +static bool multipath_sysfs_group_visible(struct kobject *kobj) +{ + struct device *dev =3D container_of(kobj, struct device, kobj); + struct gendisk *disk =3D dev_to_disk(dev); + + return is_mpath_disk(disk); +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(multipath_sysfs) + +const struct attribute_group mpath_attr_group =3D { + .name =3D "multipath", + .attrs =3D mpath_attrs, + .is_visible =3D SYSFS_GROUP_VISIBLE(multipath_sysfs), +}; +EXPORT_SYMBOL_GPL(mpath_attr_group); + +const struct attribute_group *mpath_device_groups[] =3D { + &mpath_attr_group, + NULL +}; +EXPORT_SYMBOL_GPL(mpath_device_groups); + +ssize_t mpath_iopolicy_show(enum mpath_iopolicy_e *iopolicy, char *buf) +{ + return sysfs_emit(buf, "%s\n", + mpath_iopolicy_names[READ_ONCE(*iopolicy)]); +} +EXPORT_SYMBOL_GPL(mpath_iopolicy_show); + +static void mpath_iopolicy_update(enum mpath_iopolicy_e *iopolicy, + int new) +{ + int old =3D READ_ONCE(*iopolicy); + + if (old =3D=3D new) + return; + + WRITE_ONCE(*iopolicy, new); + + pr_info("iopolicy changed from %s to %s\n", + mpath_iopolicy_names[old], + mpath_iopolicy_names[new]); +} + +bool mpath_iopolicy_store(enum mpath_iopolicy_e *iopolicy, const char *buf) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(mpath_iopolicy_names); i++) { + if (sysfs_streq(buf, mpath_iopolicy_names[i])) { + mpath_iopolicy_update(iopolicy, i); + return true; + } + } + + return false; +} +EXPORT_SYMBOL_GPL(mpath_iopolicy_store); + +ssize_t mpath_numa_nodes_show(struct mpath_device *mpath_device, char *buf) +{ + struct mpath_head *mpath_head =3D mpath_device->mpath_head; + int node, srcu_idx; + nodemask_t numa_nodes; + struct mpath_device *current_mpath_dev; + + if (mpath_read_iopolicy(mpath_head) !=3D MPATH_IOPOLICY_NUMA) + return 0; + + nodes_clear(numa_nodes); + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + for_each_node(node) { + current_mpath_dev =3D + srcu_dereference(mpath_head->current_path[node], + &mpath_head->srcu); + if (current_mpath_dev =3D=3D mpath_device) + node_set(node, numa_nodes); + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return sysfs_emit(buf, "%*pbl\n", nodemask_pr_args(&numa_nodes)); +} +EXPORT_SYMBOL_GPL(mpath_numa_nodes_show); + ssize_t mpath_delayed_removal_secs_show(struct mpath_head *mpath_head, char *buf) { --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BBD93BBFCF; Tue, 1 Sep 2026 10:46:22 +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=1788259589; cv=fail; b=PumYrbWpDIcgbuNI3wc8ooP1wc/1kse5BtRxeCp+tSGsmuIVBWfNjw3dd4JI0cH4w5i29B+JS08MKt97BJcB3BJ7a6vwO+uMapbXIiOeHUYZrOR8xp//VLzeE5UmxC4DwA0cb9kjwDpAOgzVgPXG44JZWVFz2dZjGi7/1dN1KpI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259589; c=relaxed/simple; bh=dw1EmJdcfR+mWefjY3rwavOh/ZjxMOoCyakioEdnhqg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Wl6i1rhBDETS2mamRm2Jng0JOz6Z8B4FAu4r5FH9AbBQ75md93hv+y6WEneSmEQUan8+sfTZaVWvDanP1pjdGWsn3ln+umNFOj5T+2CpV5KP+urILxRP2DxTX1i+fyHXt283K7qBCUGpxgc8fs8NrBC7J3kkewKqks2vIyYQnx4= 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=J+be5CD4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=eIcmSUMF; 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="J+be5CD4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="eIcmSUMF" 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 67VLCbQf2223247; Tue, 1 Sep 2026 10:46:00 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=pVcT2mG80vYds1Il13lslgyVg554GSkY5F659bj+2Xk=; b= J+be5CD41PTPAFLdfV1FF/3GgNbYhk5hCnqyg8g8xJ5msneuiOLuP5EDOFI5mNje efV2JL6OhXkxkhlGOj/cSW4Dv8VYkFHGCliCPD+IefSH9X1Jo8OmAl4hMhxoyXQZ nsyVGWi0RrQtyHyVpUDVUcCDSqjtq/D/luew1aecoGmjMgnFmiWmvRliZIVegQHp d/u8BxFVXkq2o1iJo7b80Q9FucFP39PHmwyaf2RGoeyCyuga9NUmQOKT9EjXVN6W S80hwMJyaApK7bQ1jQKp7huHkr4Xx3fthmzQXHmr6kdTshIG2JqfcV0Om3S+arG3 M5H4ap4qX0l2fG30KWOo7w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqyrvbw6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:00 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA4036488; Tue, 1 Sep 2026 10:45:59 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:59 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VkB/WP4nFfjJATx/hxpkA/s7P8+vJ2PwzrDZYGePlQPDiWfFOmznUzUCs4BSadYlMaeDLdKMFjTDYSjDBC52TJqfqIQB+7HOdhP7rFjwtMpzz7rviDv6yzhcS2B6YHuM7Ah7hB/UZOSRNJKCbuIjXKcxVrDHNVW+VwvK2E5LfsTCSs/RoMBkRZZxh0p+SzgmDfGumKvjFFDrPefkihddVR+Xk/mKzHX9uD35G0stQWpJbNXrmHYyFmwtlH3SorksvgjTyQzemaPAt+RpYqi4fNPD2LsEHUzKThghf5yuJo//+lylMWKFmERk69OdClViSAByji1kXON1hC3KBzE79g== 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=pVcT2mG80vYds1Il13lslgyVg554GSkY5F659bj+2Xk=; b=wLZ+gMnG3qxBbcVRByM64CudMT59ToMbSvxQHfAOxeRBJ2C50fSXR+Fu9K1bNhhB7saWFz/wWHJHqj7w+4L/3aclu43kYvkWtt+iZkiN48KhvvTimh+7tDf3I7mY5w+2WR77KPHLR7Kmj0+mwBwa8L5E3A74d9C2prD7V1sypfz8d0sskoL1nvsV1kDNTX8KMvllEj6FAPOtH0mGKeszs3R+QMv1VvnW4DFJtzcjH0pa0/+s8ej3tQe+zb+OkhHGtGoqGGcLYYR0T3eBCQXlsyMnW+B1oliDfFJ6oWrOZmjpdlkUiuJxUNBquIea0qoRwLKNSUPhfW+JjWyjiG+Ivw== 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=pVcT2mG80vYds1Il13lslgyVg554GSkY5F659bj+2Xk=; b=eIcmSUMFeHvGLYmnVLx3RFb4GwYDPszyErYHTy2tjeR+ScZPbssoA4siKkTKGjuNGa3cXuG14b0D+DY5UKPXrNhw0H09s71E9z8d5S06wKj0tE98N4v1OZbjVfAzM5HXDnJj8GR2tXdK7JF/ASnrp3o2zVq51Tnk1IR77I8ZNfw= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:50 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:50 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 08/27] libmultipath: Add support for block device IOCTL Date: Tue, 1 Sep 2026 10:45:07 +0000 Message-ID: <20260901104526.3850621-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR19CA0018.namprd19.prod.outlook.com (2603:10b6:610:4d::28) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a2dd8b5-7ee2-4a89-ff3e-08df0816301e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|5023799004|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: udqZmqESak9vbgKc2KzOqqMaM06IjeaFgv1lUME9O/Rn6liwxGUd8UdG5e+oAPjZK0K2X6Fhm6XM2nUV2SKDzr+jUkbM9gHeHJEszKbiWJ3SL8lKEFs9P6hDtxnpaSIirWdhq+R3urxXByyghN3oundtVPgaha3r3z+GKIrLQ9G97loNDeyne337tl/2IlVIC121mqkTAkvlWgVDUBc7sAnFKNAwcEZmJikVgNcUVdmaYlJHctwxjsmWnuoS68aam/MyqNe94bhCACMFPSQ/QVH+zKCsAIGhZ0duZj+RoPZg69hMvBm6RFnQtSfnjpPzhruIwxLZf9tCx9K9fbcSzwRPsHxSDLFWK/7fKIOTKueBaY6Ug1JhDa8kdnWV4VPkqLempHox49uH5EXdWWa4b6iYKVUYHWEX4NlP3wZwJVEC77M++XX0n6o9OEAVlYoDWJXHKQBbyeDqaxFZDOo3V6WKq+o2rXag/2ENxOTuQpCP6wFp2e5lWX2ZNoXKs7mfHgRjaOK9x2GJ6xXNcTl/E6wnjhopWPCEHobIVFsxNJlur2hKHf1RilLB/1PvhSo0r9xxp1dG+DrMm8+P3AWuj8iYvKc1zZZTGc+rGrr4iPu3/5zUSJUBzV3K1RkOeQsbKZ7ELhdzQBwF7dsC/SOCV0zfNlSJFC4y3U43jpEPM3M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(5023799004)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pugpyrzM6Ieh85fAp5O6xi9CiZHB0EC0+lZK9je2tF24SLOAF/jPB1W0i4mh?= =?us-ascii?Q?TzN+8AkCqvaUBbobLBRWjcmTGVQurZhkfzrneiKiHikDKjjcFjQr90ACSFw/?= =?us-ascii?Q?X4CirxOcV/v514wPig0eizqwKyAknsVA0IQOUS4XRS6HcII3f87CxfhZEw11?= =?us-ascii?Q?Hcy3R0RypmwBFGOpCqj+Pn/XsBm5wx8Ml5uNOBO91soaTFifcN7lg4X0ZWmO?= =?us-ascii?Q?+0dZOcU+IeR6rtVP9Lw+dSGgRYx2P/LszbZEcITOQAuD4jcJIZ9pjNo+/nbs?= =?us-ascii?Q?Ggd3zDlBk4Q+zq0pOBdsjrrk1iQrHBWXwkKiaY7OBIopjRthvehplA81nwJk?= =?us-ascii?Q?+VWXXxpn4IaC5L7fdYID+RyAccQrcvV5k/lV38bPcBJfX/hWkLTg+zu2q+80?= =?us-ascii?Q?uusRYZOTA+PjWqNmfawAVFAVP3+T+m5dAIYgIzwM9w31Wz1zLdJs3Py5DuPO?= =?us-ascii?Q?BImOEtYuYQ7fPNAxlaytYLCLaAqi3XFqMqLMhh8eIKeBZ30V9ghJ+zudNQ5c?= =?us-ascii?Q?Kdqiw56rkT/WyRF3P3h+UIMtJqxYyjFDXR4hMVVHpyjKlEudbur/ZsMEUPSl?= =?us-ascii?Q?d6d2OZmbYV6DrjEekr96npzVxW1wkLaxgyh3NFREiF64j41C/dKF3Pyfkrjd?= =?us-ascii?Q?ESASSwHREgdccaadnAx013uhgV0l8wVvyLWnSwNK7AC8xDxnpWSya+vdwFnq?= =?us-ascii?Q?b222Owneh2yFlhawvxBHK4C7JWSpjCKY1/B1bR/YZ7fdUpKOu9sYI62hICAb?= =?us-ascii?Q?Qy0lHVnowJXkB3XHPvjImCCah8qnI+s6iVxCLdT9MiVCUMcgWbfPEN8G121Y?= =?us-ascii?Q?S91IE0BgOEgpevmPebyGRmjGFQZ2BGnL5x9asX6Cr05e4EDX4M11zs99bmB6?= =?us-ascii?Q?CguoWyPVsTUJz/eEG7M9Zi0Ui1Qui3FFgw9ICPOPlXt9yK4j6Wqe8QDT7OUr?= =?us-ascii?Q?OmLL/40n1cWa5dKAsTY4cqpPuvn1HgjnT7z5ueDQeT9x7TY/kzdlOddlKZ3U?= =?us-ascii?Q?QgDAQZMf1laFoAgZ1RJ2Zu5pZa3SV80jPl21VOzHyuSbhC5hHhxiIiFFtWXE?= =?us-ascii?Q?q+L4Y+vC68+DDXWATqj2hO4xMNn2nZkKQSdXdcU5aZXq0tMbuLaiAaXBpFje?= =?us-ascii?Q?/pUn/hlVb5VdpIkaxFSWNTNnihBR1SCOSOQyin8lUdxdlHoGatGy2KFXmcdQ?= =?us-ascii?Q?LSlo+6JZzpx9Cr3UjpEveFNrXV2K47IbRBa7yYVWU8aPAFl5On+VfK8KhYyl?= =?us-ascii?Q?Hb2YaZ1g2ONFwQP6RxoMLZ/cnKAR8CR1Aiw3/0SVZn8aAzn18Xa4Hcl4C5bm?= =?us-ascii?Q?j90tdMbjdAStRRim75RSCrgirUix5YwLIzLymDTttzyEhVxp2d/CEroX1P4N?= =?us-ascii?Q?h2lb+qvHeTgu8byDX9W2UTbfl5QJ0W6jJOUFX+KuQ7vB0B26xX2femZlxBb6?= =?us-ascii?Q?w6ux/4h/4u42eMaycxjN95/1oOCkb2ecnmmTEqvXKl7YaW8YYgY5oW9S2UrW?= =?us-ascii?Q?ykajDgQT7fLPG4rPLdyjEgrFC5TstmxDc1wM9gsRelA0w4kyftNw0kH0Klup?= =?us-ascii?Q?RzV7NCiUT0rfwKv1r95gGRYbAkcMPLdH9U2mHQJJ5I0nExLgrxxktU1H92iz?= =?us-ascii?Q?scLSxZhK6Jkqm01nNzCIUCXDzawkxVCzZjYyL1WnP4jyg0wXosVXrUykEKUJ?= =?us-ascii?Q?yQnIYrbo4XjSvx/aodisRO39SgjCucwK7sayi2EBFhlR93fSuki48RCOIort?= =?us-ascii?Q?JTEvw2C1lA=3D=3D?= X-Exchange-RoutingPolicyChecked: Xc9TNJeiadLSX7Hrkpdgrb4Tz4s9ln5dSwVilm+CBtAABCkZ/XDIi2swr5Pvt7aRBiMh0/8zSKM0c7r1pRtSK3nXY0ApjRlRXlt4KQO1X6IGRXAu8hiq/kH+luNUKV9/utTYsc1U/ecnwKdw9QnryvOx6qaRZBMoEb0stj7U3SZn1Ff96ooYcXF3zdodw5n11Thi91l9ziN5fH3+f4jakIkqbVTSWCm2Gcc47ohSDEl/SPiHpEOGlRegUU77nkejXK9R2IJQC9pqXkTZt7A6eFJgZyrUocJCn+SeIpG3RyNQI3vpYkTClqrplD85iR83NiJGHbUSUxvPr6tXel+RoA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 2UoBcMyJUnC6pGqEs6EgcGj5W06X1ulv5/HRxjfmqzm6rrekBjYTEHAcTxANYxLWdFRcNtVNJyaV+2KtorrMpdIEmtjnURJCqOPjESwhQ4sp4yNi8mm8u3dUpGZibn8hYWLzl3Qx1tyJbbRJvFa4iS/dON84pUPt6HaaYHzUSO5dXWDqIoZHe5VN9rlJMrUR1V6d4QjD9PNmVqLVvNlKDRo9wbHMccqUuyRUzizQG8Y8FWMNFknLaNJ6lGi4B4Enk/pKpNR0TIqqRA8+qA0eKKasH/u8u4hQ0ekLw+lj6WM0FJtIl6YFwpLt0MIzCWEbGi03g9gzF5vxGWMXrV0KWkGmaJsPqXnezunV6JNBHwh2Wi8hMzaH1DUg4UEYREaWoM46HU6/gRHRTdgjBbmXDKf4eO6FwLjfrXaRcxq+5RqA0PaK3P3OmbQAReUXxr49XP7M8YtDO5704Tiq8GqMn6w2Vq/mDYu79gaSvaP9FNzumQoezu/QE5OUd4L2+7rmS8LffjOyHMllMN0wUJtN7zaXFTxvtVmrRmSlj6h7fKC+x18yrYImfJ8wxAhACJ+WC/qChpb6bt0y7bsMEiXoXpSR4jIHtdGuEy34zzym69w= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a2dd8b5-7ee2-4a89-ff3e-08df0816301e X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:50.0966 (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: ppXwQN0MslgSXWpHTRJO55dxzkNCYf+mhcQmjRf5vwi6PuZfLbRphRZs5JFBBGPMhIOz65tnHdLGWIN+R3Emkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX5rbZBK6/qMJ/ oyauG7ahvOl+wptzO6/bzMUij7rJBkO7pHY0bcl1/ZKCmKqcXd8eLPO/tQVQ3BgQOVqodkZYpmg 9D3K3wmBkYskeTfHMpAFR8KLagpEyHikw0P3CkofdvjRbhrbmm7OYXuJekbcMZwIrdQeCjoFi5S E4A8EYNRB/iZccuoJJU4MHC9T5jBsAkptQQZZTx3oDZ9X0BA0tMCyS77Ks50Omtrj4CegvIPT2H Vev4yPglhIaz8YAGA0EjqngGyusUR7y+ViqvZF3qXLB+GQg4pNxe92xEzyZU5Opjfm1saKXNCkM fa0ECc/grAPo3agzRUqCp+BCzLlDgdM41PExvnKKQ5Dv1PuQ8fJrnDFFs2RwWP/16YXk5BLBVaj zIgh1JqXQ7F2hZnyDvgv2fgLMhTEsOwgLUBPSMSJ+iVEqYZtbnmUkFTGDYthMTwGGKPgzRjOZD4 RbBrF7mIlXiM6LKGKDqLwGIbDBMpmCH1XuC0FPh4= X-Proofpoint-ORIG-GUID: fXBHZo55Vqn3JPOTodMRJ3-qC2OPJMVV X-Authority-Analysis: v=2.4 cv=fbCdDUQF c=1 sm=1 tr=0 ts=6a96ace8 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=MdnUEikRHl3WmUNKqWUA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: fXBHZo55Vqn3JPOTodMRJ3-qC2OPJMVV X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX1S1oDducxEVa CfG6z3LjZB8OK/6iCggSyDrI1f15xbLiU97FqCt21p8em95M2vPFq2P5kZg7l2ShFEUBOYSfF1W uxLoIdCwyofYBDtIxWP/KLD+W/9VKoGKyqt+oRmVw80xbTcqZYwP Content-Type: text/plain; charset="utf-8" From: John Garry Add mpath_bdev_ioctl() as a multipath block device IOCTL handler. This handler calls into the mpath_device bdev fops handler. The .compat_ioctl handler is given the standard handler. Signed-off-by: John Garry --- lib/multipath.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index 58eb9be5bebbe..f1758d1e60a60 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -454,11 +454,53 @@ static void mpath_bdev_release(struct gendisk *disk) mpath_put_head(mpath_head); } =20 +static int mpath_bdev_ioctl(struct block_device *bdev, blk_mode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct gendisk *disk =3D bdev->bd_disk; + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + struct mpath_device *mpath_device; + int srcu_idx, err; + + /* + * This check is duplicated from sd_ioctl() as we don't pass the + * partition bdev to fops->ioctl. That is not yet possible as the + * per-path disk is hidden and, as such, does not have partitions + * scanned. + */ + if (bdev_is_partition(bdev) && !capable(CAP_SYS_RAWIO)) + return -ENOIOCTLCMD; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (!mpath_device) { + err =3D -EWOULDBLOCK; + goto out_unlock; + } + + if (!mpath_device->disk->fops->ioctl) { + err =3D -ENOTTY; + goto out_unlock; + } + + err =3D mpath_device->disk->fops->ioctl( + mpath_device->disk->part0, mode, cmd, arg); +out_unlock: + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + return err; +} + const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, .release =3D mpath_bdev_release, .submit_bio =3D mpath_bdev_submit_bio, + .ioctl =3D mpath_bdev_ioctl, + /* + * Both NVMe and SCSI use generic blkdev_compat_ptr_ioctl, so would + * avoid their custom compat_ioctl implementation. + */ + .compat_ioctl =3D blkdev_compat_ptr_ioctl, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B77447D94F; Tue, 1 Sep 2026 10:46:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259583; cv=fail; b=hVyRRmGHjluAg4kuX26fH5DXdkRC3i0g9KzBtY+V3KHHFI13w4sXgvqkdcW9kYFix8TFU21SguH/W/XxSjl/Fotx6ZVc0sNIzCOgma1THzlcqtFyvNxBBDgtCcvX41m/7siq98VjXIUjyKvkPxIS7Et28qy1MG1sIfKsIS+bs3Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259583; c=relaxed/simple; bh=zdQ4TAieOo3zFUsLIGHdyqNlVpjNCccSJPd+tWLwZdk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gjpqUZfR6F3Wa3niMAC43nMN5RjL4MKVV+lTUj4xzKrQfkvmD3gEtool2Ao7d3h4xIWJjE92+hCMnRaEnwEEFYSeihMKlOu76N8m9mWT/fI2EZxLxXBQMqOWQllhaqM3wzlMhk5fZYDPqYxhcmX9LFc3wefB2dz6NTXZnDIKycM= 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=bhF3TFNb; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=KTzne1+W; 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="bhF3TFNb"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="KTzne1+W" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLCoLF2681576; Tue, 1 Sep 2026 10:45: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=pIrdTxggcRFXzd7fCKWdz2+G/7DxutvADb6b1h2Fhbc=; b= bhF3TFNbMW/aO6OCiqN6s+OZB1QmAviRcsF+aKrdVc16Xz5WCuNe1z/JjnkGezEJ FKBmfNNS8JIbIkYhEsXIsXvBaDOemi7IuBCF2T3bhqeLU1XCc56ouM0dGbWuVPTA RqQsjoayvBVYc+afmF7J5f7W1BicgV7muq8acq+CFcGQVR1oOLPxceWLLOpKK9XA W62qUDMWajhBDSdk6xhfwEdXWs+u/TQlsv2nDfrJ6sK1oJuHme5oUYFltDIFCKos mscyXB0HrfkiySF8cTt+Rc6PjGMa/H4t08XODnYkApCq328qojDFoRsGLMJAS0OP QuOsOUe/cpY8h6UNa3293g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqa7mby3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA1036488; Tue, 1 Sep 2026 10:45:58 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:58 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bejpgV1YzrsZ7RbOr0rhWQnZqM3diamUwn6SysOtfahmi+OqmF4tyWSGYVdPz9nlTbsbifmJOH3Yl4XKrHmp8Cl9a41cKvtBPxbFY3ldTgj7ygvxIiCAsdv1l8v4x37pjU5QH+k/gDgZABftKnAWm6yj8vl+28nyuy9PEwuo6H9pyBkJiflQT/gQ0YGm9RTkqHikmUIml8AmiCD5Tiq65HM/X5Le3zr/uFZhcVBf15ld1cHXpUqSk0buH8yXnD1SHosrrz9tHLxrc+DbofwdzdqhcH09MRhOoenKPpB42xFG4uS7RNfQUx9PeH1sZEatskW1YBL1TAigDqmWULrKbg== 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=pIrdTxggcRFXzd7fCKWdz2+G/7DxutvADb6b1h2Fhbc=; b=sEkyFTEXRauwzNWdYHS0WsA9eizhNcA2C//H7uKNvF9ZKNTLnUNfJGu7pMSgLziDo9SK3gMNaWKzlN5pELQtE5dBKLh1nSVqgKYAKWDjLWPG2Prw1pqU8tkeAiUWop++QThwlU9DxZv1aEA7UBkPHF+zUBsJyADIeil2MyGgxu99aideCwskxZsKC32GUWFbSC9hBKnTzC8zJ5+wGSoO0Cg3puU+DcN37BZlz+ridCXvZAT4eZMSiJ8fLPVhRtErbx9dXKMvRmcuIgaGksiVL9m0o1htB4kPJVnijML6rNngBUj/HxLCSY2Rg+HJ/Ygtr3dL4BloQ4UFMu2REppahg== 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=pIrdTxggcRFXzd7fCKWdz2+G/7DxutvADb6b1h2Fhbc=; b=KTzne1+WZF9aE3qRr9anPVyw0XRkXZGxmL8letK0smIBtM4JlHdpwQ1UJ9ZrrROJ4eTG2z35ORVTLoxdtXI/J0tSvQa3PDEDJUdcvFWMkVCVeYIvodz9Vol5iLSF4Yl6eueE8hAo5GoPTX8U3wcNHsVORuIy7G9I9eX7WoU8VvI= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:53 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:51 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 09/27] libmultipath: Add mpath_bdev_getgeo() Date: Tue, 1 Sep 2026 10:45:08 +0000 Message-ID: <20260901104526.3850621-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR14CA0053.namprd14.prod.outlook.com (2603:10b6:610:56::33) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: f6ae9343-9c48-4e00-55ad-08df081630e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: gA8Y2x9HWNpuGp2pK0MxkQ67FeRwtWcUIu1P+rJg7GGaWu2i6YXw27QEm8oBlv4/mwKW09PPqx17n4Ku21RqApEUPm6JqJyi4Y3ocqduI2Kwy1XFtYWGmfZmSYykPH0eCymfBjaGRqtKXNUDsSPDa7XRyqTUcPzVektqhfiy9m8IW4QI8EpHCfsesYtpRrviUYBgBpmSyuMwLJuz814+imuu6uW+v0SPeLHRnsMVrJ/3Cd7nOmSKj/jXTv/t/Fh9l7VpOI/hl7ypd4VT/4shC01I4vc1sT/+SFxoYIdwhPSIREdA1cIIwlFuWMiTjeqly/esgapNemlYgukguNpLPcqRp4wdxknXBzNUF/Ct9FvsiFS6aK/WMnUfwZ5FfJe6AEgr2tD5QkRJ6Lg7sNQXrVmFeGckIwLay3Nkbr0kiqpDTlT+L9IHudp5iZSM+6DZSpg6WnT5KuXkf9Tf0oROc6D2vKSsVDQOz17qesKv4Ip37BMH1Appj/8MVF9cz4dDEdBoSKk4MF9VRoWRWetp+4eUQ3At0gSypBpWHMYFL7rqf/rFOdv9EUFMnwo7twUXW4TojCIEkxiWOjhzMNqStB+skb694zx6jqrrgCbEC4fdVDr2gWq1eYyLwpP88m2y1wCwEB0tY8l3In1rAOLFBxDIiYOfdpPnw3hNcckBW6M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iKGP6AzfZ93YStPDxF8uPa+dcJAGHZtIm7QBaLrClCPzI8gImPtEO+dmz56j?= =?us-ascii?Q?1uPrC48Udafrb4QTmD3mT+nsBEn9D0/3Mg3ieuQjGVo9+s6qbf35NE2h+U5+?= =?us-ascii?Q?6n/tQqDjMCWbwNdvsD8PQ1KfbSDcfrzuAd2amPnV4wOM0Y7B9rAFodhBixc2?= =?us-ascii?Q?jqxdMijh8lWy2ycFDRmJsEbSbwGHc8T7QkNBfayXGUzk6jbA1QHz2gUBOrfE?= =?us-ascii?Q?MimyFPd6X0+L8E1YUTjq6TQIdHHbjwktvbDgERNqSincuukA6Erd6Md/JiZ7?= =?us-ascii?Q?7o9LZ0PaFp1xURxXqnIrc8ayCh1xriwHDZJF/aM8eJ9UwRSOaecJMSrmmD/1?= =?us-ascii?Q?GYC3IN2NQxyO3duwRx+c6o3+wN/qLM6ARw6Mmxwsi6vSAk0SnZZNjV2Mb/cO?= =?us-ascii?Q?2wlvEX5Z8E0UYDyksvY2uX9ojySJHsq2gv6L0WbCJf9tHX9EzC8/LOlbH/2B?= =?us-ascii?Q?7Ri2DfLyiCg+/5T7AlU6WT7VdtL0ClokcNfFHwrovdN+w7NWhgFpIShI7xTQ?= =?us-ascii?Q?7/gLeF9A9fKOJjqhQpIQz7xFYusYzuur8V1mWsbSofWNXyQK/xtQ8MVC20eS?= =?us-ascii?Q?H8yvZrCW1DFKFuvUU1h5OaRrYWXOrUkD0LRE+PACwL1NUdRKpMhLWzzc8ZfU?= =?us-ascii?Q?1UhjyZCwH49BtPEhPDfw0Uj9+Okwb9GZW6LjFjz8jC2AtQM2zGbYv8084h00?= =?us-ascii?Q?q3wdUu3jQ6EloEXvlw9UDy0ClpEXzz5jHIfyUPoZrvSQLLIUByTakJrR0q7V?= =?us-ascii?Q?TP5h0TxASF7xLGkk4yctzgAl2V36lJQJ+sZhUSb1PPKvlmDHeSMFrBWrPEWq?= =?us-ascii?Q?SmK2zchUy/HapuqXeuwozzqsvPdNnSu+YQsXkAjaOOhGpM8MvkSELcPL+p6m?= =?us-ascii?Q?ASE9Y2HsWyl8zcx9Y02NZL/wmvt1t6dHcXHYaDII9GpZ1ks0QqqTS25BcvsZ?= =?us-ascii?Q?VMlWNn2OJXn2GDNeZgbA3VW3r81xwJM2vxmFcWj0XPHbjFD/gUeearXRkrmF?= =?us-ascii?Q?U3gE8Ig+EyWIRTb1FJZ2KXNht8uV8o+Ps52e8d8AvH/UataO5LmcaZpRw/wH?= =?us-ascii?Q?RGu622n8/9BGD0OHiUJ6aWTjoFuQjddmdFK1sME1jJepPajbcYEbfkopAPDU?= =?us-ascii?Q?y1/+61TTlrzo9y4hPM24CoO+TDtfPb3vz3tvRBgK5PAygAop0Je9WUOMfKOt?= =?us-ascii?Q?LCE46BnIeQ1s2WLejHEQJRX8IO7Cfo67OnPliwU0mKbB2E5qsWF4bE4kQ/o/?= =?us-ascii?Q?9cnXAzKt6stuq0x2wV1bhrnuUZA9DWQlKc95tbXa4on9gDEBOW5XLLOrMNH+?= =?us-ascii?Q?x1t0R1Eg8DPFP6uWzzD1apokC+C+Ao1vk8GxsbwbhGbjKoHJKQqcWx5IfBR0?= =?us-ascii?Q?Uofn592uc9+Wew0CQLJRmRUirEHDJYHBoElBN0Smh2qnkwS6tYCIUTlHMXWD?= =?us-ascii?Q?V5RUj25iSpSdn/Iq4LCf2mEOMDrYJXIGjLnIDmn0YhnTNBfEo0i8AYDrrTo7?= =?us-ascii?Q?KNnp5ih66ZqWguwRX0gtLlKgssY25T9Ix18S0dYk23PD97X7pW6dzSNj0dwy?= =?us-ascii?Q?3QDMWg2ESA8ipfzoBHbjh39jwF/MHF33SUc6EhaSBktDZZo2KCogRHlquehq?= =?us-ascii?Q?N/gOH7azVPhiOt+narA7eceHrsZciYZXZnyQz3KSJBZ4I4+yg9XciMF8f8qN?= =?us-ascii?Q?nSV3QLceqUdFZHSBC32eIJncOZ8AqvU1iPbM0vgaRCErjWRiaiBMnQhnw6YD?= =?us-ascii?Q?Mgo9MmnmMQ=3D=3D?= X-Exchange-RoutingPolicyChecked: T1TiK1yqFFONKGbzFzhdA1uW+oYG22pufFvx2KzpRPgQrunxLE78SZxfAt169jHi3WOxrZ9PZYtLAo8MXh50E4++9YrF/XCJOzqq8cU8VBp+oJuTK/1MejRt37pXG60idI64ZYCPbu1feu3UHPK4ep1ygAhQIx09KOhTezTFgIWv5cDwVMDKZR96JQ/mqTiT1OEUfVgapAK77EpwLPYZpUY2nTJk7cR/+Qk/2U9qAHcXY28R733ePVVYI2kwNUWnB7B+iWl0zutmBoai52mDP0w/gfVtVfI0vv2vi3BJTYA3yv2xcDB+3ObVzptkIJFPlLQKqBHu7Ygud/AY14Zhhg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SCS7mP3qH3y4Nzt3ecMnk4jJ4K/Fen/SbO3voVq3TPvI5C4xzeW/Go6oBydQy2KmOS+0fZZYp+0lI/bEDGEr05UnYHweKazxir3gTePqRVpliGRvpTNM+ioeIzbft/BFZIK7HJCXN9hvC/2UnLlyl9Eeq3SHCssgnhf/NsNDNh5Eapc1skUgGsftrUT/XSDxis9nK6Yvbh/CcSQXDo+Lwll3k4bOw6N4oR780zE5RnuODJaFW8t9x+jZsm+noK9LcQB32FKqFfPA7MEGZtblxqYu4GFuKL+h3CX1Th1mzFMGu+6waV24et8oh6gzMK/76vnqZwnq5+07wCWXtu7eOlUFm0sWvN2BO88cvTA7o2iGzp/QH/29lljYhtEDoXIKpcng/ru1gErEUFRtNfm+2y5m3TY5+rg5bM6AFrjMUSYIib4GzWjRzxdEM0XreeAaA96FP0pnn5rt6ntkDrsIerOem4lExKPZI3VmVPDh+l/cHIHAgsRF+NrjQTl9dHdbsxV9aG0rTX0ixPkabjDG3JqHw8a6rXifhNCVfQpSFxyop2Q6ttJSlDf6pusE6GAI8f4uJH5/E/qJZVUjw39XZzcuZKb9/hWwo4Z9u/qNKEQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6ae9343-9c48-4e00-55ad-08df081630e2 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:51.6555 (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: 2tIImiuXfpFPHAzqsM8wQjQsWpcNVmLlDC2GAPnIb+FikwgzXR9k2c/BtTtT1eqzd5lxDw/B/GIYOArzzpB9EQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX9XR7ahAGLKnH kEinu4qXR5MGjv/z+TlRfXBXslarDsmxFs+G+dPQzFtoeGeJbsmj8of7jbkDzBtD1+Pa56gZVv9 bzyic+ULlrmsyxBpQgLMuPq0BKrRSHbWf0BLsBs6W8Eu1HwCuXMH X-Proofpoint-GUID: ZZf-6_uVp9djMqueE2ahYggJofbhToiq X-Authority-Analysis: v=2.4 cv=DPu/JSNb c=1 sm=1 tr=0 ts=6a96ace7 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=-Y819F9slc_s4kW3I9oA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-ORIG-GUID: ZZf-6_uVp9djMqueE2ahYggJofbhToiq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXxBpMkjpx/w3j mM2WV6YM8sw3lw9cTz9AKZW/UDIsqjcPBvfNH8STITBBNwd2VKQuSmRXmTT7XvPHq6qLdl2u435 6N63UFbuN7fINCV2FeKGrjljEwgJLiHBc4w/FF+eWxZQ37p6Iu/Xe1dLIlgRqC1/8PHL8L2GPRJ lxoovhe5Q1a0FAPILk9qYgBTMhzqfZ0pyjvypgCjT8Go6FS0yeo90a62WGS9vBBtZEZ25TOfM3P 75abE1HDeQAek4sgXszqI4FiRuypJTA9aDvVg+U2w3fdd1IBIeQntJMrAy/bLUfGe8XCb0opKa4 dvvs0py+fulE7zeg8FovMCyfC62Cow7CYxKmo9OhG3Gsltn8N3mWTTZxOh86rYRJN/napyRErpi Ds/hz6m45LFbKqQvUF93jkZGHycBv0caKdSeQkh+X4HabWAnowezPcIO5qQzwzy8qSPN6JLZ7Xj kTOwqFhzJW00KrjyEj7WjZ2OQXDsNl28WX8ONtgU= Content-Type: text/plain; charset="utf-8" From: John Garry Add mpath_bdev_getgeo() as a multipath block device .getgeo handler. Here we just redirect into the selected mpath_device disk fops->getgeo handler. Signed-off-by: John Garry --- lib/multipath.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index f1758d1e60a60..2017c4d0a210c 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -490,6 +490,26 @@ static int mpath_bdev_ioctl(struct block_device *bdev,= blk_mode_t mode, return err; } =20 +static int mpath_bdev_getgeo(struct gendisk *disk, struct hd_geometry *geo) +{ + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + int srcu_idx, ret =3D -EWOULDBLOCK; + struct mpath_device *mpath_device; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (mpath_device) { + if (mpath_device->disk->fops->getgeo) + ret =3D mpath_device->disk->fops->getgeo( + mpath_device->disk, geo); + else + ret =3D -ENOTTY; /* See blkdev_getgeo */ + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return ret; +} + const struct block_device_operations mpath_ops =3D { .owner =3D THIS_MODULE, .open =3D mpath_bdev_open, @@ -501,6 +521,7 @@ const struct block_device_operations mpath_ops =3D { * avoid their custom compat_ioctl implementation. */ .compat_ioctl =3D blkdev_compat_ptr_ioctl, + .getgeo =3D mpath_bdev_getgeo, }; EXPORT_SYMBOL_GPL(mpath_ops); =20 --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E0FF47CA73; Tue, 1 Sep 2026 10:46: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=1788259584; cv=fail; b=WqDGVvltKQPsXx8teLrN9a7CLjvyGoe/6ly3KoR2NkeCcFjxFCpgJbdf8+perSTBxNSxczj2lVgLiT86iNrlYHqaGD+sFOBr7B/KvbqU11IZ/Bm1Fc0pZXU/35YgrgStudjtdazYnqw5aoDjIyNlMDrmNUCNxelpPCDJoES4G8o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259584; c=relaxed/simple; bh=2eGB+ecwkSOzDYeR/zeIA7kq/x+xI5dKU+EcUkjinIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=m7s1GrkmlgU38jlWnS6pn48dH2UXdkTvZX1pJSWgXo4Up6qiSzv4d7u06TutbrEh8xyxDExNJT/2mISeGGVkxTwjxpUIk4JGMr5acMKtM8SRRKMEtT+EO5TqtAOfXHCei2ws+bshkBOLHLxGcwQ6erSl73ydRujNhky8UWBQ/YA= 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=RVqLmb/C; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=XSj64fVD; 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="RVqLmb/C"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="XSj64fVD" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBpPT2679686; Tue, 1 Sep 2026 10:46:00 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=+mzc3eVpKgFgeGTJnW1lOXHmi7F94fiKvs//K+VETaM=; b= RVqLmb/CJYQooc1lqntZu7KW7nWqcr6lhMfvrC4QVdIWUvXuMSxCfPDy37aOjQuk ya+zvht9NQeUrkvXCNFruvpoGfYIXa583RAxx4H1Sa+q7mg4L31ZVKdJNYtT9VrD VnAIB1HEkFXP+Z5ZyAtkiOJsTsobjTLq+bS8d/6wLUVxigqjTO08YJaF02ITaAJg a7WALnuxm0VpdJSCYRRdTKGOcp/VDWCOJMclTbxw8Ma0mcMHEAiaiIjS5uiZGIgg /93OHOtvajBdBOS387ZBb9IklPK2aTwt9aStmhTF3EnMKAnt798CLu73KYq4OAwq YXpeHgwalYsbXR2xxhrjaw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqa7mby4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:45:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA2036488; Tue, 1 Sep 2026 10:45:58 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:58 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YEq8qBP+Ua6IJFzHZk5hxHKFjEMRXtQaEhILUdLMdZm28nQNYfrrCrD1Fy3utHOkB2MNFyPQCQg6Cy/HTxTDUuHzzhNLmAIYpeDp7by0Yf4dU97uU0pUQwVCG6CUihJaWVE2mzRrinwuf5EJ9eB0zcB7l93GD2yDy4c05L2yhApoIbLpZ/Ew+f+ozidq56Lcj5aNhuUysvxHzVWn43gAS+iJhPKF3yBRo1AhYnKZGfgAIjqXRgjO+SWrfUr5d45zrOucMaSt5jvZ51KScL2TxFWaLIV2Rz70AHXEgKTmrFsUqfoHznPXVi31Uj06xA0vveWsg+vPeOqLTAJ95I1WNw== 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=+mzc3eVpKgFgeGTJnW1lOXHmi7F94fiKvs//K+VETaM=; b=orPDYaWprAp+Lws5JvSVl+ySoGtVC5ug15G9N90FdkhpWyUxTJ5zyq+M38MMMxclT9o9lt2UJFImbkq9F/0Swat1f/Et0FsnqcF3kBzAT9pMksj2y64/+PFh/+linVJLSkTRRSXfysHNTCDNiZOoeykM1b7YLt3NFz2V1sq5La/YOf1LArhdiKSaYJEONpM8nXFH5zVWL+9t/UXuBUIubUbaCwPw1kMbLaEXYh0UtPsL4JNNL8i9EMCr4B7OtZVsbZSi0MtH6iz0E1GhQx4tLTTvJA/GlicGZXgsN2iumTqlwwo+gLZ+Sm1NMkTDqwXy+KEFq6mm9SNgO5KgWn7Hiw== 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=+mzc3eVpKgFgeGTJnW1lOXHmi7F94fiKvs//K+VETaM=; b=XSj64fVDTnhH/dDRviwmfdRcu6s1m2NAtRLQ7HpgCNS1jmZcb3WejM4bE/m8UBd3wlMzBv2vcXyfffyJyLRNJB5cdId44ZmKOswHcvl/hI6QmBSiXn/37aEfXV1lR96bvcrRy6X+0HNntCnuGmMQ//cdZV4xqVqPS+mMpypyJw8= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:55 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:54 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 10/27] libmultipath: Add mpath_bdev_get_unique_id() Date: Tue, 1 Sep 2026 10:45:09 +0000 Message-ID: <20260901104526.3850621-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH0P221CA0007.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11c::23) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 5de88144-2c04-4692-f784-08df081631f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: PoLyUXZY3ti1KFTUNc+008yPlL7SZr2UmLMi08Dx6oncLpugfplZV7FvAE/Ssi5uxltNPYnorbrrqB8xKTvVPZtV04lMu+peyRNXWE7dbblbqZ3NFss2ANRcqBasTarJNCx/WGF2yKad0Xy4D3oOnKDlki68ZM62OJKlxGc26LR8VkF7JUOIl3mdDHPtXG1VcJSIvJIqpHRJhCYg5yf39+Ey1CZOMgYplWIDvUDNRbceaAMa2k/LJWZkU49xx1OrK+Y1/PwzRSR3cB+o8QLuyN+IBl6dDzu3Ig8TSvWI805DN1pF3jHcGROvEPKT3qNANPzEzkv4dfgNrzJYQ3ebAwHwABCitoqWVybIK4vX3lYtvbTbFfnFQnVx3szzd52OaOyGPdJ1YhCIsMbYk709GOSOtR5Pic1wN8RIbpcBy+X2KVDw4hqAqYPn+wWGRy5XwiEbyQybuT2J6sU2ADpINnoj1CSCY7QbZiJxLUf8tFzyXI+x5J10Re++Oo1pmaIaRSgSzOObd8eWYX8IXwlH5g3lHHo3V4Png9SbSmep8npSn5R+7dRJ1MV4KsafF7zIsRufK2IPxNZk9IWAn2xv/uILbbRTteaShUF2sFbq7wfMopJH4or+tbor/Y/wMkMFDW7mtLasbclg+ZvnFzXpTLyMDrwdvJWhVJg0pMqr+WU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?U4rMq6lqjaEX+0J/MwhyTWqMrUWoXLd9POr2lenEmM9LeB6VNr3vUXODaFdC?= =?us-ascii?Q?ik8MrFYWkcK0GdlzeJm5UK3kcChTCn5WchiobhKQ7Cp0uwwqxcYF/qWdWUc3?= =?us-ascii?Q?b+IBjjzh5uc8tx8Lc2Sy6F+ZjH6bHEHzefTqQuLheRWrlq1jsZe9hA72N5y3?= =?us-ascii?Q?xoUNSn+X2tXlkzr1CX/g+fne1efHKRnn98wGmq99AQOXlUgYyxkkSRamHt5f?= =?us-ascii?Q?FxO/KsobSCw/8YmzY5oRDvNsVREXDp6CDohE6DD3hZd5vW3gzrOynZBmW6hp?= =?us-ascii?Q?llwn8KcBCnHFkWVVqOsfyVIPEb8VCjszsx6VEjfK9hDTN7J3s1v+R3Id+ADK?= =?us-ascii?Q?4cmOCoVbRavvoM+veH+t5Bh6Y67NXu/fxYYcMQh2VMlTGmk3bwJDcU2BNwEw?= =?us-ascii?Q?yeR3Ph/Y/VbsmlBm6qRw+t22j2M/zg/G6oIEZD7fVTKuwILnvjWQ6UZGE9Hv?= =?us-ascii?Q?nikgeFzn7hLanGX7QpEphA6bPbnp67ItFTDQTVa49bwpQYcaHuzsrlG55yHx?= =?us-ascii?Q?9JW0e9+4OTg09Sib9VlsWE60t8LN9Ea0O+MjDN9tOpisNxLCThjMYpQfV5Ho?= =?us-ascii?Q?BSfydEjOpVn2DcjEztYMS991V6iKS68wbEA3aXoa9funp6M7BaMaAhRGSfWp?= =?us-ascii?Q?biudMntS3Z3xUwKrGoDhYZA7+oH9CL/Gj1qxSUQg6fQHnkRlSzJTIG52eOG4?= =?us-ascii?Q?cVBnntaieWkRNg4URdhOsUjMKT71DVB1N554lM0dSdsp6K6FB5n2lEi1ST6l?= =?us-ascii?Q?kGegAzS1zi5AVmJOokjrWQz6FSq1Ljixa4L41Q6PwH8GIqbUpoIC4xnxrcav?= =?us-ascii?Q?/7AMuA+8cxDDa8EbaCkgKPlxM2QAwTh/Y8/+NxWO13PHjO+ZLFYPV1bu0aeo?= =?us-ascii?Q?Ss5oqBqGNa9KTMTVEGeQl7SYt3aUbQ7X9id+yQ/O3xb6PkivAEiPQEJ+fpwP?= =?us-ascii?Q?lQT5zUGr/0TETk19uBGM0XJq0WeShNZ0D7I0JPp1EvND8OdmaPvuD/NIbx3p?= =?us-ascii?Q?EyxHUZmbeav91x+Gasf5ny1FRJsCWKjccZWLWr/z6MGPNJV9a7vlQ4DMkEOJ?= =?us-ascii?Q?L8/XcunWqrPmrmqXGlYwuWyVDVLtBrk2GvMQUg3h3IbY3+ABuPDkUEmQ9B7K?= =?us-ascii?Q?CkDmMxbGjTI3M5fuTi0IdAWl+PJkNKGkG2ZkKe10U0A/xlWZTUF0NwcxzNR9?= =?us-ascii?Q?wpgQVaEYlWgCQu5DEuWxLlczXr9WrYwGsNY6m+UmJnEhtVFdXazojnhr0JLO?= =?us-ascii?Q?fa7tsk0wxj9RJbTpHDipRMII7W2gebM/8CXDhRl2QP/R29qo7L6JgR0KMGOS?= =?us-ascii?Q?znZ3SJazFd6gGFoZmM9yINjkIjyrTVjZKwUVahNpj1eivOdsSmWHG+OKYNcE?= =?us-ascii?Q?A9Aw8cDNZsBjUWuAR7YBspItrbV0he8NyAd6vei9r/KXHkbI1Ke73bTm74jF?= =?us-ascii?Q?FKzuLUIzPAIzGY/N1e3Dhw6hou+VLsNFqxa5ynxiWC7MYKTM9HWGwjgXoffR?= =?us-ascii?Q?096e1YVyRFQJ4b9gdVcbU3lmzNYIhVlfJiJY+7kJUtA5uTf904ncFXmos/1y?= =?us-ascii?Q?gbBzEXsERrY9sPDDDPs8dG5zwTKv9SBsMPlx5s15pi1jJwf5aM3FzdcN1Sxj?= =?us-ascii?Q?QvGoaEofZxP5r/Ztt6ti44Y3j4WDhQd9qyrBakMKCPCbRz6+88euqZvZaEfY?= =?us-ascii?Q?H3cpNU3hxH3L5gF2yZFZ7G5+S9iGEOcfM8aC4C7Kch80DUa1r9chIHoKapgZ?= =?us-ascii?Q?OFelIB/cyA=3D=3D?= X-Exchange-RoutingPolicyChecked: wrWqACtLD4oJPHR1b1+AWNXO6+U63wuwjiGge7THL9jOxSdW4S9faoHKThT/WDjg+8FXkxmPZ/DRviR1tUSY0zsGSl7h2Hnjo50Oq56lUfon3mk9RI8/UQTdUKNOyTkQYwbXUhiaVbas6hV2UMLuA/1vTBkqsBD0LGYa7RxCikl4dM31pXIq++DHv+OcA4WDh2BtAhr/VuvVBhX29dLisDwtxyzXAV5OIqH3/0ZHVq9QBwFtBfr4V7h9Sy7uTgkXkuh0Za9cqxl1HddzAiL4tMQOUCo0sWQrjBbT9IOmgdnO2VsXWsLwHq0F7tdvakcEUFmw0oTB2zjzgtfJI+fbew== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RKrJXP9wC81k2S8XxAoK7cgfdYTxCURuUJ5A/iUdvS2JXhxQrOBe58+3X4e3El+vdxCAeIaNU5UHzkegecUnYNRGWIJDf8kA8rTSbEdgvG8BwN8+umPzfs/o1Il6CepYZEeCs57u2crMKosPsSIHpqhVu0w45ebKWnVGC7TkaE624znqN843eNy2zIlcUpYEM4unGKKQGE3ZzJbSsqEca+DLzVHJJiKnLM16XM3i3SJ5vcHtbPueZ3d9KnzXZGdf0RdA2gXa8+7eq53EVo1Fh6g3P/3zopeSDoszxzbkWOhgAIpve9JEHVPUX9Y0u8LeCNt3J1/eKZjjYMAEPFuJwJA2VdakH4U/QLXI0uAlg6GXGJebuq/aXD8RAlF9yh/2OiUJuPhCwaPqC+2GKzkFX6ISJM+/i5mnIa4QFlsqs38tMWRBWES/XqHSoHhmWtpHHoK58SI6RN81PRtX62yIwHMtwdxYdx+v8Wc5RlEP7kIMlyHjyBm9DeARPwgew0X+6UT2CxQgnxs2RD2Q52HRmLEzszy1Rd4iXvq7swXVcsXwEONJXJYVRzURMeVQqYI6TpqmxtYFUV0gj1fKUV+6tohqmo5b1s0eYNlTspQ19go= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5de88144-2c04-4692-f784-08df081631f7 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:53.2169 (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: W7kyF8zHkbYRgpgdPDuNimuNdzQO5DcMa11EVzFTf5qAO/YUNGzj7qZyLO6TacKXV1OVhrnokzl3+UY5ws3PDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX4nkvL10awG6T 3MNIuv0BmwDUsgoXsKxZq++T5a3rMa0LBZFdqv5k/1qMkQO+A7QFCLLTM/FU1GEUn1BbFyL4ylo RzoQtPZ3N11uOG8kCHyP37sLmGOg7nXA8k6YA7z8em9diKxN2CRP X-Proofpoint-GUID: fCC2svWboFIZEKjbhAjS1VUU_XiThnry X-Authority-Analysis: v=2.4 cv=DPu/JSNb c=1 sm=1 tr=0 ts=6a96ace8 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=wdrd9TenfaMKdVnI-z4A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-ORIG-GUID: fCC2svWboFIZEKjbhAjS1VUU_XiThnry X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX6ZBfe50C+NFj Y8t9IOvdP9Zt9+Gehwj60Bo/wHSgTTNP7/qeWHZ8ri03wCLrUIFQ5206ZtItL45nKynSLBWWcF4 +0toNhk5JbOjCCSbiMZD8SSVmSCGDBAMPM5nBg0aRVb0/RaRrEqv50wqA5trkdXBUBrSYVRtIFM lGbx4Gcy51sTKRYDc2YCw5AwSn4Bp33Fz+zja6cwlFpmBCQzCdTnhS6G7DUF4ZClcO7BB3Pijfp 344uHvjuTUAFVEi03dHmXOFGgFEWbz4Md/6VbX4xz2ZpoI++pIHE///xqIKXWOzaSDUl/upRPIk u86fQ3/87spTUPDm36ITaoOpIq4ZUmN+iwvp5Kqn4EOYrLLqZqxOmzdzCd75yQ5G/I0zf3FxHja UFt8Gz6FFtByuIaj7agq1ipCGcEJD5+mIarlLh0OogAnigpmNQYaqhDBIzPZ/xDS6R21V2xihDB pQg1CWlmMGCwnQOpCQKtVghmAz/wm8cPuOycuSQg= Content-Type: text/plain; charset="utf-8" From: John Garry Add mpath_bdev_get_unique_id() as a multipath block device .get_unique_id handler. Signed-off-by: John Garry --- lib/multipath.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/multipath.c b/lib/multipath.c index 2017c4d0a210c..66b3338cf8389 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -454,6 +454,27 @@ static void mpath_bdev_release(struct gendisk *disk) mpath_put_head(mpath_head); } =20 +static int mpath_bdev_get_unique_id(struct gendisk *disk, u8 id[16], + enum blk_unique_id type) +{ + struct mpath_head *mpath_head =3D mpath_gendisk_to_head(disk); + int srcu_idx, ret =3D -EWOULDBLOCK; + struct mpath_device *mpath_device; + + srcu_idx =3D srcu_read_lock(&mpath_head->srcu); + mpath_device =3D mpath_find_path(mpath_head); + if (mpath_device) { + if (mpath_device->disk->fops->get_unique_id) + ret =3D mpath_device->disk->fops->get_unique_id( + mpath_device->disk, id, type); + else + ret =3D 0; /* referencing __dm_get_unique_id() */ + } + srcu_read_unlock(&mpath_head->srcu, srcu_idx); + + return ret; +} + static int mpath_bdev_ioctl(struct block_device *bdev, blk_mode_t mode, unsigned int cmd, unsigned long arg) { @@ -521,6 +542,7 @@ const struct block_device_operations mpath_ops =3D { * avoid their custom compat_ioctl implementation. */ .compat_ioctl =3D blkdev_compat_ptr_ioctl, + .get_unique_id =3D mpath_bdev_get_unique_id, .getgeo =3D mpath_bdev_getgeo, }; EXPORT_SYMBOL_GPL(mpath_ops); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA7EC47CA8A; Tue, 1 Sep 2026 10:47:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259649; cv=fail; b=jywlR39NRC6uN+1HsUIeYPjbEAGZBgvWz6yLzOuUEshGRr64DsjtQ6x1rNp1g4WP8Ibp0/Ws2p+bxmIBFRaEkmSS7qQRVWoT7/5zNQAqxV+6VEf7SAihd9TwM2eO7RShzU54X896vLL29kMmdgqNhVT/eEoepnSx9DnRUqeyegs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259649; c=relaxed/simple; bh=WU0EdO55SYm/nbtdmFlnUJLaUl0LHFsoVGWObJCl5nM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OVBaNv+Dt7XwyxaQxOtRyx3SU53yOt31K/ZkNnl1TsKlBFVeHaIUsC27w1JaMQslrIslRkfcvGAb/HXxX/HFM9QIbisc52o9JDjks2VoISkvC/9MfQUxC+ByOPiNfIskm0ryfjF3vU+aVzOrgQziibNiG5k5y7rR0mY0OZzd4qs= 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=eDFBoUQO; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=zOpekeM5; 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="eDFBoUQO"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="zOpekeM5" 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 67VLBqIi2846757; Tue, 1 Sep 2026 10:46:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=azn+b9aBXAX8T49esRi6V/bVlyG/wP5b9312KuBJErQ=; b= eDFBoUQOoAqO/D5vUyxQS6ilgnlv2EmTfhLpAGUBJhhTMu3TcPi/D15ezl1arCJZ hXFQakt4epRoQBwq/8hpW1Dv7O/vFdQU0ufW7zEJeTMK4kMx7GZ1OBqMUvr5zgaz y/l8SXpVcSiqSvLQvdHpWEv/eZ4e4sJlKSU0i76BMJhQOylr3y2hcNQOGcmrWIuN 8LUVNjpkiySt/K5zfGpv4dXdu52eT6z1LQnZavCZngZsM8ehJ7DhuG7E6wxLQEhA wyGMo6APFmlYuvbX/d/R7bdF3h66V4lSIbBtk6RoarWF91kJVEAaPCfSu+ucO49O yDhLfVd7v0UEZuN9Fv8mmA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbaveh1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:01 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA6036488; Tue, 1 Sep 2026 10:46:00 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:45:59 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=n+ypCNAGCLFrjKcUd+frgyTuiSEFRbukhWgmco4IlE3NAmjZKYLoSf/6SAW2Aj6u7fnQGC8hulbS+iusLacdtLya/1AhgffnqPfd8l3huPvFJ36JUnRfyr09AIij3jJbjyX1jdlfVv4YKjnfsdiwbzxaKbNqWm8O40UvexpX/F2u/xh9dOvX/+kMmHevLI35R/ep/RdeCJmUPkFTox45S55zq+oC357r6Jnxxb0CRa1ZXBuIZPAcnnVcG2J4B32J67XYOTkH4dZ3fCDJuGQabB6nlUH2ahKfR6rHa/GVk6L+8nxDxhsC4BWznhyfkTLwZQxdyxIo62ytDieUnSr6tQ== 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=azn+b9aBXAX8T49esRi6V/bVlyG/wP5b9312KuBJErQ=; b=cqqe2ezUgWV9R+KMdnvEeROOfLTOfAgxEesN8oBRrl3t9s8EQG0xIut/sLPQuXfmIQ4e9gQZ+fYWDk9u5EPpepK5JnQLIvTMAVLeqw9J+YK5jgVsJCfRJRMjKrBAV8BjS9IE0DlHZSsvEqsk5tRHv6/72/THglhAv6SnW1g7VKZlwwiGRZQWsBgPlCDfDzrd4LFR0T5jRe8H3p39zZkYUof88V6ZL706PaOQRV/hEzhvv/WkjQgoTDiPbVuJPoluJt9Z8/FesX7jJKcCj+F+oC/eqglXT5Wi2p8JDAaof0VzvvGXMuWVFdQgKgCJNgeV+sawxxGDBWrTLG9C41F/CQ== 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=azn+b9aBXAX8T49esRi6V/bVlyG/wP5b9312KuBJErQ=; b=zOpekeM54W1BUFbmZc7HHo8dbF/y83bWeb74eb4tYJGKeD75isc/89BUPjxCmyNCvbeNIVXA2Somhhy+FIm8ZdW/hSfFGZGHur3HVxaOf45+LpypKqqTf5sL1n9rTg60XdhLeTZZIvbgdgzNuv8frP7ISAHAcZMIUq9xum4kkLY= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:55 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:55 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 11/27] scsi-multipath: introduce basic SCSI device support Date: Tue, 1 Sep 2026 10:45:10 +0000 Message-ID: <20260901104526.3850621-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR19CA0023.namprd19.prod.outlook.com (2603:10b6:610:4d::33) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: 1fa0bda4-064d-4285-3103-08df081632ac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: pCpy3oHCicoc8GTX+8woQwlp9aOlKpbi3Hm81AcmAxL9kZTxTZMeyLbOwEwpA1IpgAL8RUq+7A8yRa794sAqZPoUDQeMFOL/dtACiHfjQaJ7kratOctlu03b8BpXtT2UMXMfoRfAV4UzicSWlO6XMMq295brYajunsrW9Iz0cTb7E1wu5wnjTtU+XrE2BpA85wBxFSMh9wSfPNs9NULCUm9SrfnbrM80f4+SktT3C+/EFRtJJBEx9w5viJ5pTmwepf778p5V6CYxK7gZElIfl7h27LJjvukDPbOHzcy0BLRSz+u8iQ/vPrt3TC/D7ZJfQKpmJlSCsK/JEPBRFkVjAKSxofkou05RRG0kikVn5Va1VKNt2Pbk9NVSTBStfhnqCtShPA2V4FymHaPg+oaVgPYOoalESzyPA3h4SkgGQjhOq2sDJQG7hPXh6u7jdBVNJX2kj097LREBj90+NdKCBAACmcg22nrM5K4T7LQTFEdu6h4LAU9Nr759XIc22+z635rRX4yq0jxscl6JlG7on8TdhFbNmuK+UE8C8uFINf8a9AEQ8GE7ccc/3U9DMD6O6SNIivvvYqvR+d8HbKcaqEgDm+INFj5rR6wrv+ygjgVdI2eJX3QyIV4uAcKrVdTmTilbpqcsA0AxsLyenEBKljg7EN+mUrCaRr9QH9rYS+0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dI01mKI0TyMs84bPUg0iPjGdroW5477D99WGe6Te6JGs9+nC4W+p9fed851Q?= =?us-ascii?Q?xdFA6flF1I+jw2WUGdj5UD9GY8f+/ksOtwzuMlFqumDVis7yGSxGitNKg5pJ?= =?us-ascii?Q?DbKgTfRexWDuywG5E1GxNkhslm4x2PjdZEAE9BzJk5DctsnYeVqgrZJKTMs1?= =?us-ascii?Q?rfXIv6nXlpJ4sTaLY27KGMZ303/Xz3B7pfYXv5+MhJc98mo+1Y01uzwjnlN8?= =?us-ascii?Q?34iiptd/XVc1RxLFS27SCOcMiQSkedqh3J3/7mG9ZIjvbl6GZ1azC0/lhUFw?= =?us-ascii?Q?PuYIvyTmA6Tonu2etvAsbjLskbuM881ZI1OGIkkjQmCHBNdqwOJEgyQdwiiM?= =?us-ascii?Q?51ZoQfADh5Im8xAfq7lQQgyw7nzICXhrJcYa2NrZqodwae0Ymw3Tx2rlTu1v?= =?us-ascii?Q?vPCGUq77XTK0GfLfVNBVS2VCiT1XgU+BJ0mR17lfMYe6GsnqiiQgegsrlX+e?= =?us-ascii?Q?Q1+cOZNbfC/xYzYseOq3lxLdSmr0kVHwMUXLjsqYr+CTpb6oeQ5iztpWxaGZ?= =?us-ascii?Q?c8EEQdEZT13KtpbXkJc8JC+Cupj6UoIoaC7KrgBs4MWTEN1UO7LShZa2Ozf8?= =?us-ascii?Q?OgdCaABkLacgVmXeM2M1uu1kj+pV8iu/1lQFPtLp8eQNmdnCrX3/YoawVOLf?= =?us-ascii?Q?5ba685oh2+uzBAHpoCAuLPbdeiu7tFEc1xYJbI6u46LhcWwVGgBfYMVUyiPP?= =?us-ascii?Q?H/ogveKT/TYX55sGPs9Qfjko7d6e+qV49cQL9JIBRgIRedyDs54pfuEziawO?= =?us-ascii?Q?ZWEAYVEorXiO83rBBA69Xrmb8JaWxnouaLi2cCO85BST629C7q8DlGeKdOPw?= =?us-ascii?Q?c8V2KOxyaGNnfq0CjsVraaWrXcB3SNcVsroNAwYXkxHVnMC+9qNhs4iEbqYu?= =?us-ascii?Q?QpJVl9cUxpKYlnkr27tJ+nXp0uZAX2cIckYp96lJdqK49oDAZ9VtoHPa/+AD?= =?us-ascii?Q?zQMULy6xIDohJPl7cN60t+Ds+FN3p8cJrOFVPFsmxpIkg0cJYAv6g0LlqvBl?= =?us-ascii?Q?PjLDjG6ThvLYPGLc1RvVAUM9poncKPSsWv78Ge6u12UVBfk2bfG7K31pHVcE?= =?us-ascii?Q?7wS5116I4Wcmt55iJogue5ppomu0qP1GrE6q9H9JMIDUthWL9Kmx0mxLfRmC?= =?us-ascii?Q?hCQc8rqJ83RfnKCWInRcfj1uyJbgKHzM7t/sG3Pb2NDQqXu+tIZAZWFe3YAp?= =?us-ascii?Q?VECPZ05VioM/SbhlVo/iP7UQmoE4fI/pSXz/g8ebjMSKUTKdnXza3pyE5rPN?= =?us-ascii?Q?mKFVV7Bdx/TSQhwCsDiaLUSExgmLS6vQFfD4h9DFs7qQ9kXyvsmPbvGhQnVS?= =?us-ascii?Q?vaZ8HvQipHtOkX2d5UQ8arrzfyM7+RPBhlHGBTcfFDPn/GCiaKzKi3XkKpUW?= =?us-ascii?Q?EdGo7oNNvQJG0TLyXVcwAUijYqG7mhQw9pXIIKtCrQbxLJZEXUnmvLercbIm?= =?us-ascii?Q?vuDO/FGvlxFkYUQ7S1F/Fsn/i74yIIT3oQGpdJtpXyvFxaMeFZMjdAa/92nU?= =?us-ascii?Q?Y8KGkwM/aY+9y6+WWzs2uct2F7hR+MFNbW8bHjB1pvXxAxZJsh1jp8MEAeQd?= =?us-ascii?Q?XWAR3jmJSfmt/0TcIIEbiyLqdtt9EB5HKceZDCDRgRfQzx5KqCFhEbtRnJOa?= =?us-ascii?Q?C/Ru3R5B3A9RxVwh2OYhug2y3mWZLDNf04teB2PpjZDfzZXcwgfNBNcWYHvV?= =?us-ascii?Q?NijxLrcyO8riGwzbUxXldzAbcAlFZTC94MqAzbnkAmF1GqYjlxXNkCQYGuN5?= =?us-ascii?Q?gEWl7Skvsg=3D=3D?= X-Exchange-RoutingPolicyChecked: tWBxwuPongvsa9TuPwNj/GjyFQpuPWEyHbtKe+Xu4j7pVWAUW7PzCFDjOyHr1IzkP0CqXJB93i9k7aMH3j1X/PPwei4hpOcKqKdL7TkUngi/CmPeNEua/0DCt8eSmlL9wR8zbexICl/zFZAXbP0a8DHEsXeJuUqqPYI2is+SAD4LwqzGwzacLkcRtdVedTY3BgATx1m2kOdh1TaCtlL/sBa02CWrlX90o2wEpSLVUmFPxxqdeKeQwfp9ugdXiW9uDq3DInIRYmh8fE5QNza+i+gfKwbK39nq2Cug1j+U0xNY6FVImXcGhsKfFcouoyneKYWU2ECN381qIXjxD70wDA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lO3SuWl9bPUYXHh7el5pFZ/QcjUgJIpZk07RQZFHOggkjSOsrdDc/49W9u3iq6yYgRx58WPXDY+LAP6z9Pym3e+3MW2gl0Oe7yI9aPBeySR94ML6eXJYijfQJKJGc3Udq53HizTnKWZvojC4pRqutF4UDC+hnaHTNBIrOhZ/xGL4vS70o2uKo+fbrfVLC+uYmD88Fazw9xpqUEzmAb1FPLXSDfj0oFQdIN/eBixBMEcB+QbKB3rTChgGNOQ2xF9pS1EzP5yDl32dBDCU/1E5q28E4Pbay3rYup1iahVl3ASRt94K49yTPiUrhKEePhTKh8+8okvPmU3tes3sTubqauzoI0gKv8PvAQrLzvSomD/F8qT8lqcZYIDeY2VrM4pKeZk7E2w3yYZZI3hqyA1Bvw5Z/wLDMxSE8ocD328VB0PpQYucVQke0+xaoOxQT7stINk3PCGlpM2+4lqLwBs9iHqBhgvUJhvO2PmeIFAgHq+V19BrS+MojlPtuWfuvvAiqAueyERqHr/LAsHZSIhnSdoTi0crvL4r5tgabDckooIb61oAbYo43Zfz3+gAGWnfLl4/vi/aLPZGwbj2jU1rmX6DzSb5brLqGZvl2DhkBVY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fa0bda4-064d-4285-3103-08df081632ac X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:54.3884 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jVLxShbZADZIANZdynyiVzMr6VULbhvhtsbZTyKmGtk42HKqXzLmLWhcC4jO3GARH6+DmLsQpyFxzGKLux29ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX5j+SSd4Xls/F 4kY9ldtvWOLHQP9+tAqmDrT7IJb2Kwb8MKWjyA9WhutwVezupnKkvDWhvBw5FIVHTz/of9EBgld axTvL3vCc2iWhmGsg/cLeCoLhK6LTpk0xJW94BkoCUiUaUtoQSyg X-Proofpoint-ORIG-GUID: w4AtMmC-gbNQEDg17BajHe5Z9BI2-i0y X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXz8iqRlZ2He3u 1W/Mql43FrwHmEgglrjGPOhBKoznOFpNiEcKUM5YD72JxdTdTbzvCuATIPJ+NBGDnF3vEwKseHP AeMG9xVfWWXWoyyVVoFcU33Eza74Ys2lbFXaZ9qz3vNi2kM3Y1Vy5f70WMAPc51PnvhakR6ZBVa ijJOOiZlPXHG9vwT8b8y7zpQ2gEYKtcv8tDlbqZoJo2pzxU4NHXbOnvw+OExJ3J2ONlaLJLAyAu omhG499NhctdpT1JXlxYbSUI6hPynvvKhg2jVkERBDi+mSmEVIFKIYtR2dLYqHx9xGm9FTTskAs t0bEKjqwqFmg0lKdvfoiR9f1NtlAt6RsEatNj1Nd/8nfpcHGewRzS0jtr1tgLGXM7yyBxH4RpzT JWywdgJhLZebMEXxSrgNa2MwwhqlZzFjOhpBBvYTDXojjg3asIuyfgzb0Es+2AG90A2uJgsu7UJ RKGa0ZDdEXrjDFQflBDIlvBCoBndgs4OiuU+yfh4= X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96ace9 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=pCOl5fTshOrEa-n2-VQA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: w4AtMmC-gbNQEDg17BajHe5Z9BI2-i0y Content-Type: text/plain; charset="utf-8" From: John Garry For a scsi_device to support multipath, introduce structure scsi_mpath_device to hold multipath-specific details. Like NS structure for NVME, scsi_mpath_device holds the mpath_device structure to device management and path selection. A module param are introduced to enable multipath - the following modes are available: - on - off - always SCSI multipath will only be available until the following conditions: - scsi_multipath enabled and implicit ALUA supported and unique ID available in VPD page 83. - scsi_multipath always mode and unique ID available in VPD page 83 The scsi_device structure contains a pointer to scsi_mpath_device; having this pointer set or unset indicates whether multipath is enabled or disabled for the scsi_device. Signed-off-by: John Garry --- drivers/scsi/Kconfig | 10 +++ drivers/scsi/Makefile | 1 + drivers/scsi/scsi.c | 8 +- drivers/scsi/scsi_multipath.c | 148 ++++++++++++++++++++++++++++++++++ drivers/scsi/scsi_scan.c | 4 + drivers/scsi/scsi_sysfs.c | 2 + include/scsi/scsi_device.h | 2 + include/scsi/scsi_multipath.h | 55 +++++++++++++ 8 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 drivers/scsi/scsi_multipath.c create mode 100644 include/scsi/scsi_multipath.h diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 4a2af0f702e1b..ffb7d12664b09 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig @@ -76,6 +76,16 @@ config SCSI_LIB_KUNIT_TEST =20 If unsure say N. =20 +config SCSI_MULTIPATH + bool "SCSI multipath support (EXPERIMENTAL)" + depends on SCSI_MOD + select LIBMULTIPATH + help + This option enables support for native SCSI multipath support for + SCSI host. + + If unsure say N. + comment "SCSI support type (disk, tape, CD-ROM)" depends on SCSI =20 diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile index 533623382eca4..8bf4e548b395e 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile @@ -192,6 +192,7 @@ scsi_mod-y +=3D scsi_trace.o scsi_logging.o scsi_mod-$(CONFIG_PM) +=3D scsi_pm.o scsi_mod-$(CONFIG_SCSI_DH) +=3D scsi_dh.o scsi_mod-$(CONFIG_BLK_DEV_BSG) +=3D scsi_bsg.o +scsi_mod-$(CONFIG_SCSI_MULTIPATH) +=3D scsi_multipath.o =20 hv_storvsc-y :=3D storvsc_drv.o =20 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 76cdad063f7bc..70aa1dbeacebf 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -64,6 +64,7 @@ #include #include #include +#include #include =20 #include "scsi_priv.h" @@ -1042,12 +1043,16 @@ static int __init init_scsi(void) error =3D scsi_sysfs_register(); if (error) goto cleanup_sysctl; + error =3D scsi_multipath_init(); + if (error) + goto cleanup_sysfs; =20 scsi_netlink_init(); =20 printk(KERN_NOTICE "SCSI subsystem initialized\n"); return 0; - +cleanup_sysfs: + scsi_sysfs_unregister(); cleanup_sysctl: scsi_exit_sysctl(); cleanup_hosts: @@ -1066,6 +1071,7 @@ static int __init init_scsi(void) static void __exit exit_scsi(void) { scsi_netlink_exit(); + scsi_multipath_exit(); scsi_sysfs_unregister(); scsi_exit_sysctl(); scsi_exit_hosts(); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c new file mode 100644 index 0000000000000..5559e2e8d64a8 --- /dev/null +++ b/drivers/scsi/scsi_multipath.c @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2026 Oracle Corp + * + */ + +#include +#include +#include +#include +#include +#include + +#include "scsi_priv.h" + +#define TPGS_MODE_IMPLICIT 0x1 + +enum { + SCSI_MULTIPATH_OFF, + SCSI_MULTIPATH_ON, + SCSI_MULTIPATH_ALWAYS, +}; + +static const char *scsi_multipath_modes[] =3D { + [SCSI_MULTIPATH_OFF] =3D "off", + [SCSI_MULTIPATH_ON] =3D "on", + [SCSI_MULTIPATH_ALWAYS] =3D "always", +}; + +static int scsi_multipath =3D SCSI_MULTIPATH_OFF; + +static int scsi_multipath_param_set(const char *val, const struct kernel_p= aram *kp) +{ + int mode; + + if (!val) + return -EINVAL; + mode =3D __sysfs_match_string(scsi_multipath_modes, + ARRAY_SIZE(scsi_multipath_modes), val); + + if (mode < 0) + return mode; + scsi_multipath =3D mode; + return 0; +} + +static int scsi_multipath_param_get(char *buf, const struct kernel_param *= kp) +{ + return sprintf(buf, "%s\n", scsi_multipath_modes[scsi_multipath]); +} + +static const struct kernel_param_ops multipath_param_ops =3D { + .set =3D scsi_multipath_param_set, + .get =3D scsi_multipath_param_get, +}; + +module_param_cb(multipath, &multipath_param_ops, &scsi_multipath, 0444); +MODULE_PARM_DESC(multipath, "turn on native multipath support, options: on= , off, always"); + +static int scsi_mpath_unique_lun_id(struct scsi_device *sdev) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + int ret; + + ret =3D scsi_vpd_lun_id(sdev, scsi_mpath_dev->device_id_str, + SCSI_MPATH_DEVICE_ID_LEN); + if (ret < 0) + return ret; + else if (ret =3D=3D 0) + return -EINVAL; + + return 0; +} + +static int scsi_multipath_sdev_init(struct scsi_device *sdev) +{ + struct Scsi_Host *shost =3D sdev->host; + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + + scsi_mpath_dev =3D kzalloc(sizeof(*scsi_mpath_dev), GFP_KERNEL); + if (!scsi_mpath_dev) + return -ENOMEM; + scsi_mpath_dev->sdev =3D sdev; + sdev->scsi_mpath_dev =3D scsi_mpath_dev; + + mpath_device =3D &scsi_mpath_dev->mpath_device; + mpath_device->numa_node =3D dev_to_node(shost->dma_dev); + mpath_device->access_state =3D MPATH_STATE_OPTIMIZED; + + return 0; +} + +static void scsi_multipath_sdev_uninit(struct scsi_device *sdev) +{ + kfree(sdev->scsi_mpath_dev); + sdev->scsi_mpath_dev =3D NULL; +} + +int scsi_mpath_dev_alloc(struct scsi_device *sdev) +{ + int ret; + + if (scsi_multipath =3D=3D SCSI_MULTIPATH_OFF) + return 0; + + if (!(scsi_device_tpgs(sdev) & TPGS_MODE_IMPLICIT) && + (scsi_multipath !=3D SCSI_MULTIPATH_ALWAYS)) { + sdev_printk(KERN_DEBUG, sdev, "IMPLICIT TPGS are required for multipath = support\n"); + return 0; + } + + ret =3D scsi_multipath_sdev_init(sdev); + if (ret) + return ret; + + ret =3D scsi_mpath_unique_lun_id(sdev); + if (ret < 0) + goto out_uninit; + + return 0; + +out_uninit: + scsi_multipath_sdev_uninit(sdev); + return 0; +} + +void scsi_mpath_dev_release(struct scsi_device *sdev) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + + if (!scsi_mpath_dev) + return; + + scsi_multipath_sdev_uninit(sdev); +} + +int __init scsi_multipath_init(void) +{ + return 0; +} + +void __exit scsi_multipath_exit(void) +{ +} + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("scsi_multipath"); diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 3b82e80e807a7..022932af79c65 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -46,6 +46,7 @@ #include #include #include +#include =20 #include "scsi_priv.h" #include "scsi_logging.h" @@ -1130,6 +1131,9 @@ static int scsi_add_lun(struct scsi_device *sdev, uns= igned char *inq_result, sdev->max_queue_depth =3D sdev->queue_depth; WARN_ON_ONCE(sdev->max_queue_depth > sdev->budget_map.depth); =20 + if (scsi_mpath_dev_alloc(sdev)) + return SCSI_SCAN_NO_RESPONSE; + /* * Ok, the device is now all set up, we can * register it and tell the rest of the kernel diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 9480432f650b7..d6a0c43a048a0 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include "scsi_priv.h" #include "scsi_logging.h" @@ -456,6 +457,7 @@ static void scsi_device_dev_release(struct device *dev) might_sleep(); =20 scsi_dh_release_device(sdev); + scsi_mpath_dev_release(sdev); =20 parent =3D sdev->sdev_gendev.parent; =20 diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 8694eeadd753e..1d1356a21c3a5 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -280,6 +280,8 @@ struct scsi_device { struct device sdev_gendev, sdev_dev; =20 + struct scsi_mpath_device *scsi_mpath_dev; + struct work_struct requeue_work; =20 struct scsi_device_handler *handler; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h new file mode 100644 index 0000000000000..d3d410dafd17a --- /dev/null +++ b/include/scsi/scsi_multipath.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _SCSI_SCSI_MULTIPATH_H +#define _SCSI_SCSI_MULTIPATH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_SCSI_MULTIPATH +#define SCSI_MPATH_DEVICE_ID_LEN 256 + +struct scsi_mpath_device { + struct mpath_device mpath_device; + struct scsi_device *sdev; + + char device_id_str[SCSI_MPATH_DEVICE_ID_LEN]; +}; +#define to_scsi_mpath_device(d) \ + container_of(d, struct scsi_mpath_device, mpath_device) + +int scsi_mpath_dev_alloc(struct scsi_device *sdev); +void scsi_mpath_dev_release(struct scsi_device *sdev); +int scsi_multipath_init(void); +void scsi_multipath_exit(void); +#else /* CONFIG_SCSI_MULTIPATH */ + +struct scsi_mpath_device { +}; + +static inline int scsi_mpath_dev_alloc(struct scsi_device *sdev) +{ + return 0; +} +static inline void scsi_mpath_dev_release(struct scsi_device *sdev) +{ +} +static inline int scsi_multipath_init(void) +{ + return 0; +} +static inline void scsi_multipath_exit(void) +{ +} +#endif /* CONFIG_SCSI_MULTIPATH */ +#endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D5913A6B7F; Tue, 1 Sep 2026 10:47:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259648; cv=fail; b=d+39b6Ili+8NpUj+HHHTmKg5TfZXN4jPI1MVya/wVRGwDcwr24SXJIJe5xxDt1lVmNajKklawMiXXG3Q+wjM9rI0Fe0oe27QemOCgIGqWd/KFr3YegEYfDRLEHV6rI249HlS3w0RqL/DF002VqHTnA8eJ7Jur+G13//+n8nt168= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259648; c=relaxed/simple; bh=MGGrufQaSGL2FwUkrQj798UD2jkmU9tA5Vzo3TQkJgk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=J+wT4h7n1v1nO568Cl+CUymuBI0xr03pUPrXiH0j/0vTGkHvSuF3IKBpb0tXAVeSfuvQfdM5r4NZnFquiBWDerlK2f1f/84k/3fL57HsIrifhSCYTxpcRj85E32RGmqKn/JOP1lLepDmxpIUkLOvjecJqhHMbjTkcSVxbrx50MQ= 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=QNa5C3RS; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=rZxAerAQ; 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="QNa5C3RS"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="rZxAerAQ" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBou82296182; Tue, 1 Sep 2026 10:46:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=rfdl0hAxhFN9NXSE9lI2c+/yAF7yG0Mi6W5owcq80Os=; b= QNa5C3RSBadwWRA5TVDtOA8586IzTSu0SM2EMtmJjyJxDaj5xamrREbQBZMY6y4n F4lSWBKP8D7ytKR/mzI+2bTuYB7X5tn9s7ex5A4JIGCY2syRm96NYqoeqYkqQzTl H6zXhcfQslumlbbkZgBHLS2vh7FrMEUjOd9RZ5sUOXQwSlp/73j2Xs+9XIpfyo55 sk1a04W7ZsWBoqItutsVooTQr2kf8VuKQl2/z08QXnx5oS9jri95qEy26OalC3Qd 363Wf2nRXb4dBhtnFAB0RZnTsYNyXIeJfrQhZt6MkYrjCiPrrM801c46lDljZRJy tqjPECRh7L7BJIEWGzrVNQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdas-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:01 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjYA7036488; Tue, 1 Sep 2026 10:46:00 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011050.outbound.protection.outlook.com [40.93.194.50]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqfk4k-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:00 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tFks1dEwziiEuqSz6YtCptmI1Y+oYaHCXz7Y7LJIAxgJo09uhrCvnu2Lxe4TgYXGtWKkc+X8Uu63aVxVi8MEj30zoorwiQV6mGBZ3p9Brw2SI6PSyFws+j4UJW8+ZGX8vzQliH7VoxX3VLfRZ1uFILQEMVF0sovSu66P1BNM1ceCUJt0Aytxg0imVHufqhyK8q1VIwGqKOoxMJ7EBPWRgQhlgYSVJyjoXRo7/yvIXewfzL+CTbn+tTj6iWeaEtyKHmNheWwV8TVc2E04GicNsBaHxbh+T08sSMhtad9VaHkPklA0wm9HPChBDo4+YH11ClWalTpYcdm8d2+qCZy4TA== 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=rfdl0hAxhFN9NXSE9lI2c+/yAF7yG0Mi6W5owcq80Os=; b=c4rEoYHqXmYlntOVX3o5EGiy0Z4tsTPVxlBbuEN9zQHazbILJFE0v5ChHzJkAMFPQ9Qq4b1r+rOPfGeLg9zRPpgxDsZtVboIy2Ww5IVwVFcnQGoMVLT+dNN3Cm6d6D3iQkxXDCDY/ioUZg7unGJiM2GthWMVsnO+pQ2LYA/FuxmJxRLWeA7X7LCIk/OeXxVpAGTJfb4nNx6MfaeKcob4VfM1aqT5Fhzfx29iOa3TV6RvCkK8UmOaXzROgp5441e7V92NuknaD+IjDpUdkyp8tYc0tjq//+4D/RRKYMrPlNAHJz70zTgU9jQhE03pHjSooF5tjREswmx+wIuxEAT4eg== 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=rfdl0hAxhFN9NXSE9lI2c+/yAF7yG0Mi6W5owcq80Os=; b=rZxAerAQVjQzm1Blpa7/PIDefc2n5eTw1KLn84pyjtDHjwWwz53TKtbqyLglbT5YIF5ydXoKTeLSrheI5XSecOqTDoWBqp9pW/oL03N8p5fl190GD0PE18IPfWjCFJ5HpV6obcwLUAYs2mobXqgSWPf+C6icTOkfVNg557nNmug= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA0PR10MB6425.namprd10.prod.outlook.com (2603:10b6:806:2c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:55 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:55 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 12/27] scsi-multipath: introduce scsi_device head structure Date: Tue, 1 Sep 2026 10:45:11 +0000 Message-ID: <20260901104526.3850621-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CH2PR19CA0007.namprd19.prod.outlook.com (2603:10b6:610:4d::17) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA0PR10MB6425:EE_ X-MS-Office365-Filtering-Correlation-Id: a72c5499-15d1-4dd9-0069-08df08163368 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|366016|6133799003|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: oDU7D5Xe0cXxYjtT67Hygx1vi0CBKkTa4BHLVwTLDfC1wgMjtAERmpVkQ+pCj2rE0ThuLo1fNGe861Sia1RtxrfPcG0X19ouVE4fy5dwN+gsCfcz1SoWtlsewR+x8nGzF+9lk14Zv3wt6Tz8x/8aN9WAWzt0fO681h+OBQoDwQ5BIOy+aEGSvhr8rU02PDFURMpZDqFplqgAZr4fT5QnKvsSezkDefHkXTgis214cZccCyF2nhE9N9kumlEiUg02rKPmeE47Vl2yFgdDxTSmV67ADPTeK6hqkv3LnohIFMhYGR60sF2KVCzdbhxCZyJh/IIuBANChqfMxa501U/d6c4bpKphBwvmcwxRdShj5+pSbt5p4J2u3nKYWfnBvTSiy5CsrL3FRKr83kZyBu7M0Qq7ink7LHNK6me6I2c+ejYvBivC02SkZWahR8/+bXjnsg6j7p2ilC5yyM1LZNvfAvNNSjafUtjw1Mk68jdpimflkPy0g/LKC4ZIxAHhfeWGUtVL72ASunbcfdaRHrgMNyojrNIlz0Mlo76DiaJK106Juk4XMXdVjde0wxQjjYJ9Qr6ZSuiWSJ2+c/ysmS07ZOpiqlnBdiDTUM+DHIkNUVrPuu46D9/TF+4y91D+bAE41as/dPvVWdzANKEq5HLrAZMi0IiF5rbSJq4OwPo9Hhw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dEnqGg4R4dK+gzPWjBA3MTwJDimqF5iasio8mT3y5mvBTyYLrZCtFaSf6lcL?= =?us-ascii?Q?1cGQc6ZKi+gT4hMwYUI8JzN8coe4h826nH5entcXI/1irpnNYdjjTKPDxE1p?= =?us-ascii?Q?NI9vk/o2ken86mz2Y2SFID7u5CPTu8qHa2dX11gRSa1LBRmPXNNFsNEHzZpR?= =?us-ascii?Q?goAKmW85dqFr/7BTSE77pv31jvbRWUikDhBm+M7MVOw6GnIbHTITreb6z2YM?= =?us-ascii?Q?6VQu+QLlaWpFxPj5xLsIFrLLRd1fXcS9J0BcFt2RolNQ6b39daMwEgL0DsQw?= =?us-ascii?Q?8acBMryZqJQ4O7Sw+6ia+YI9YLjssdC+5G1EYfYbGELUrBT8mxtEHvELxaB9?= =?us-ascii?Q?qO+1ajpJ1X+cTS082rOw5nNQNcMO7KW1kNQ/0KbXiIAFIFddlujEuMvkqLuq?= =?us-ascii?Q?Kaq+ScLV8C5DH58nj2ILVnOJgpAoMvL2LWujkMwlGJGPNaFxSuf8VdRZgQ2d?= =?us-ascii?Q?x6MeqA7075LDYWu+mA7WYnZfKAMfa0YPkl7da0ALWhpALMRrWL7edMy0Or/r?= =?us-ascii?Q?EQihl1lAifDWxy36dQde5Byldv+CycVUhBZf6FdXoWz4WV38RiA1OKIVyaWQ?= =?us-ascii?Q?t6xTKSdSSEsmqSQq3DJ5iUm0T89RjHxYJoAJ2pVSAQOe6SHWv8Xs3/vN7gGc?= =?us-ascii?Q?D5AqkhpmjeRC616Wf2Qf7VTkHcjIyh6Nh7tIyQrOBdSsTZTQw4e/MUNfu8vQ?= =?us-ascii?Q?oDH3LdWVwHuNJYMV94uXVf/yUtQWeRe4dcGhui9yl/rZi2r+ZezE6h40k0z7?= =?us-ascii?Q?i/SBq4HWT+RgNSRzNEnSF4x2dBFDalKAVoULpt3k/3cJTDxdhOtj/J+BhT3y?= =?us-ascii?Q?FTGAnEctT7vchu7uYdEwA+zzmCy0fVNHNQ7HcvoKyAQ95/abLt483AkHL9WI?= =?us-ascii?Q?ZDoTviHmTaOx7ouqLtWCSNvOalfskKVHNVN/ltWerZY05Q+mywttA+j6E+oP?= =?us-ascii?Q?J4Ao1WjctG8/D0HBL9ULGubPrvfNqpCWsI/3TxRFrEO5LioUvAylTqsPMU1D?= =?us-ascii?Q?Fh8vl91+epopey7AXj15kWDqmma3InwfIACrO3/YELDzBpAGjj7bQKwdYKkA?= =?us-ascii?Q?a4ZFOgTGAllv8+xVnfFmvmFaDGxTk+lnULCQBblMPfAIC0v1IfSV+zyTxVcf?= =?us-ascii?Q?PLwgZwA2wU2WrMrxMCH3Q2XlPoWFVXMQplDZf/W3KZt5Nnj8aJfV1mPZrfbf?= =?us-ascii?Q?zDBZbRwNrx9urG6UdKbTBH/Eme/CJpkEVf1SdpwjPjqSSDQZZzkUq9TOihg0?= =?us-ascii?Q?qn8bsTqsipBPzhVFlbrwv2HIfjkYo+cHimpjeUA+3dCSneibhhV75VeW3dAY?= =?us-ascii?Q?O+NJHwC0Tssnl24fKlub7FSHhpFNeDeow8MRDtPQiClgQUhTqvW9oKe6UZah?= =?us-ascii?Q?aXhRa2dog5XYQzXWpAn/QSnReTr1OIoXlqzDo8wRZytXo2vD1wWQgMaQFZPq?= =?us-ascii?Q?M98JKit/bBoPvl29SESa+NhHyDDWhnZVvF8ORRAk1WvZBjVLAk9ry8w30PaA?= =?us-ascii?Q?Ey2IAHVsMrGJXJGfDhZxiu7WoQxZ+mxOJgNX6Nk8+xS2cWTi5aEnJBnUr0VC?= =?us-ascii?Q?WS4dqCHVgVZVn93spU1dVZ+519HO6b3wt6fbAslx12yPwgmsfYsmCFOrPJ3h?= =?us-ascii?Q?If8D1eqszojE6flnxwaYWJzQDMwwP25CL7bKmQCFZUuq8L6lL0dXsQROBkwv?= =?us-ascii?Q?YvlF/hqpWduGvnrOIMZSGlFAAfhoZi6q7b8LNMbki3YzRe7v7zw/VocwtJQY?= =?us-ascii?Q?hRs3JiFLmQ=3D=3D?= X-Exchange-RoutingPolicyChecked: W7rgOB5u4EKDzavxFPo28xGGwKZ5Hf8pWdfTxtbXS949NyDvUZasVry/CBTdZ6YEjMRwT8I9mXQj7DPqi2N/6kUalcj6UPW7P3WDIFdpvplvFrBk5sBnJOm98nqz0Fszs02fzPP5rMrEKmtWk+yZusnLT9cmLMlPv2JZIcaNye/j0pgmJP/Xtz7V7kpiA/21fKCDvlWkWTTCdcbHkbsU/lEWslPhD9eaeIy5wgg2OUfyJQMNM19fDBwYo4VYb3rFRG1eMm7Y5Vob6Im2m7LuyHIQ/soc01VBvPJmiXJM5f/SJ//UEz9j3LJUTQfo1a1/cFnK2XK/RdnXaWTYFK89qw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: K16sZH2IlN/HbA7Gw24XhLDCXH9dPLxBVYeJwPmk+keg4d2Qxy7/LORs5RpxB+/WUR4bemE28r36cVrgniuLQlQJc6+fyJijebLKV6KgPTU1y59dAri0GljX/hvEeB6XetCc6MqzUlW4N9jD6fMl2CBZJScQ24QmiKGcngcwdCTVUEVz3v+3oY9JTz3QqkOrFobXOlJHneRVjB0Qxs4xNKwW73y8QrYTH+z/QtA8Kbj8vewqMmzT9U/qBlK4SWrlCQjAbxMlOxtWBTGDd8RexDn34q3kPeHB5MWommrVY9Tf3x5NNo3rs+IvZ6vjJqPBoNJ4VfChhCf/Cd/UOupSjOaPLBURMNoG93mWQhCbWwaGQsPw4yz5r33zJ0lLU9KlP5TT0bYeDlF6HeKyIG4GuvQjLegzY2hTCtZ5AnthvN9Ua9SQT4WmWgmRJIks5/l7uba1hjqi5WgffrAnYxq+5kZH/rKyX9XlHoUSXkmYzOknSPJ9kqIqwnIpRhaa/6OcQlFMpqE31gYr/BulfDKrFov8U3guhgnFCxvhy3jxMABLY9Fh2DdIQJRXajxUz/YksLszUck21lsqxJP/mLwS+6AzSZoCrcROVmfCoqmyU6Q= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a72c5499-15d1-4dd9-0069-08df08163368 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:55.6725 (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: XFj31GUNojYu+4MWHmYJZ8acaoeiIJSOfMwpoMp67UACcCy2UWOsUsuDT1rdteP87P4ycDm4cttgzXk9CNfT7w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR10MB6425 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-ORIG-GUID: 2jrcrvEGAvKupgekDu3t5KBbhZAADHkI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX8Vswaj33FB2L iDMNJIwdPWQ5imlXP39gwYEtiv7xJpx/LbTkMUl+fdAy7flYP0/iPMmx6xgJrUUsXzwZKY4Vebp y7HyWGKt9IdSYJxxK6z4XaTcU6EOBAcziI1ERotigZDjfu6/r3bEskbRWUKNI1EsvzKqz2j0dGw stk+TyyWTw6KfMx1P5bX8UgHwHjZKmLEyI9uGLVDGZ/3pO2ruRwmklSsrR/xe4R2I04H2+TV/Ra HXHL++Lp9eybGcl/Zx2bDLnSoMt407s/oc0uOmOIWhyZmmvhex5/jF2jOtMhHgvboK8qNgWVdKY VXTv6DU/K7hLVvUne9RZkj1YIMuaCGWck/W0PWAYSi+uNM5xZ/XbX7t4dhzNVdKlO/rk0t2KTHy xEPD+KeX9jcCbBpji4iK5oP14uxvq3tpXUesJ54QG+m2OlS9R1M2RyHG4kMV0w/Xl33uP5vmmxJ DI+kXcuErIrGp6XMCanUfblD37IfNkuYaRv1GV+E= X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ace9 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=rslDvqJ3sq2LG7fXSO4A:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-GUID: 2jrcrvEGAvKupgekDu3t5KBbhZAADHkI X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX/HEuBljDMPfL luJ9NixQLBhdb94W1OGQMFyHQbiRjnbWWg2H0f9rYnq+BGin1ifvZoYDnxoA13m8XSO/VqKGwri 6Fss0Sv+3C/aBphzK/6jExte3r80bGoNxlsjFQ+QZCkAaNQRmsgN Content-Type: text/plain; charset="utf-8" From: John Garry Introduce a scsi_device head structure - scsi_mpath_head - to manage multipathing for a scsi_device. This is similar to nvme_ns_head structure. There is no reference in scsi_mpath_head to any disk, as this would be managed by the scsi_disk driver. A list of scsi_mpath_head structures is managed to lookup for matching multipathed scsi_device's. Matching is done through the scsi_device unique id. A new class for multipathed devices is added, scsi_mpath_device_class. The purpose of this class is for managing the scsi_mpath_head.dev member. The naming for the scsi_device structure is in form H:C:I:L, where H is host, C is channel, I is ID, and L is lun. However, for a multipathed scsi_device, all the naming members may be different between member scsi_device's. As such, just use a simple single-number naming index for each scsi_mpath_head. The sysfs device folder will have links to the scsi_device's so, it will be possible to lookup the member scsi_device's. An example sysfs entry is as follows: # ls -l /sys/class/scsi_mpath_device/scsi_mpath_device0/ total 0 drwxr-xr-x 2 root root 0 Apr 13 15:48 power lrwxrwxrwx 1 root root 0 Apr 13 15:48 subsystem -> ../..= /../../class/scsi_mpath_device -rw-r--r-- 1 root root 4096 Apr 13 15:48 uevent -r--r--r-- 1 root root 4096 Apr 13 15:48 vpd_id Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 205 +++++++++++++++++++++++++++++++++- drivers/scsi/scsi_sysfs.c | 3 + include/scsi/scsi_multipath.h | 36 ++++++ 3 files changed, 242 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 5559e2e8d64a8..0fd4347725134 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -29,6 +29,10 @@ static const char *scsi_multipath_modes[] =3D { =20 static int scsi_multipath =3D SCSI_MULTIPATH_OFF; =20 +static LIST_HEAD(scsi_mpath_heads_list); +static DEFINE_MUTEX(scsi_mpath_heads_lock); +static DEFINE_IDA(scsi_multipath_dev_ida); + static int scsi_multipath_param_set(const char *val, const struct kernel_p= aram *kp) { int mode; @@ -72,6 +76,55 @@ static int scsi_mpath_unique_lun_id(struct scsi_device *= sdev) return 0; } =20 +static void scsi_mpath_head_release(struct device *dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); + ida_destroy(&scsi_mpath_head->ida); + mpath_head_uninit(mpath_head); + kfree(scsi_mpath_head); +} + +static ssize_t scsi_mpath_device_vpd_id_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + + return sysfs_emit(buf, "%s\n", scsi_mpath_head->vpd_id); +} +static DEVICE_ATTR(vpd_id, S_IRUGO, scsi_mpath_device_vpd_id_show, NULL); + +static struct attribute *scsi_mpath_device_attrs[] =3D { + &dev_attr_vpd_id.attr, + NULL +}; + +static const struct attribute_group scsi_mpath_device_attrs_group =3D { + .attrs =3D scsi_mpath_device_attrs, +}; + +static bool scsi_multipath_sysfs_group_visible(struct kobject *kobj) +{ + return true; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs) + +static const struct attribute_group *scsi_mpath_device_groups[] =3D { + &scsi_mpath_device_attrs_group, + NULL +}; + +static const struct class scsi_mpath_device_class =3D { + .name =3D "scsi_mpath_device", + .dev_groups =3D scsi_mpath_device_groups, + .dev_release =3D scsi_mpath_head_release, +}; + static int scsi_multipath_sdev_init(struct scsi_device *sdev) { struct Scsi_Host *shost =3D sdev->host; @@ -91,6 +144,74 @@ static int scsi_multipath_sdev_init(struct scsi_device = *sdev) return 0; } =20 +static struct mpath_head_template smpdt =3D { +}; + +static struct scsi_mpath_head *scsi_mpath_alloc_head(char *vpd_id) +{ + struct scsi_mpath_head *scsi_mpath_head; + int ret; + + scsi_mpath_head =3D kzalloc(sizeof(*scsi_mpath_head), GFP_KERNEL); + if (!scsi_mpath_head) + return NULL; + + ida_init(&scsi_mpath_head->ida); + + if (mpath_head_init(&scsi_mpath_head->mpath_head)) + goto out_free; + scsi_mpath_head->mpath_head.mpdt =3D &smpdt; + + strscpy(scsi_mpath_head->vpd_id, vpd_id, + SCSI_MPATH_DEVICE_ID_LEN); + + scsi_mpath_head->index =3D ida_alloc(&scsi_multipath_dev_ida, GFP_KERNEL); + if (scsi_mpath_head->index < 0) + goto out_uninit_head; + kref_init(&scsi_mpath_head->ref); + + device_initialize(&scsi_mpath_head->dev); + scsi_mpath_head->dev.class =3D &scsi_mpath_device_class; + ret =3D dev_set_name(&scsi_mpath_head->dev, "scsi_mpath_device%d", + scsi_mpath_head->index); + if (ret) { + put_device(&scsi_mpath_head->dev); + return NULL; + } + + ret =3D device_add(&scsi_mpath_head->dev); + if (ret) { + put_device(&scsi_mpath_head->dev); + return NULL; + } + + return scsi_mpath_head; + +out_uninit_head: + mpath_head_uninit(&scsi_mpath_head->mpath_head); +out_free: + kfree(scsi_mpath_head); + return NULL; +} + +static struct scsi_mpath_head *scsi_mpath_find_head( + struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head; + + list_for_each_entry(scsi_mpath_head, &scsi_mpath_heads_list, entry) { + if (strncmp(scsi_mpath_head->vpd_id, + scsi_mpath_dev->device_id_str, + SCSI_MPATH_DEVICE_ID_LEN) =3D=3D 0) { + if (scsi_mpath_try_get_head(scsi_mpath_head)) + continue; + return scsi_mpath_head; + } + } + + return NULL; +} + static void scsi_multipath_sdev_uninit(struct scsi_device *sdev) { kfree(sdev->scsi_mpath_dev); @@ -99,6 +220,7 @@ static void scsi_multipath_sdev_uninit(struct scsi_devic= e *sdev) =20 int scsi_mpath_dev_alloc(struct scsi_device *sdev) { + struct scsi_mpath_head *scsi_mpath_head; int ret; =20 if (scsi_multipath =3D=3D SCSI_MULTIPATH_OFF) @@ -118,13 +240,51 @@ int scsi_mpath_dev_alloc(struct scsi_device *sdev) if (ret < 0) goto out_uninit; =20 - return 0; + mutex_lock(&scsi_mpath_heads_lock); + scsi_mpath_head =3D scsi_mpath_find_head(sdev->scsi_mpath_dev); + if (scsi_mpath_head) + goto found; + scsi_mpath_head =3D + scsi_mpath_alloc_head(sdev->scsi_mpath_dev->device_id_str); + if (!scsi_mpath_head) { + sdev_printk(KERN_NOTICE, sdev, "could not allocate multipath head, devic= e multipathing disabled\n"); + mutex_unlock(&scsi_mpath_heads_lock); + goto out_uninit; + } =20 + list_add_tail(&scsi_mpath_head->entry, &scsi_mpath_heads_list); +found: + mutex_unlock(&scsi_mpath_heads_lock); + ret =3D ida_alloc(&scsi_mpath_head->ida, GFP_KERNEL); + if (ret < 0) + goto out_put_head; + sdev->scsi_mpath_dev->index =3D ret; + sdev->scsi_mpath_dev->scsi_mpath_head =3D scsi_mpath_head; + sdev->scsi_mpath_dev->mpath_device.mpath_head =3D + &scsi_mpath_head->mpath_head; + return 0; +out_put_head: + scsi_mpath_put_head(scsi_mpath_head); out_uninit: scsi_multipath_sdev_uninit(sdev); return 0; } =20 +static void scsi_mpath_remove_head(struct scsi_mpath_device *scsi_mpath_de= v) +{ + scsi_mpath_put_head(scsi_mpath_dev->scsi_mpath_head); + scsi_mpath_dev->scsi_mpath_head =3D NULL; +} + +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mpath_he= ad; + + ida_free(&scsi_mpath_head->ida, scsi_mpath_dev->index); + + scsi_mpath_remove_head(scsi_mpath_dev); +} + void scsi_mpath_dev_release(struct scsi_device *sdev) { struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; @@ -135,13 +295,54 @@ void scsi_mpath_dev_release(struct scsi_device *sdev) scsi_multipath_sdev_uninit(sdev); } =20 -int __init scsi_multipath_init(void) +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) { + kref_get(&scsi_mpath_head->ref); +} +EXPORT_SYMBOL_GPL(scsi_mpath_get_head); + +int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_mpath_head) +{ + if (!kref_get_unless_zero(&scsi_mpath_head->ref)) + return -ENXIO; return 0; } +EXPORT_SYMBOL_GPL(scsi_mpath_try_get_head); + +static void scsi_mpath_free_head(struct kref *ref) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(ref, struct scsi_mpath_head, ref); + + /* + * If we race with scsi_mpath_find_head(), then that function may + * find this scsi_mpath_head in the heads list; however we would fail + * to take a reference to this scsi_mpath_head and continue the search. + * As such, it is safe to call device_unregister (and free + * scsi_mpath_head) after we delete this head from the list. + */ + mutex_lock(&scsi_mpath_heads_lock); + list_del_init(&scsi_mpath_head->entry); + mutex_unlock(&scsi_mpath_heads_lock); + + device_unregister(&scsi_mpath_head->dev); +} + +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) +{ + kref_put(&scsi_mpath_head->ref, scsi_mpath_free_head); +} +EXPORT_SYMBOL_GPL(scsi_mpath_put_head); + +int __init scsi_multipath_init(void) +{ + return class_register(&scsi_mpath_device_class); +} =20 void __exit scsi_multipath_exit(void) { + ida_destroy(&scsi_multipath_dev_ida); + class_unregister(&scsi_mpath_device_class); } =20 MODULE_LICENSE("GPL"); diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index d6a0c43a048a0..52eb87b03cebf 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1526,6 +1526,9 @@ void __scsi_remove_device(struct scsi_device *sdev) */ scsi_target_reap(scsi_target(sdev)); =20 + if (sdev->scsi_mpath_dev) + scsi_mpath_remove_device(sdev->scsi_mpath_dev); + put_device(dev); } =20 diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d3d410dafd17a..50d422798d835 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -19,12 +19,25 @@ #ifdef CONFIG_SCSI_MULTIPATH #define SCSI_MPATH_DEVICE_ID_LEN 256 =20 +struct scsi_mpath_head { + struct mpath_head mpath_head; + char vpd_id[SCSI_MPATH_DEVICE_ID_LEN]; + struct list_head entry; + struct ida ida; + struct kref ref; + struct device dev; + int index; +}; + struct scsi_mpath_device { struct mpath_device mpath_device; struct scsi_device *sdev; + int index; + struct scsi_mpath_head *scsi_mpath_head; =20 char device_id_str[SCSI_MPATH_DEVICE_ID_LEN]; }; + #define to_scsi_mpath_device(d) \ container_of(d, struct scsi_mpath_device, mpath_device) =20 @@ -32,8 +45,14 @@ int scsi_mpath_dev_alloc(struct scsi_device *sdev); void scsi_mpath_dev_release(struct scsi_device *sdev); int scsi_multipath_init(void); void scsi_multipath_exit(void); +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); +int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_mpath_head); +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); #else /* CONFIG_SCSI_MULTIPATH */ =20 +struct scsi_mpath_head { +}; struct scsi_mpath_device { }; =20 @@ -51,5 +70,22 @@ static inline int scsi_multipath_init(void) static inline void scsi_multipath_exit(void) { } +static inline +void scsi_mpath_remove_device(struct scsi_mpath_device *scsi_mpath_dev) +{ +} +static inline +void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head) +{ +} +static inline +int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_mpath_head) +{ + return 0; +} +static inline +void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AC123BF689; Tue, 1 Sep 2026 10:47:37 +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=1788259658; cv=fail; b=RmX4mT7OJ2k0Pg857mW6IzXhIbnIyYTAegxIP4zhpIcPjyA1t8hgrEEiTBRszuIfD2YjU2jPdVd6wDMz+Ujfuv719Rj8tIY/fG2SdbDjMNbFX14ri2pEHiCx6+y4vVui8L71CX0wL+S2DLlk7xJXxDwbKljqdomiBrapxkiuNMg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259658; c=relaxed/simple; bh=RqtLSEpgQ/C9z9P8X6i8qf0hp3aPrqsTcgh/sxyJO00=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FP0JITL/cNmrnJs2s/dKTWiv1LUEMfbLRn+P4R+N7eckoLVfsS1lkpFT/0/Ayxl2Chhr2c0V7HMsb8yddloe/Wwe50JEIckliHxtC/TH92DXPcUyUWJmwf+IoWLgW/vNVYVDOYqd9dA1r8wjA1UJISJ56McsRJR4VJjj4xeJV8s= 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=jMf6HXfR; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=lUiKSbu5; 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="jMf6HXfR"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="lUiKSbu5" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLCre62681587; Tue, 1 Sep 2026 10:46:03 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=YMwGLfg5OZZbjGRLBsDa+MbTQEQ9i0uZkGRe5goRz4E=; b= jMf6HXfRlA+aVs/dif9KB2fRAlmkXhHRiPkYyk2QNEao49G2D8ydeINsFdpnLm+X mLTXSptyxZEJ1iRNmYlM6PjRwBHDYFeX/YgnVe8IUgC9csf73IdN52imp3cWsQ8v HEtE+ZPZnhJ2O/ifLfWGYs0zQoFevvFOW8TCHXHXt/nzJS5MymFrOJtvkjWzPLSf A2YEEnpi5doS+4LRshMcAo2ACHo5GGMVvjLuUI4L3zz57gILfrRdFf+FX+U2lT4i lx+vlFh6x5578alvjqrx376cRlY0q3MdRxYHulsU8zWctynegllqNDmB12R8C6XQ nbqJgZRgSRDT2L/wuFSXRw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqa7mby9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:03 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjIgQ036924; Tue, 1 Sep 2026 10:46:02 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013009.outbound.protection.outlook.com [40.93.196.9]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve34gw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:02 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cM7JP/jSvaBbV+/HKfJtbXnB92VwlFuewxYl6RptXomvqvawPfmibIgwGoRiORALUcL3bpJMuGQ6SbOwf1OWU5rA8K6cF1E2dE7UNE7YfePzL3SJkTB9fCVlNqPSeTo0dGiirPuYJ/VD77+gdTHqIQfxw1tmbsbEwO8iR4grqoWJiWh9GKC4bTCl1H0Ni4hBegaQWPsuH/wNIWqSpuWIisKWX7F8pksg0dpCTw9OWWKsx2pFoefghPLcAfpg3lwxerSicra2Nbkjvdf18/v87E3zIaUcZlnLoFv0Dh0jA/6o9cPRPkZfh7gCXyw2ewP99yh7J0zL7f5OXNsLyL9KiQ== 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=YMwGLfg5OZZbjGRLBsDa+MbTQEQ9i0uZkGRe5goRz4E=; b=wVhsLFzLqF1MdT1ahqdZzu+u9MlOlbF0ilH0pBRSwQMxfVSzcGXYWbA7oHSu/tPpZGPlkUlwffvANmXqv96X15ZwwOcqTyD3VZ8b7wgjoa6217XMO/MuZl2PfWA9FiLEX80HN7ES5/P68LzrWnWo8JTQT8c+I9iMKBSs5NkfgCvnSjB4FuzTv0dF3O3b0o69DH9po24K4utUih4zlL8+9NBl3fzCcHlvK/8uSjOtoBRMj9pzr91qYwoWDzMHSPnFoClQnAL9sZMSzHEBU9+avRzPyhkvJKxD5D91zFEE1tf76vwZ8Tfl5maRAKzjgDb9V0Iawp7DnLSwH4khBc+zsg== 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=YMwGLfg5OZZbjGRLBsDa+MbTQEQ9i0uZkGRe5goRz4E=; b=lUiKSbu5sKEs9+nhcVHFcNm84ADzPLjAtpbPlzQ7lQZy2J4PfxP8BtrLsvCRgfVjPtVCxzreSuQREgF5l+Obj2XFal2WYmH8f7CrL5Y+oWU2e0gfbJaXvGtECCVSp9jJiU4idavi+6PLbSJ0o9/Th8hMPjAdHYRL6UbVsiaIWRE= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:45:58 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:45:58 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, Hannes Reinecke Subject: [PATCH v7 13/27] scsi-multipath: provide sysfs link from to scsi_device Date: Tue, 1 Sep 2026 10:45:12 +0000 Message-ID: <20260901104526.3850621-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR07CA0015.namprd07.prod.outlook.com (2603:10b6:510:2cd::20) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: d0c97b86-11c0-4657-dece-08df081634c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: hKhxAOXpYeNdJfpyBk1a7BQLZ5C93HziPOrrElvzywgMjws+soDpIJNDFdYhupwYvtx+nQ+Txq0KsCroBQXAQNDF01dUcBNafj86PQmtQzp11zcR2HQBbuVFjFrmUCdcaYoz/mFRKIxiTp8oQZWVH+0mXiI+c1Xa2U+1poA499aOzUH0h4xr9QVDa7M/2LtIk+V7yo36SsNvqU91J8op/On2sKYMzk+IB0tT40xCPAl8vuSIcuIh/Bqu0lfMT8rJBSbJJfnOV/f1/jU5i20Xc7iaRZqN3Ev45nOfYl2ipTKNvjilNp1R7C/tG6DNdAWA/lfBHIGdjl/t1PW+Yet2GxtBZLweE7sFmcZi9Z46IVK/nxOU/ub4D2M4ABsDSnLUDwrUlHAecpyD+ipXFZHGU+QlGeh2s0hKLZE0M7LwYS4m5MEcKij2N2+HfIHQYICsAmfPwkBIZanRvx9OvyR8pDwqDNXe6jmCVbHZusiUwRqsi/IwHzI9H3Lw+YnII89xgDDk58/7oHm99kHwLIVPM99rI2QzCaGChN/MffCJ2iY/McQZ1shZeJEeUBsMfGhUEX2ShzRXs81uo9a5aoD9Zy5Kvf6DkMUCpEZEpPa7xgpdUUQu3YXIAgtOCtUVYCb419e45vQMb/sYzXaeySuva+PjHJWkBKBKViXX4f+Ct54= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1Fnn67kWkCVMN3aA8bYSSFCTNPwgSqpBewGk1Amt12ibajSTrvys3fH7oMtT?= =?us-ascii?Q?aHxc9dN0MzOrNotmnuHCDlxanMrUntTWKDEmBKPYrDOxlLgqH6UCbws0JMsx?= =?us-ascii?Q?Ykm9zG4QJbBugkKitJpY1P7OER6yoPRmgSHdVtFfDsxWzJrwx8cx2Xnge2/5?= =?us-ascii?Q?dQb3ZxRjEskz3bsj6TBXhuSyq+ga2gebrO/hOkypQsoMQeCOqDgf9JhEeQ3U?= =?us-ascii?Q?xkUWpO0GDUHr8zbbju5MjCIsCFkhmtR+7nHJq/VmXgGD6pMMZ2mVdEAVlKk5?= =?us-ascii?Q?U73S7/S1BCEkDY0xSxmz91t9tM8WkJ6AWRfb9i448h3Yl+q40tUCAoxoAW7Q?= =?us-ascii?Q?mvlBCBSlqUuy/V5DozMBZIOe1Zgnqmg70wJzR8dUWU8qr7cc1VHvU6fFGzGR?= =?us-ascii?Q?WKI+ZU8lcHe4jy4mI3COMDWbiqpty+x0HK4Rxf2qDmpSi/3zelUYLWSyTgLA?= =?us-ascii?Q?VcwbrdoD+1c3IzHJOOLBlP4qrRqPvyyO7PVJTWFcfk/Uax/dS6D8ImISQKtr?= =?us-ascii?Q?s5WcM7tkofNOa9I4nBh2rAZOSkEdTqk+brCrSPO9R+3m7P1xqNZPV4+qD7i9?= =?us-ascii?Q?NOcdlbUD6gSmh0In3CLwA/pfGlil1THpB1K0yWfnmjH0egOXXKRbBBHlyObm?= =?us-ascii?Q?TnjrHQybovYjqXDLm9xxR7BJx7HnHLnDl88wa+Qv2Oxg/OiMLMhs8srjtmdf?= =?us-ascii?Q?otNNPgz4LE0uEGBt5H8G4fg/MO3Es2aD2gRHT5AfuVgY3o8VE4HVI7/l6KLR?= =?us-ascii?Q?aW93/nXkbl8gb9Y1UeQ3FgH0XKvEV6rsLHQe3dCX63pGwW2LwyoUtSzHBM1q?= =?us-ascii?Q?y0bCLwGXwtRzlloa/04zvhHsRRgu6IEMAZ94yrt2dm4hebRxktGJ420jSw3d?= =?us-ascii?Q?FuwBRin0P7yfgAeexAZRMbVTXqPTqkqFhIZ/KlTYbrLpS1I3pG8KhqMskMxR?= =?us-ascii?Q?/TQ4VkzGFY2bLlGOWXg3D5UBodSX570LKx314OPp+Kzj+a6vt083CTRarbnH?= =?us-ascii?Q?3uNwAv5Tittm2+nXoWfeuxSe3/kM5Syh/z8+7qtFkuszi8lQK+X6HfROh6jm?= =?us-ascii?Q?9Gq39A/6jd263dARj04G4SkXFOcYmRixWhPV3CL27ttrb9hY4ejYhLxRgecR?= =?us-ascii?Q?3SLTY4m3rWbzbV7VqFEfejVrHC8Nkb/6SRIxIP1lz6BGGJKOEJW94F+BARFN?= =?us-ascii?Q?+Ol0SFiwJzk9476zMMFFIIlDG5OxJz9r3Wk0bWd19rgCllW0PsI9jqIDexyW?= =?us-ascii?Q?93qdRRW0F2BEqUnlbY6epG1zUvNsp9WMjaL6d+YSt+bTaJcXfiO/D9TIYRFT?= =?us-ascii?Q?djS1KExDHXR0KE8bJaJ/2ctx3QUUK7jBtbCVFWP3/rrsr/x7GXYpm7/DdIsu?= =?us-ascii?Q?ljdAeZ/C5w5Z4S3NJ326xoctmHm1v3gXMLCjc07Nv24TKHNbTfhIFdL8GpvC?= =?us-ascii?Q?aixyBSFlqP9mlES37gXVPHef6306+sRUrEJ+z9zVCf4UUU9AV1mxQd9VEQNH?= =?us-ascii?Q?CBIvMl7M1FNDrDQonZTCypEOxM/SmrE5x/EvsNm6GWn8/lzL/HWBJuVs0311?= =?us-ascii?Q?YT+DHPe902E9V2g+2mOIj0kb38k8+DktkXbDeoRk+cjIT79hscuLWZVZg81q?= =?us-ascii?Q?RmXw2lYTT28wvYkpGmlIUvIq+0mu+GdPhx5dCfYz/0YpOYtql0I7hLmCMsM1?= =?us-ascii?Q?Q/wkTzG6Kuzx1Wd95qt0jDvAlbJRe4Ygiz2YQ7XRdSkA5vBzyY2q84C4Frzq?= =?us-ascii?Q?yBmVIpj0mw=3D=3D?= X-Exchange-RoutingPolicyChecked: TN740pZ3ij+071mXpK069AkA70nMaecw4lpaPastQRktvzosk7AiStGHaNztYRLbR325qkkdUHTLfz5EdtnSCKhojNmhB3MFKEuMgScvIwaxds8C6rFfiW9oKSgMcXT7PuenlOXA2X8HK1qDOUND15A+1KbkaEKIjCz5NoTnGZZ0oYx+cQlvT4FHmnsCNs4E/jJB83ZlHA0e7/UWlfOmZQxhT6qUFB6x9Tscd+lmzyP0z6JfBUJQ/k2zu493wF8LLRC1tCMoH/3bdd6La8qXcZpVGXeb7Ep3McEsmLy2+ij4lURxEE/QwKOoIqvEqQOZCCT0umAbuvlGrEDIBXz0EA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 78RfJNsYnpmN34BvnVKU7pUxOtspUmw/M+LHqU7CKN5A5Yfm152JsXRvjeBj1YL/Z9dncpnQ11OMwa1jUu+WEfE0eX/Yz9Lzpa2NV12/tdO4rNVsAhANZxYyWIUif8N/RCERplhCcZ9FXlw7NqP1XWUD6ZkP2UnPLzUp5lhVdiWpG8g3nMe/335oNtw/vNE/EnaNRm1RHAaklRiXOY+CCKnbuKLdF7UUa8xoMLcZNIyp3dWfmXSlHmiYRAhE5i/YYnBOrIH8f43okw8C6pa4p8dxx66cK4ffzgKuD6rWM232PW0p9JKdXC7M1sjVVKgQjIeL9Dv28ltTIkW8Izm7Ro7l+aibLKEmkKRAjLwyYpdFh13uIOuMGS7eHFg+bQoT4uGr8dLuRT7xwPpxtiX5GJz7VkXPZNA6WY5pgZe7HdBetsShKFWMdX+b5nmzchmQbn9JFS4qjctQ71IIpe4Ncg4k66ZNaEbBMPaJV2c9QFzp7mZzvlyRS7V5b9kb+LRFhy23H54bU1lhp5nrL2pzQjvAZ5IoDVRhChBbvQgdy33nE+yLMJqECihFnxqk13fChr5RwqIMJxG8FS4wr3v5Uwdzx1jE/7D4uOkeTSlUqT0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0c97b86-11c0-4657-dece-08df081634c8 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:45:57.9671 (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: dxjJvSWh6V25fy0+1Zzi0zyqIAdMz0L5YlFIyzJGEsGXfpIEf52Fs9LeGJ6OL4+y/ruIZiWFL+8oU6IVJdyvnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX+1lj65dU2a6H Gf5pBu0LYr6A4fTYMJ9mZobJ39cgu43pUuwXFWflSP6q3+ANewIpZl/Pau94cAd9j0TziXqwRvj I7V46nC6fdxG3j6oPUHx9Sx4EQv2upF8fN8eWFuzRoSNEADbYKNR X-Proofpoint-GUID: eDfybbCq5v81eyyQo3ssNjJ_B8EV-GzE X-Authority-Analysis: v=2.4 cv=DPu/JSNb c=1 sm=1 tr=0 ts=6a96aceb b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=ZbQ-JUxe3OK3M8wTWUQA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-ORIG-GUID: eDfybbCq5v81eyyQo3ssNjJ_B8EV-GzE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX/mMu2lCLFmJF Xd1rN5Fq7ij7xdyewJpdr3XuPTxOpULoo8HBBZLWk73LM03Yn9oZ2GJOiJZmYftozHhA1NyzAYS GiYQhfe+n7/9w4TsDe/9Vx6LTImAs2Z3nWbBxxFS2jd8TolZBOjLk3C3ceelfFy6qCJDJ6c54V1 78fBz8QduR6hWBANkZ/shtkHBApGojBkfqXzSW10NZOofPJRllX0NOP12oT7orUVFIQEe6kp0HW vXSvj9F9weA5ESpVbb/zHUQziy8hrGzHj0J28DmAMoRQw5I45RA/GLxKEXi6Mm6ivaZGj+mMUGc c1CFkBtMANm9yVNYRooFuCp1zw26BWYdJCDACRLDSlbL4qyfcvs2we63ZNmHlyUP+9sqP64UEWi czpCn0MflTmXqKvzcB0Z47RcmZQZy4QR2WzUNLt88rIe5F/HIWNO09Yb2fZ+RORoT2Wp2GcDZmL LBwunuvADOopXcKCvDQ== Content-Type: text/plain; charset="utf-8" From: John Garry Provide a link in sysfs from a scsi_mpath_device to member scsi_device's. An example is as follows: # ls -l /sys/class/scsi_mpath_device/scsi_mpath_device0/multipath/ total 0 lrwxrwxrwx 1 root root 0 Feb 24 12:01 8:0:0:0 -> ../../.= ./../platform/host8/session1/target8:0:0/8:0:0:0 lrwxrwxrwx 1 root root 0 Feb 24 12:01 9:0:0:0 -> ../../.= ./../platform/host9/session2/target9:0:0/9:0:0:0 Reviewed-by: Hannes Reinecke Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 43 +++++++++++++++++++++++++++++++++++ drivers/scsi/scsi_sysfs.c | 5 ++++ include/scsi/scsi_multipath.h | 8 +++++++ 3 files changed, 56 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 0fd4347725134..1c04947d906ea 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -114,11 +114,54 @@ static bool scsi_multipath_sysfs_group_visible(struct= kobject *kobj) } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs) =20 +static struct attribute dummy_attr =3D { + .name =3D "dummy", +}; + +static struct attribute *scsi_mpath_attrs[] =3D { + &dummy_attr, + NULL +}; + +static const struct attribute_group scsi_mpath_attr_group =3D { + .name =3D "multipath", + .attrs =3D scsi_mpath_attrs, + .is_visible =3D SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs), +}; + static const struct attribute_group *scsi_mpath_device_groups[] =3D { &scsi_mpath_device_attrs_group, + &scsi_mpath_attr_group, NULL }; =20 +void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) +{ + struct device *target =3D &sdev->sdev_gendev; + struct scsi_mpath_head *scsi_mpath_head =3D + sdev->scsi_mpath_dev->scsi_mpath_head; + struct device *source =3D &scsi_mpath_head->dev; + int error; + + error =3D sysfs_add_link_to_group(&source->kobj, "multipath", + &target->kobj, dev_name(target)); + if (error) { + sdev_printk(KERN_INFO, sdev, "Failed to create mpath sysfs link, error= =3D%d\n", + error); + } +} + +void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) +{ + struct device *target =3D &sdev->sdev_gendev; + struct scsi_mpath_head *scsi_mpath_head =3D + sdev->scsi_mpath_dev->scsi_mpath_head; + struct device *source =3D &scsi_mpath_head->dev; + + sysfs_remove_link_from_group(&source->kobj, "multipath", + dev_name(target)); +} + static const struct class scsi_mpath_device_class =3D { .name =3D "scsi_mpath_device", .dev_groups =3D scsi_mpath_device_groups, diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 52eb87b03cebf..fb7b1add17990 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1444,6 +1444,9 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev) transport_add_device(&sdev->sdev_gendev); sdev->is_visible =3D 1; =20 + if (sdev->scsi_mpath_dev) + scsi_mpath_add_sysfs_link(sdev); + if (IS_ENABLED(CONFIG_BLK_DEV_BSG)) { sdev->bsg_dev =3D scsi_bsg_register_queue(sdev); if (IS_ERR(sdev->bsg_dev)) { @@ -1496,6 +1499,8 @@ void __scsi_remove_device(struct scsi_device *sdev) =20 if (IS_ENABLED(CONFIG_BLK_DEV_BSG) && sdev->bsg_dev) bsg_unregister_queue(sdev->bsg_dev); + if (sdev->scsi_mpath_dev) + scsi_mpath_remove_sysfs_link(sdev); device_unregister(&sdev->sdev_dev); transport_remove_device(dev); device_del(dev); diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 50d422798d835..d224a15ce9c2a 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -49,6 +49,8 @@ void scsi_mpath_remove_device(struct scsi_mpath_device *s= csi_mpath_dev); void scsi_mpath_get_head(struct scsi_mpath_head *scsi_mpath_head); int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); +void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); +void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -87,5 +89,11 @@ static inline void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head) { } +static inline void scsi_mpath_add_sysfs_link(struct scsi_device *sdev) +{ +} +static inline void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BE8D3BBFCF; Tue, 1 Sep 2026 10:46:40 +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=1788259602; cv=fail; b=RL8RK5A4mXz2WZo/o8Y4Hv8PvZ1eLqFePraI0YIECFFpRGNIm56P/aOL8mY4r6hqniFkAK0bSPdbpA9umxSII3ysRT73wH1QOpGldG/PNoLtodR4VP7Zcq3rhfWc/aTYk0J5hVIVONtNo6ysalnKJgVttgm/uZ2Wl+ba0btghno= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259602; c=relaxed/simple; bh=2Ik7erG8b3f+M+YthkR8zBsM239sa/PicPIbV344Ub4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=eScMXI3qPLaF5e2yFysoQaqK/qWBk7fGM+NRJkvN7n5smRYtCGRqEt4qDL5S19/72xpTeTydxrlTz5MOl68l/S1ovy0leYLkldpQ6uV+5Dy6LQGcuLt92ilcG0BTlul1wPlhe2PbTCuyn36ktMxUtFK8mQCz48oFBD9uWC4/aAU= 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=ZPzkKWup; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=d0BUxWS/; 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="ZPzkKWup"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="d0BUxWS/" 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 67VLBlVQ2311045; Tue, 1 Sep 2026 10:46:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b= ZPzkKWupsEOW0RydhgmZ6JI6Dlj+kDx2e6P/NXSDBlzbuHN/YQEVcg+kLo9QzG1V cHe3TkSWQfPGgW7BQZobrLbjD2+j48cq5vboUtLLcCyYbLZRBEMoZS3cAttSULX5 b2ZavGWllBInDy0BHK0Ja1CnuaXhdFFO3Ub2ai+WGbC9ENRQtyS9CrRl++M8ObgO KGdGWzmbTUSaCpaTaYW8hXE+Uq6V6fNWWRhGAuq3OM7oYKO935tKo1F+O+CGS25e GYp9pTnsu6998SrebwkKPJIjATXamVzu/vuvCY3iNg+85fwNdD0SnukWcxX5nIjC /ptXqV8r4cmsrZRNJLeuJA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbq1smbv4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:10 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjMtW037319; Tue, 1 Sep 2026 10:46:09 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013070.outbound.protection.outlook.com [40.93.196.70]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve34mp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:09 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A8QO0sv7Ot4ALUNoTX0cE5jOdxCWaKwZ66TF++hnPx5itgzZebsIrTZw1kvMlWX4hsfkWoPM+eDIwAjOm/zRLmjPnvy6y3vcpdV6MHtHBnbe1Zh1LF2L6hitcZWJWg2Ikia2wa2Ks7SIkbf5VkI9nqEwH7wgPz+/ds08ey5wGVNsGcHFxREbBSZgPu492cKZHW0E+ALRaIW+3syrPSeGE5nblH0TER7Bu25mLVCHcrhOShLu1GMxz2IoxE3dsgilFCdsSfxdg5koJGjJ6lVHaz8jT4CTG5tO+XMfDZmcjv8K/H7MNa9pnDHE6VPkO90/8sV2ZBX9JwDHOxmenSEFGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b=aXsomSQT5NcufU90vcY4wU+RKAMYZ5k6C40aZEwiS/0rJ6bcIu6ivSNbSR98Hl6+fIuJ/6+HJU5rqaGYAoIWjqy89CfxX6BJMV77Q23eoKwqiNx/af5df9By+qy47wn91Gl4SxgyIr0/oMUwwFDknuaEnXRvaMtNblRqHhbHXKLUzKv66urOkL1jtynkgTmZoryDZfGDzZC+rFumSPbc8wkj2d2bsQRDX05d0kdXYKstlLzRJdys+zsToOOOKsFwf1li1WcIs3smLAbBnUmewOCPPPxAXwNhglEAcH6Zber8bFAj0HtZKclzarCS0R9/em2A2vmx6psG423WWCMPiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1Ms7IxDUQPuTDo5BfD17e5isRG4nX5vUE6xvTEA0Noc=; b=d0BUxWS/TcU2kyOAopUEqKTbejCEkDYNFfNXNQ4PMjCjYiZH6C3vnQI0GDSZGBjRFtOpEDyyF7f6PFBDOWY2MPY30UPt4cWl2kPcz4dfr1oFKXtYIVBq0OCKGTmjCO7ygM/xbf9NKTtoZ3rpvrsQ9HcNmF5RzRkYisYCJYHva6E= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:06 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:06 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 14/27] scsi-multipath: support iopolicy Date: Tue, 1 Sep 2026 10:45:13 +0000 Message-ID: <20260901104526.3850621-15-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR21CA0021.namprd21.prod.outlook.com (2603:10b6:510:2ce::15) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 051b9637-81ce-4b81-9427-08df081639df X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: uoLRyjGlLyp3QM7fjwOp5SBn2ZxLnW3HO4oqxFzatUkgIbUHWiVv7v2Fqcq8iZ91cSBl/pHH3hRMqzsH5GzhZYHxpJFCdcElwrZ+LP2i+jcNcoBu1J0VuXjKGjDqcyV+QzkTIluFgnhgwTnU16A7TXk1NTGYAKGDpLgKMHOyo/WMDs4FjCQiIGFuGBLAaU/47ugTu5To2m1Z0q5UvBxU9W2itU+zKwbwcy0Y9jpNKX6zhgES5rDW6wsA3+XyLiho1AZPzj9dAXu1/lEEApEyngPzwuRzKvSdEkaKdd7YIq+UMjrprKW44OgepEWcmznywCGtTfG0vY1KMOUG5bZNHBsyIAyT09oT8FIgOaq0ar/6yjBwSxVGLbj4AueCEaHYbZF2tgyb8eNsAnOS3vXiL4wdsvDvVMBkv+lYGcjI3rLbODEutj7yHoyeUt9FzqcA5+4M940Jmj3K5ykVqeCc5lBWxtKlPdF23QD1Job7K8P5VM37TI+WJnEusBJ1nIxvGE+J1OL3e+2AtKX1iEgUEWS7qVgW7OxmN2+6WvOGkRUaR8zRjOvtBUuBc0FnzdR8paCTmKDZkaQgXa+njZvNxeWv1Zriap12cHfiIQYyWx5HulCpH5HyPvwKdH2Ef4GCtZYDd5EkhjnbVcqFgp6P/Wqg9BjBXms8k78X7YYGwKc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aSCR5uXSoZrcYk+UWQBbZKL5VyIAPto2VEoXTFQYySRlbFPhcnxctzExRw36?= =?us-ascii?Q?vnTfYMXjAK+v7+sRFbowynuJeRnkmsSLDCitfgSLYzdPMNLUhjIslPjuOtlo?= =?us-ascii?Q?BaWcIUUXlVZyPTe9zt785oxUJ9aJSCj07WB4exnpAFTx+6Z3aLsAe27pL/Rv?= =?us-ascii?Q?ydApZnrPLr64rLvcFsHSjcwteaTwwbJKBL1UMi2JV8CsUqsRH5uDo5KOc2/p?= =?us-ascii?Q?fv9krt2PIrr/3zQByNnMDg9N+Tv69SE/Vp6E6aidt6W/GDeHZtKzRHpEaTWV?= =?us-ascii?Q?3IWQ0PskbP8OWg8Dj1kCZMeopSSDpBpMQZPEXaifVb7nl6Gk6dh2sSZjW2bo?= =?us-ascii?Q?MKXDZN19E8+Z/wNm2ul/3qu6lu/1VmJUsayeYROAATk0dDjJSTZcRH//TlV9?= =?us-ascii?Q?39IRXteaJwLqcgMPco3PLYsPeNiY5GsPxayT0vjrtxmdvsIaqIJi2WgzVZQl?= =?us-ascii?Q?qNbnT2L4s7dsog2FgGlgElev//8qO+f7G7neWhcsIVAWGe0Q02LUOvAuYMcM?= =?us-ascii?Q?60xN1PWOEkhePq9ONpvvmNsrfMpo8zzvYzSV2s2J+N2j7xYw8TWxAkrs5HmU?= =?us-ascii?Q?ms/ATmegIK86k9j+8I8TM5fWX3SRLedX63VmrVCV0Vn/S29a85oIT8rlHCh2?= =?us-ascii?Q?wb6i2mmYofI8by6y14GYpC1Gf+X/BdC8EsoV/wZD/3lXFVskQOWqhBim1hzI?= =?us-ascii?Q?G77UwhtYKKvdEVHuEQyuShu+UR61MabwPbFe8LOh3OIzyY8FY21vVFkqcLXs?= =?us-ascii?Q?+uSK/qS0XqPnBX9K4ecdGVcRRntg/Xb9tayeeAPUHtIaKNFransCjY/hm9dO?= =?us-ascii?Q?VVk0yaX/oEgf8qWDLDjKErG4+0ErJeUAJ8vLt4qSMiPIsmcVtxuuioHeI3FZ?= =?us-ascii?Q?MG6mZ6A2/CrUXkLRl4wu53zGCancfXB+2H91tHEgBnWbYmW2Jk1u7NP5Uf9c?= =?us-ascii?Q?FP56ytFc9vTAt04OyB3i8rKLfh/qjMzBidtz5/Okm/zkQwDXzJIx1z2fnDgM?= =?us-ascii?Q?+FYIGOt739VkOTT6wFg5maBtezwAveRZfWrsRlJvQ7xvxJLDq1Vfu6pvO8xO?= =?us-ascii?Q?dIRJ0/k4EvxvYNt9LlwJ1mSXmnUc+5SiC4E+WC/jflpZ4cew4ptwAJz7lcdO?= =?us-ascii?Q?hYwZ/m80ORNkIKtIPyWFOKOyKc7TgW9LB9XeDKKEGEw6Rz/pUOUH5PUKqyJe?= =?us-ascii?Q?AWLSJxmOXN+rkDMFL0sx4/SpSLR81EuetbDCs3mxGMoQ4OfO2aGWe23yP+tT?= =?us-ascii?Q?6DwYdSxBYBTKIucZfLzCvhp7sRuFzB9i7DVOcK09TJvnwjAmWzeHTlfnkk+B?= =?us-ascii?Q?8/dbSju38ofANjxsCD27ESl5pWdsaOQ+8qwvdbmeVFeA0NyAxf9e+PRhW2N6?= =?us-ascii?Q?HE421BV4gsb1wglwQpckrkvCDGFtGRJ4if0vqCF5LFRNJ1DZgi5YnY4iFZ3C?= =?us-ascii?Q?CzXl1afWL1lR1dICMq7n3joAczkQzqc1QxsUDkmoE34uWstccah3Ckgtg78J?= =?us-ascii?Q?klS+sVF863PljadHaYhKtNLiW8wxIR9fPJ4qBEkK+eyf4WWtZa/WWIev5w6h?= =?us-ascii?Q?IiywTyfTqrvttHjBDhDhfnFxeHGFfhMvOeRHIamJwaZwxACRvIqIjuGb7iQp?= =?us-ascii?Q?hqhte9vzPOPjGB33uozGrJbCSg6s1r6XoMl2o/mpyv9K5ukQUmQIHPfkOQtW?= =?us-ascii?Q?pmEOqUTVw1kZPUk7xB73ruYk/mgVcV1NW6eUJ6XDH16PZiQZVezMzr50o0il?= =?us-ascii?Q?WWxLQ9a4KV13JVXGtyAB+azf1DKonTA=3D?= X-Exchange-RoutingPolicyChecked: T9NTUvtOUbQzZ6LDaau7lPxBJgdE8awM1Pz0KfkjPrElwfW/tab5oimIQeRRqTvUM9TiXyl9yN4qYjycFg4+ZkFThMoz5LDApI3lDuK+HuJ9QoVMrklKCwuGYMsGbuYNcWM0sDEDeBXVdZF0CEU2241JI72SJjqbpnXihMkeX2hUJ0+c78ky007mnYKt8ixKk+99kFqoztJ0QMj2QOBWXw9JzKchTROc/IXc2rIOAgtfTegURquKZIYKkh3sAx32n5f8eanErkBJdqP8FThgIPwkJ76bJjVr1jNi9+WIJqhO/sgqbltOTbld5SnRYmJA9Nj9BDtQLZ6cm1p4moIw/A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: YFT/kB1bo78EpBHuC3Y+f3VvUp9FaGzai8rAse/HNZoQTLhYNcc/dT96+5scJ6Wri7diQqVXc5CbkAkX8tax23+sNiclNBCtI1bWsH0F4upQ79izrM0TbKU0LKh3f92upO22Q0h7lcknrUyyswnXAptLszAeaGgOrq/+VNa+Skib0VAiLBHxJ2YYu3/tVHEGKVq0Gy9m9NZ94BUmWxvSajCHQAe1mh8Jt0Lu4U/XwmfWdg8+9JD3OZ7vvrvHrpZZuwDXy4rljuxX7dbfxBB+EHFrkZPSMcTE3Hf6mdRYDs30e4RaWSp0PSoKYImkZWZc+Mx930yczldQleGLgGrsHcnSOGkfruHahi8Wmp/XoYFsFRuxivxdrKjcl0+YBQJzVqWae2K3H0+INrBjOncuNMvmxCvexSkVKCxE8IMB3IyUrcBoOclHX7sByyCWfxrcffX5ZVQfMjp8UHZD7u211qC/MK/VnJz4GcOxpnZXlWKItLJWkS8j0Ib+XaDOQqKSr57BMPvh+0WLmi1gGsddImmuvl15uWJthAkpHeWTYQ607ZLlsQpfyqvXXp7dKi3M2zIw7g+LT5tecgz8srcjn0j6wNZM1zYJUIAFw5nEKBA= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 051b9637-81ce-4b81-9427-08df081639df X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:06.4864 (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: DivqwEgPZeVQAUdt0JBJCVjKN8M+KEW8usnxDMGNcumzQnXL42mhn8CJDvoK6Hq+2R89eIgyPtJbWSvsSHUbJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Authority-Analysis: v=2.4 cv=Vp0Txe2n c=1 sm=1 tr=0 ts=6a96acf2 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=YKYambv--S9dnOAEj4gA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX/4WFvLs8bRgr U6YF4Ed44ZwUSHusKziLgYRszPlZLTTjisiR9Ph6gSewm/Jw8p8IQk3jzbiaaPNzITiqEwZEKhB mZmCTmuy0+WkK8vRtFAfamvxFgLBaDDmiqOtRmarvW+yTEmjq+fx9V9HORDtGW1DFOAYQcCdDgY H/mE4Mjed6F63YiSOfCDinrRVHqFT/PRXiC6dEYBxanoKMoGPBzLziZ4M707iHjzOe7uNCgHWro ig3r/rtHfUuH6XVGbvo/w+LaZZ0thwKeMGnMBjoGf7g8kMaFKLidb9qbJ3U3chfq0/Uo5SI3Wr2 UkklfQpADOhU8fW2m1Auzpcdk1R+DjVUbXTASh1Qf2suDyHfooK3ed98/YUGIkUKy882Th4tBUO T/Fj4QjUCbX8e9qvHrOrFovRAwjklgWRp57IwWFXDzNQxSXEjc4a5ddXJgH86InM83SHbaMtYuK zFxNCrNWsu733WcyabA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXyXCM+3NoqLTO rIA8dpg0on3WUnT0cMQbDyzuZrvAhZDwN8/gOXgJjkKj84Q3HLPcAvo5SBK2NpCQyUIHb/hpLfN bcUihau6FHi1WWDc+BHoqwK4T4aRKv5FonHJ9PxqPGTuiAqS0Tz6 X-Proofpoint-ORIG-GUID: Cw5XbjbbN96D685kKOxpj1nJllGg87CP X-Proofpoint-GUID: Cw5XbjbbN96D685kKOxpj1nJllGg87CP Content-Type: text/plain; charset="utf-8" From: John Garry Add support to set the multipath iopolicy. The iopolicy member is per scsi_mpath_head structure. A module param is added so that the default iopolicy may be set. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 52 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_multipath.h | 3 ++ 2 files changed, 55 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 1c04947d906ea..7164bc61e65e1 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -61,6 +61,23 @@ static const struct kernel_param_ops multipath_param_ops= =3D { module_param_cb(multipath, &multipath_param_ops, &scsi_multipath, 0444); MODULE_PARM_DESC(multipath, "turn on native multipath support, options: on= , off, always"); =20 +static enum mpath_iopolicy_e iopolicy =3D MPATH_IOPOLICY_NUMA; + +static int scsi_mpath_set_iopolicy_param(const char *val, const struct ker= nel_param *kp) +{ + return mpath_set_iopolicy(val, &iopolicy); +} + +static int scsi_mpath_get_iopolicy_param(char *buf, const struct kernel_pa= ram *kp) +{ + return mpath_get_iopolicy(buf, iopolicy); +} + +module_param_call(multipath_iopolicy, scsi_mpath_set_iopolicy_param, + scsi_mpath_get_iopolicy_param, &iopolicy, 0644); +MODULE_PARM_DESC(multipath_iopolicy, + "Default multipath I/O policy; 'numa' (default), 'round-robin' or 'queue-= depth'"); + static int scsi_mpath_unique_lun_id(struct scsi_device *sdev) { struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; @@ -99,8 +116,41 @@ static ssize_t scsi_mpath_device_vpd_id_show(struct dev= ice *dev, } static DEVICE_ATTR(vpd_id, S_IRUGO, scsi_mpath_device_vpd_id_show, NULL); =20 +static ssize_t scsi_mpath_device_iopolicy_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + if (!mpath_iopolicy_store(&scsi_mpath_head->iopolicy, buf)) + return -EINVAL; + + mpath_clear_paths(mpath_head); + mpath_schedule_requeue_work(mpath_head); + /* + * Ensure requeue work completes, as this work could run later when + * the mpath_head is gone. + */ + flush_work(&mpath_head->requeue_work); + return count; +} + +static ssize_t scsi_mpath_device_iopolicy_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct scsi_mpath_head *scsi_mpath_head =3D + container_of(dev, struct scsi_mpath_head, dev); + + return mpath_iopolicy_show(&scsi_mpath_head->iopolicy, buf); +} + +static DEVICE_ATTR(iopolicy, S_IRUGO | S_IWUSR, + scsi_mpath_device_iopolicy_show, scsi_mpath_device_iopolicy_store); + static struct attribute *scsi_mpath_device_attrs[] =3D { &dev_attr_vpd_id.attr, + &dev_attr_iopolicy.attr, NULL }; =20 @@ -204,6 +254,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_id) if (mpath_head_init(&scsi_mpath_head->mpath_head)) goto out_free; scsi_mpath_head->mpath_head.mpdt =3D &smpdt; + scsi_mpath_head->iopolicy =3D iopolicy; + scsi_mpath_head->mpath_head.iopolicy =3D &scsi_mpath_head->iopolicy; =20 strscpy(scsi_mpath_head->vpd_id, vpd_id, SCSI_MPATH_DEVICE_ID_LEN); diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d224a15ce9c2a..d6f290b84f7f5 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -25,6 +25,7 @@ struct scsi_mpath_head { struct list_head entry; struct ida ida; struct kref ref; + enum mpath_iopolicy_e iopolicy; struct device dev; int index; }; @@ -40,6 +41,8 @@ struct scsi_mpath_device { =20 #define to_scsi_mpath_device(d) \ container_of(d, struct scsi_mpath_device, mpath_device) +#define to_scsi_mpath_head(d) \ + container_of(d, struct scsi_mpath_head, mpath_head) =20 int scsi_mpath_dev_alloc(struct scsi_device *sdev); void scsi_mpath_dev_release(struct scsi_device *sdev); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 365FD47CC75; Tue, 1 Sep 2026 10:47:49 +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=1788259670; cv=fail; b=KlKZO87wUxYImw5PJJxHUNcGyyTyNwxLeQQQn0bq4dnZ+LyrYU4UOZmarqKhXNwpUoDmr0dEXNSiGuKUBZVZT49d8PmuNPg65onyJY/N7dKzOudODXh7m5f83Io3Lv9TGtVpWdXR7NMP7m1XyMthjwJaehpPw9opLvALFHUI3vw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259670; c=relaxed/simple; bh=B5XC+D/K7eecREwi47Ova7lBvJ7BYgJLxt2VaUTRJ5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FR7lwUeedKWqEO/hT/xUtWEtN4F7iiTETqy6aUSTkCPJIewvm8zmxgCdnkcMSuBeNVMMhmJzymGQ5e9HRzFtM8gquZEbUelqorWQ6enMOHqAZh2JF4TUHg9m7n8Jl8LkXTov1Ba4rVVegs1UajOIuC3h3CzQcfMe5sT1/rcedYo= 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=bFUi4g6B; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CFaixoUe; 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="bFUi4g6B"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CFaixoUe" 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 67VLCjnX2848122; Tue, 1 Sep 2026 10:46:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b= bFUi4g6BKhWqNsAJJxmgUBA8uubQlEzFltQUWwaj0MNJsNvhFkuHARLTajoEg+H6 TYy/FiBYVZerN+pVfHFKjI4kRUnLfahxXB+gWA9oIplXdQ+dNflAr/FivNjWwWy1 bOniek+yIiAhknrmOMvIisHd8SUwOwLRvQfQPBLEcSUD/fVhKjz0vE2YvQ1f4yHe r0BWYURsT0BM2jVt0xElfrAy/FGDSWU933yiQaZANot4xOfPQVRYP10U4xpdGZ/b rcf15HIIB8/o0bGkLWofbUrNx+Lu9XnYj8Gs0oxyMyjQbrjDRlN4RZ6zLNx8NEiE tosZc6cpsz7XlcRWjC31FA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbavehc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:12 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681Aja7d001164; Tue, 1 Sep 2026 10:46:11 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013026.outbound.protection.outlook.com [40.93.196.26]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqac08-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:11 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mWmwdH0HGp4zcXZ//eiyHLll81slRyjSRjEN9K4Ylnp5Bp+Hpci5Lde9ODpKXScZyvMK5Vq1+8ntfKmWOWeZqSrb8hAvLHyfQ9O8BvbSVPMBz2f23RvPNcUHfMDjtTgvQDetqK5telDxbMacZMxS64bGvdKHlsLwM2N8Y68mrxlcUD2/RO1CKbm/2W3Z2fbe1qNDroq6d9fbxqNFDKqd/J12afWpPYhEbDjIY1pNKzNkKaolZcemjeYH0ipUAF5btWaWcFLqK57fM5R6nQkoi1eKC4GPnSIh3t5OAt/QqsnCQ/m5dXF96OZ1+3PkmbUzECQNVzujv+hhAtnWMErGDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b=V2/P+1NdlhnV7lYdo1Lw0Ceyks53gwp1miZ3ZdZ6RZ+JBLQGsUpHDYqvr7j5C43IHhPaDSzEVSy6zEL7p5ZjIUKw/1Yy5Rjn71206lv6XV6w1fAiEs+nUPdQzk6eq4i1KlzCSdkXpbK2K3CHkgiCMnXWjUzw9scNkdZUHUN6OqtjZXsgmO3PBL7A23y8UdN7UUCs5TsBXa3Q+81e9Y85I7BJUnTcmH+u/KNJ47Tsq1oJQ4OLbU9a1qpDXL0z/b+APbhEAmxwPi2qsG9RZuMzimmLIiLK8F832bWE0pA/wW/+/C9mc6PqHlPmKgJN68CIzLiEZk42SdbLk/tkbs0enQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yowEivTEH11FKs/qtsaOoa6ih5PbxcKY+XnaQ7XBdSM=; b=CFaixoUexAnypxbeso2en8nSR3TUdxaBM4CLc4khLKnsFkVXm+sxmo3/FIca5+J5Pp+1aDWsm4IPtKSyjwyn8xq8Q4ftU5Z4G56lv6P/O1pOpUr3YlvO8DVeEeLWRmqpkpy1bFjacsDFjxb4TWW03yapTVq35GBQd3hFAli+230= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:08 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:08 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 15/27] scsi-multipath: clone each bio Date: Tue, 1 Sep 2026 10:45:14 +0000 Message-ID: <20260901104526.3850621-16-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF00013307.namprd07.prod.outlook.com (2603:10b6:518:1::14) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: aa9ac8bc-98c3-4716-ac80-08df08163b0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: mdEVKYbnKlU5RpAkqfKMy5Kw6eCOtEALdVdwQ5SZDGcHTS0lji6PaQboIv/ZkjUUJBP2YuWDnOQdx7P2yA6vh+ZXByAmRTsXQBTRrMH4K0WzxH9Nws4KOXIz6j/kx7/YW+V+f9rLIQH2RmGbpCFjKN9tbvg/OaXqg9sv+QUvHXSxJ0bQSPU6Y3khMcvaM9VH5QYCkloEFtbL5QuIIMxINLjEfRPhfo+Gl5wqe8JEKlWa6s6Q2yzFQaqQwaOPXYD95UV3gHK7rYqA1je0e+jMNLwde8Yk5wqKk79zWb7mIPKi1OKw5iFU2CKoEUiGR8RKDPRFuSNeMfQVfmQjUGfIcoVs5FvEucXIEzn+bTj3ywIWEKGXfrMbcYm2PfuptOQDif5HL3Jek41AmH59LkiywVaJ78svqrZ8e+/JfJY9PA24Sicaw2YdJKz/Ihoh75G9CE+ZnoTesLLd2TrCwKAIRKJUfj/ItCTvlM9iup4r+xa4NQWup9byVbnyb/AV/04GJYEVo8WVJmP7L4sg/Esn4cwbpnPt7Py0BJQB2YuBcnbadAQG0hW7GZyOrPzkZCiRTfXlb3VpyJiuu5iapZFarSiloYkUHHk0TKgcxSrA2ri+dj72rBXruAAdE61K0R+AAp1yfrZ05AA+wYUNN+jxYBgGB0EgnXRbYo9kxrKbAws= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sP61gUa1rmli+vXwr64R0RKM1hi8UupMP9PsCOqgvJSgNBRB/1mGppHmXeM+?= =?us-ascii?Q?wW6xJGmr5Fs3oU+PJraEBG4dPtCIN6yv/7uj3MG9ATN3L5RPXuVn3uydOtsa?= =?us-ascii?Q?nmEXmeVih+fyHQjOFmGj/CkqiGy82g+xaIIWC2CWCGegRLhuyfIdozId35Rp?= =?us-ascii?Q?Npwm7spSpBoheXxpMElR90bd+fWiMlsohO96/CWAkG1yYS73Fo6urgOKhLKL?= =?us-ascii?Q?vgpZn/8ZOi0PqsdFE4Z7pbCatDYmVh34mI8235QPK9AqAlaUpy1ZLqfTe6QJ?= =?us-ascii?Q?Ga9ry4wuz7rlWh6AZs//RsQtdwNSe09bQ3xbCtsPGKowJNIuPTMAbRH7iewL?= =?us-ascii?Q?7NqXhjdNLD570g8qqMJSfniaAvdZowu5vF1RX8ZRB0hE8zHxTFVkV9k5siPJ?= =?us-ascii?Q?wI1wsc/iRqnt3V7QgYb6ahdazFx8sZPY2wGirNfZo1qKcmAitYZ4haCt/+QA?= =?us-ascii?Q?oPRPDECsd/eQDHkfh0VlvkbgoeXDsbGRHKGZXRUVm9xrXLBuVIUuHOKIFGhp?= =?us-ascii?Q?ldtNyQbm0iEdaCgGCjshs5FgbybgwIVYUchlcAdqyGzEUdyM7fyeSJjMa7sX?= =?us-ascii?Q?p8S6QKUOvpFj1fN2EcoPmFCjIn56rzdWI5jQ9+y67Ss/kdEGtyVPA88hHc0X?= =?us-ascii?Q?Ig8R2REf2dxGj1GUW4kmkiH8U0UU53+XmRwNVbDpyg0fG7yj6kgrh0punpwC?= =?us-ascii?Q?kSWXLiAj9ffjupbyJkq1IQWiQgVwh+9EwG0n4w7yk2eEMhZjqY34aMh912Gx?= =?us-ascii?Q?W5VQeS9RbBHn1k2RMIT0kt8dlg8Y7wjK5OhD1UAcrErvzCyb6AMO+StNR/N5?= =?us-ascii?Q?wCoBgS0X3aDmzpXmojuwYC6/MvGF2HAAf7/EvecuzB4ypf+5+ujCRgpLMfqc?= =?us-ascii?Q?FlT4nmrmbq/RIHG9wGMe5iRJbaVekol4dNa8IeOLZ1oDkhs7Hgz0whcosM6N?= =?us-ascii?Q?b2U4AdoOJSLxMWc3XuOxnTwxUj0TMcAgPMSGN6yiqySMHwl/yIUHlrzfrB1i?= =?us-ascii?Q?X/UbmYvq7C20eamyV9TaMLNfwf6Da8oFst8rkI/oV3lzICkzwFX+yZSSba7h?= =?us-ascii?Q?GBIpDHW/H3BwpVFcEc+9SthPn5K+iMwIFQ6zlZ+EVUhAegUoFZp9MnqrF+Wl?= =?us-ascii?Q?zwFCHYdJjOI0r9iLrfJ4R+Pfz8hBw6nR2Uyz7xrdMS7xNarEuaPHGZVZmWeE?= =?us-ascii?Q?3gtLu2hgeoCnAGsInYZLebuoQjmA48BOROw3UsN62G3RCQ86XnBrOa+khhX3?= =?us-ascii?Q?KORcIXKIdWscHWj3VFUNdLxPvhra8yl1P2YfFL+MHiZMdepnNNtwBN6zLRCX?= =?us-ascii?Q?59W+C2sqli3h4Z54qxjGbdk49DWZyuHPr4qPBrhgLEmJu1M0e0EONfqprxfD?= =?us-ascii?Q?Kdn2Aae02uw3wI/VaERjDNLD6y65PLUdrgPRZrFbomKh7WcmwNMdL5PRsKLs?= =?us-ascii?Q?8iREInKMVzoHF5cDY6AXJhl0x5Dpzv8/S7+pd8nonFyqb0rA1GkcV/Nyumca?= =?us-ascii?Q?QECCAc+hi7EV3TYAaILptX9VluY3X7nb+ddMXRtefbR8PNP6NeG8jgBO7HqI?= =?us-ascii?Q?A5AxOJrn0I+l7dGrxVQyy6Sy84IVmccwyqdCRHKm9kdiMyVXnpnJeKtJd7mK?= =?us-ascii?Q?UmpqB2kgEnuO0nFpwSo209LMOp6VLQ10rKRl+ASgEP+aUlSIA9fYzXJYf9M2?= =?us-ascii?Q?usFy9mlktUu5v2vWdnvkQBWhfQpwfvImUjeufs+WaC3bFSFtXx1pxqoGQnA6?= =?us-ascii?Q?Ol+DYcvXMuFu1uz7PZn7d1tu1XAWsSk=3D?= X-Exchange-RoutingPolicyChecked: oWgHZDCfv7bk3decv+LVyxtEJ6cyfcIMjH6zSJjGA3vBqhHscFBalZEBUBN6jDe5OFWuYRMzO1swIMah2D7f8rMX0l+52Q104APJScF+KyEQPvc2N6Ylz+FyzwcTh1BhVs9ilZ/bqKEn8PNvfz/5cicTOx1QV/tvcXRp0CuVZfY+6+JfXcQfLJ9fwUxLfrNHcwTpDaBYrJUHT68p6DUwPkIpVuYTMii0NpqF+NeCDkL+OOuyX/5ZYF66mkthjzm3HZ2UqNb2PbMYHU5HhkaN4SRE0V1Uf96sbkSBPtbtF5EiMxpqMfM6J/KJ1LfMDG5qtaNI8pFhn+cSpzfLDDV78w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 8UaPADu4JJSNqAewTOZp/D8Pv2h+pNyLByg2BApTUbEvTEKa05wntZ4xs6XrjGKqdPtC6yVgPPnFhBL7T/ieiABtCgwYBjBPOOLZdpeDxkUNUKCsiC0kTltc6ITkMlRN1DqSkEJoo2HInMmIGNpsO4FUYc7jIMOewuxX6xUQnZzYGwkKJ6pOlvVw+45UM7xJ3uKenwmLsHyh5Uq5tHBklgYuOgGvhFpxo8FVFI42IvI5FjeMtZc0a6fz0MmUhhLcprvS2ig2bzhwfxkaGccFZwoWyRPof4w6G+39gK2ZRjt/Jsc6nBV4VINc3500zVcTDQd+pJAeCaSumN4R/ETmzDmqhyOzPyWPyE9hjtNpodjhEfjYDZ0mTNEM6cj7J4UI8Nv7nBe8QOr4PSPvlDE9xGVhalfHL5jc6d+dfHTkGRUqQ2c4N3DJtaz4AFoW6GWAGLNVfqEfHLUl/tss6QvMNXmsPhC4BBMs/TNbd5o5+FIAdUtwvq6ce8sLOq05noEFlHBJ15NPCHwXcmKkoJqrhl3bQ1UdONmpY1xfe7nYUvcAfea4A6G2H2a1mMO2/M+NSDYkcpHyfbk4eu0gwtqsYIf6cwFI8O5aVuPxJUzR3os= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa9ac8bc-98c3-4716-ac80-08df08163b0c X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:08.4163 (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: j2+e+PaqsatMRBbvrFJHQep4PBRBkPabeJvDpo44LmMQjOt+R20vR40xK5rkHYntzGdYcgiLFBGIlaaL8Hd6FQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX8bmSqGsL6ZeB H9voz6wInhmigC4GMg/oUmuQ0GlR4U+AfYWaPImmyDOmFn3DSJF+56qp3RJMdCkz8/nqfbVDRof G089Sj0jc4XPbkmzB2dJOgvIFiKRLfCIc6f+Iu1Cx47USr5q9BNR X-Proofpoint-ORIG-GUID: uOgwZAxme4faSMxvXlk7PLt8ZTk7gLTl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXzh11zKQd6srO ioz/z8LWs9G18ki5Z/jyRkjNx73CUghFzWQ+m9WUZzapMo5beMTm0WioCtw6O1w7SZ7FeoWOZGA 73ND2KTQuOWAig7iPX1Sp/f1joo80wC3wjbhDROlWH1v+iK9fc3hsUSMpbrwqi+5eF5onIrNkCH q4sTgLdkT8uXnsWFfZ4Fz8Try+Q4EpDYi5E5PbAp4n9yaNwGzHms+5WuByXFomcVDdP9JCj15y1 xMCkrqo2Q8SnEmbFIS+XHFchEFxpnjKfi+djyYj3ah7COeCmmXCj9PXZDxqTAfzdnQ/XaIdc3wU myC5pzjLTjouciWe220HuXIeTLlqrfQC3KEKwv5t8k4X1xxgB0DSV/BUzoZYL2p3jMFSeTx75C7 jknROtztlEmqK3jGe4gc7Y9PCbwITmwwdWyOuNEMy9/CV+4P+neUTosrO+8Amm+heUjyscWNyxx bWRyWyz53flzHyJHIgBUkmExGWqt8AXD6SxU22Ag= X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96acf4 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=PbwEKb89bYuBhGpDIggA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12102 X-Proofpoint-GUID: uOgwZAxme4faSMxvXlk7PLt8ZTk7gLTl Content-Type: text/plain; charset="utf-8" From: John Garry For failover handling, we will take the approach to resubmit each bio. However, unlike NVMe, for SCSI there is no guarantee that any bio submitted is either all or none completed. As such, for SCSI, for failover handling we will take the approach to just re-submit the original bio. For this, clone and submit each bio. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 33 +++++++++++++++++++++++++++++++++ include/scsi/scsi_multipath.h | 1 + 2 files changed, 34 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 7164bc61e65e1..68fe50f62158c 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -99,6 +99,7 @@ static void scsi_mpath_head_release(struct device *dev) container_of(dev, struct scsi_mpath_head, dev); struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; =20 + bioset_exit(&scsi_mpath_head->bio_pool); ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); ida_destroy(&scsi_mpath_head->ida); mpath_head_uninit(mpath_head); @@ -237,7 +238,34 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +static void scsi_mpath_clone_end_io(struct bio *clone) +{ + struct bio *master_bio =3D clone->bi_private; + + master_bio->bi_status =3D clone->bi_status; + bio_put(clone); + bio_endio(master_bio); +} + +static struct bio *scsi_mpath_clone_bio(struct bio *bio) +{ + struct mpath_head *mpath_head =3D bio->bi_bdev->bd_disk->private_data; + struct scsi_mpath_head *scsi_mpath_head =3D to_scsi_mpath_head(mpath_head= ); + struct bio *clone; + + clone =3D bio_alloc_clone(bio->bi_bdev, bio, GFP_NOIO, + &scsi_mpath_head->bio_pool); + if (!clone) + return NULL; + + clone->bi_end_io =3D scsi_mpath_clone_end_io; + clone->bi_private =3D bio; + + return clone; +} + static struct mpath_head_template smpdt =3D { + .clone_bio =3D scsi_mpath_clone_bio, }; =20 static struct scsi_mpath_head *scsi_mpath_alloc_head(char *vpd_id) @@ -263,6 +291,9 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_id) scsi_mpath_head->index =3D ida_alloc(&scsi_multipath_dev_ida, GFP_KERNEL); if (scsi_mpath_head->index < 0) goto out_uninit_head; + if (bioset_init(&scsi_mpath_head->bio_pool, BIO_POOL_SIZE, + 0, BIOSET_PERCPU_CACHE)) + goto out_ida_free; kref_init(&scsi_mpath_head->ref); =20 device_initialize(&scsi_mpath_head->dev); @@ -282,6 +313,8 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(ch= ar *vpd_id) =20 return scsi_mpath_head; =20 +out_ida_free: + ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index); out_uninit_head: mpath_head_uninit(&scsi_mpath_head->mpath_head); out_free: diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d6f290b84f7f5..d2ef94ebd29af 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -26,6 +26,7 @@ struct scsi_mpath_head { struct ida ida; struct kref ref; enum mpath_iopolicy_e iopolicy; + struct bio_set bio_pool; struct device dev; int index; }; --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3699047F799; Tue, 1 Sep 2026 10:46:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259607; cv=fail; b=ZNnEH9Zzhd1VKfhNmbeVhw26j0M2BccJa0jkf5vn+W9bdes9lsU8cqP/+Li71YgIeQ5syuOuMJsSw6hbp7FrpXkEtSl+xP3Lg9FuQExEX35v8M8l6XUEq0sYmUdIyEFc36syrgu7IloRP0YWJhsg9406G5L1q1VZ+2e9goeG2CE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259607; c=relaxed/simple; bh=rN4WLse2mszC5fHR3FpQ2K4e8tFydOaHtdZb0/GqiH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ujk7joD6QC+/DKEOh23Z/bduPSxx0U1GYVJRNPe5Oxm1PxH5pJg+95VKafkpYzR0kP8aN5P+Yj0Z9r3142gEO5opqZj5Cfk7IXgu86R85uU/3GgSRHIBXFuDEQUlDqWBnupPH913dKTPWfqmEf/un7SWYONRUN0OQnnoqxQcbmE= 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=nl/vpxvN; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=IB9AAvQE; 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="nl/vpxvN"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="IB9AAvQE" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLCXqn2681332; Tue, 1 Sep 2026 10:46:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=saPm83WRZ0+DozbHl3Pl8xzLBWl4UAdXTBPeM605qcQ=; b= nl/vpxvNQnoRz4pQtJqGdV9LWKA1XBRM08QfFXuK3fnV3B2MGg9fQodZg+Da3kjR irgu7A20dZE5P25eGziZoLR6IAu0jGqAe242M5lzWiYJDP97D6bgwI7RtuvIJpHl 4NQ+pbbmCt1sqDHCyeG392Pl7xSguEUx3GqApK/qCSn9axkXxgjw9t1wgzJcoEVz flOfw7I3btPnr7/nn3M8Yd+FaEvx+xv5+45LW6ULnVs0HQYGK68D13MCyI/4h72x yycA1ugjH5XkqJQIdGx/pxy0EkwxiF/z+jJKnP3PZXSp2j5XqgVUocM6WqFhGL7R u4qO70sgGJ3DAZUA8vsVEw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqa7mbyk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:15 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681Aj5bj023275; Tue, 1 Sep 2026 10:46:14 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013059.outbound.protection.outlook.com [40.93.196.59]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve0j8e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:14 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O6IoE3zbEf2VAAYL9c1t2EuLlBS6ynvMMtITsb+PUu1HQpOjcbrttdkVwCh33T/7GMBm2eshxWvKVIe56GS+6gkIRe8e2J8VwBmF4IM20gZ5tlVbPIh8Jf2YUbj5cI7pSD7EBClkmhfsY8NITbUQaZwx05Hf28rrjOVnzu45d3VT9YXmYHKMVfbKcR4vpqhDgdrIKcILvp+DlYIDOrfi1MVPy1galQMKisw7bEotcF8Xypkfz3kHim6KD874ViEEsHeGhP/ia7zYJE7pzoyUe9ELreXSHKlUHGaerWY3tiUdSTUvmLzs3t4v8T25fKmyJuc9QNDqbxYOg/nrslj/7Q== 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=saPm83WRZ0+DozbHl3Pl8xzLBWl4UAdXTBPeM605qcQ=; b=o1LtSkabXT8/qOhvaLe6lGmejPGm8ty73RSzooSWckC45gijHLgYSiR4rk3RcucKVzs0DRQtmp+R/XcFGWMrjxH93hiXCenlT3NQIi2xBR6ffoqcUUiZDEswnUrDUwN3LZ1ZMkFqueqpd+whayhIReLEz+av26RlbuuLBUQXO8LHD8MBPofiuP4lS9+ABVMm5/zLvoEGriP/htCGE0H73qD6TH1E5G2yvZkK1qAQi48U88XCUKHFqIeonuupo2QPwd8qbdw862e/csJatbup3UW/AxkYDQxkjwMDHpN1wVrTEntR5DuZJsXY9OCmK53jY7m4fKf9TWblouXjYGW5xA== 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=saPm83WRZ0+DozbHl3Pl8xzLBWl4UAdXTBPeM605qcQ=; b=IB9AAvQERgo7YycxTkRVgi0ljpcNi14gh/JEcsNvJCr2vZan5Zi1Fa6Mp5W2YzWT9DbYypx1oh3w2vePgizRlmb2iGnTnZx2tsf+b3ZGsWcSefFdbxzswPylJT74vRitwDAU9LemQFB0T1wnNlZxuCSXgEI+GxY9DsvGqgzDYbM= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:10 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:10 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 16/27] scsi-multipath: clear path when device is blocked Date: Tue, 1 Sep 2026 10:45:15 +0000 Message-ID: <20260901104526.3850621-17-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P221CA0006.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:32a::19) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: ebd9d1f7-5491-4bbd-e42e-08df08163c31 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: l3VRSFdWtAeT8COWcpiw3Icqsz7Krjw2bvr8Nsoh8sKpkxZieJg7NFhjsP0J/uPODbhKYiIJOkOZBMX2Ph4AL5Qq1y/RsuQwSJNDtXizTxNVAHcsoHHmdFDeC5aaU3JiBfpeLvA5WshNxeqNxK9lTicsRER2MfPqHhELCNk5Eoa6+Who46kvreuA8IW2dnoZ2wMnQ8q2m/fbg7sAq9hD+S12d8tYicvml/3zIQJYyxmJGPXBAZrjkQy0LoFEPe31Q2jXaTI21fcBcvZTx0kop8UWYGgYuIq2r8cwMiTtGfgxPy82raKoBKJMzdMpokGbTR4Js8BvsAVGcVDvwj4oNeHsDSILzJgXLMSTB9fMYecZ+H45YMDp73RAOFP/kCV83OAbgpfBee0zt5c/A0fOqPDT85qVmbPCOwI7VbaRQ2oN0SCf4QODZEXG/uGElNfoN9iFOgsakwd2p2ejUXw/wJ/JyShOejdKg43qYQsbfdywuvqtViQb0NI6cdqIrMt5mmZovw1naKataZI/40Gv+HNaWx6qNYeIlDsReut/w7WUpi5X/2byh91u9PyiHhl7TQhBu4Hbqpn6rsxgIY0/HxPy3os7Rwa0NxaLQGHnilE8HK7oOl6w+fmY/BuWdNg2tldCC6cWJseAn1F5Triz4WCGU5EiQGXCxEYadKXsqPE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MUeSRCem6z12mnm86KZXybHhNSYG7+D2+LePMoNMTx7CNSUEGB+K8CcBrN1p?= =?us-ascii?Q?Rbn9GF8BtRofWiBOeRy+2yd7z65bYjh3pzVI7kr+GLhScQ4EhkDNjdxGo/Ku?= =?us-ascii?Q?FApsq5Ym2yfare2o0kwYbvwUZ4EG+yUv+KL6YP98gfWwqHkzUUEUrP9DOMgq?= =?us-ascii?Q?X7XkVDMBfD5Rl7k/zk+1wdesFQs6DdbtH/T3kH6oJha/e3koMSvMIelQEnDm?= =?us-ascii?Q?KUEuQAKFoBrF1hr/MDpHEJGJnOXgIhH+8K2Nadm6RsKguN7t5XbZpsmfD0pP?= =?us-ascii?Q?sHYPGvUqsTUeKO/md1WXWZfzQMq6ymjaJ+LcA+RUFjdjtcsBxppJ8QhKEdA1?= =?us-ascii?Q?3slwulq7eyD3H1Q6UzEx6wStHmBbqtGu8YqaIjESiazsGRPCFO+RrZ/BYQbC?= =?us-ascii?Q?iWB91k201bfQ7qS639Ovw8Kc7G4x5pCa6XDfIhJ/mIifzEG9/i5I91SqMRwc?= =?us-ascii?Q?2EpOt5CQtXlT3ZkkaXvf497iwp48U03qxHN5ZJNch7laxMr/q/EtYew9NRNZ?= =?us-ascii?Q?4pThZJ8BeXhNiVtraunGSE0ERII1ME32YuvhREZd42j1YqlKR7mMdRZKPsm1?= =?us-ascii?Q?Genqp+kZZjyaZTY8AyOdm11Sj2VbesoMSd1vRdhdvamyALDYBQ0/Ei2AGt8B?= =?us-ascii?Q?WH8HECU5d36gqDEWdsNW7atsDt8bFwzSx7KRGIVtq7jdaTTdkB7iodqsQj49?= =?us-ascii?Q?nXUCPq/T6/0We86p02NWbS64qdIK1s5ZnnYb5NLVgF/Ilm75FZpIi7yyNF1d?= =?us-ascii?Q?G0id3+6q3MJA2cv8baBTCPrft9v6HTICZP91GXh4gfqC4ojSrtfRisiQK8eA?= =?us-ascii?Q?iD07Hea9OXhEwuuxy6EdAfBf+manfi1e8CeSr0LSkQuo+bjArN0C8ncRBaES?= =?us-ascii?Q?oBi5q+vkLTZUk91vAQgnxPJUEVABkMGSoAkaQ3NCQ+LIeEYnXKK7o/nDL75o?= =?us-ascii?Q?wOx65Q4x9C9HBIFliCVzmSre7te0Ta19mO/aLq4W18PXLD6BWWwOKC4s3jBj?= =?us-ascii?Q?odLOsvMPHfwB0v6m6t8fjP0Eh7CCIUq5tdm1VYgoB+YYpyMqLPss7bCwV0xj?= =?us-ascii?Q?X7odeS37lWbRwMSOdpvAl9HycXwyi9Sp0vGahxM6Rf4hYbAhpTZbc7FGNxHq?= =?us-ascii?Q?UECFpGz9Tgj20q/i+deYezxnDtEZt3X9b8ISmovwkvAXxO980ooqstVsHlie?= =?us-ascii?Q?82j72rbxd7R/cShQMHrVOnNxGxtUZ3SYWSGdC3CfkFwwyO77ajGgLo0tGYEv?= =?us-ascii?Q?u1HDfGHm3zxGJF0MOuwF8fbpsZiLcjGRQVku3N1QbMjB+Q2AWyxSixGaLlm/?= =?us-ascii?Q?qJjNEcYhIQyjgp+ibviizIeaUSsfpsH0B2uFWcVxFGjCoBAm3JzC7D6E8+6c?= =?us-ascii?Q?GPoHsy0gdSyWoiQURO4ubCsXna2k/RCJP57SFP8Mtw4wC/ZZi40VORtvloT+?= =?us-ascii?Q?JJEp4vGKdwBVlIyaz7snIJamsoJfx+FnvEVLcIwDAT+BIKfETkL9hRCkEsnI?= =?us-ascii?Q?zdx/L0D/+3btKLewZqjVU0BnujoygztmazrTnCWlMcWSJ6rdtTvVlZpYEGTZ?= =?us-ascii?Q?luHsaLcj+HFavemV8wDhwNeWOMFZ0L24IqUjJVu5JdQ/RNgPGaaJbz/t0G2t?= =?us-ascii?Q?a0FNcCUDZXex0PMersUaiT5cKgft/ZUfZBNbUzMFBdBtWVUIRk0Vpe+VkZpM?= =?us-ascii?Q?GEECM36DIxH+/De3YR7Ls/FHkxr3HiPYDN7inG6ie1V8ozIjB1qdWa1eWpUf?= =?us-ascii?Q?QTWwc/yOdqK++xsBKjg31ZrNKNNZax4=3D?= X-Exchange-RoutingPolicyChecked: D/cD/OT1GZLZb6fE3UCpLB+vyZAiuZ5vgs1+uze0T1ktERLp4FC9pCwi/QjocEOpkEW1gkA04WRHBFdiN72Ik4PMs+i07rVgcFwZNnhk3Gj6AyIkY7gTKpogOfgrZ0let1r6TnJSiC0PrWIo73T04zx2wNswH/guVasC/b52QcKw44yt1ae6kWXD2mD0CrupiaBPnuWbysiB9oiYvOSMQGiWrbxyzkvHvFlkAXCbV35DpNYagAP0XjBoD55jMJHMP16zPpq6nS8OiXszwMQ06XQ1I6UwVfyVIiwSAiw5AUna7/8pnHD2cdlNgDI6rorYYIKWXQIUxZXQsOD/b2WtHQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: eNX+mS42NPQ19V3owOr6KTFxyxRG/VmswpUn64qy178HMjUFhhb+CnOfc9OOR4Ih3clJG5FgonLxrgOUBq5S8swJa8mSvenYmLjms5qD+bwxBJo0LsZrAFJGSXZVlUBXJ4kydYHwqVbEyCewff+4NPgdHTqclQ9utNwreRYc9WvzP0TsfivB48uJuBS9YbbcdsDeaEpbX7czfgWRKxP/3w4xrh/fLSZZxDaCGzMg1lKOHp7AcEBqr7MhQA8cxz8YmigsWKRqvPlj3ip9FZtOiFiniEfSFBemVewMQ6vI8rUr3lf4Lf4HR9Dq4/9EcYY8taB6x/ysTkpx2PjAnkkg5tNUCEYfGiUEI3EV7rbR2alfk+Fzvg4+oCZV1sHK2j2iUzzee35orpYD9PjTVOXjuVCDeRwgalIm5Erpg0fyK+4vzdBQtDqvoWpCw2weTG9GwS7k0zBneLUrdu42IR3P0QZl+26BrBjMeaVvCHHUutkbUeFkX4EllbDc8QBBB9IkAMZINuyT9khAF/1x9GD7BrOOTtEPOW2je242b/eG177zq//4mkEXNN0BuyTlGVP1GeE2In/JQy713/fWml5n6HtKQTwQxqgyJsJqWPYC+84= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ebd9d1f7-5491-4bbd-e42e-08df08163c31 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:10.3986 (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: sIUHqQyf/UTAWFq+IVqDAFwbG3ikgtufmDPYOTcDTcrSOryxoOnEXatJG5oGGxbMFgM3yDhUgdPzPSs7srJsBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 spamscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXxxFjXb57z5MY WCQH2z2HyGISbrqJeVP0x906uFZMxcu4dTg8Qwmp9h9CiagUQnc7hC7S/J7B7nkJG4H1VS96IMO I63X99bmE4DlZkUA0wGjZ5lWfZ87dx9QfIJpFIgYz14g6oGWq+3z X-Proofpoint-GUID: nchGissrZSWQ1JcbVupaccIy-s-RZzFS X-Authority-Analysis: v=2.4 cv=DPu/JSNb c=1 sm=1 tr=0 ts=6a96acf7 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=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=EIcjfB9IiI4px24ztqRk:22 a=dGdLxrnxUM9qrin9hOsA:9 X-Proofpoint-ORIG-GUID: nchGissrZSWQ1JcbVupaccIy-s-RZzFS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXxlG9MorF5We9 xSEM6Srzn75gQ9hEje0FpBoI6bC/Ar6sGHPsRh0m1evhftaZXB+Gg8bdRvCwrPUbEIHE3fhN7Er VQrL5HnjtVA2xGZaIMAJZQ2V4caIiZgS58o2kk7IDbZmYU6z8qpv7t4vnpwfoxX7IDm+dJnZqCX ukO+5TrGTn95KfTFvfic55MKkvzaOVY9Go8ddkUW7BydTzHUyOziWOJVqGVUaCl1XvL1WQR4oon SUGIl2Pu4r608ZWrkr5ocTqLk3/ziweaHsfGS9+0BZcsotme3VBgdvUuwzbGGtBQMprkm+CPt44 r6wC1ut0SOkmOIY5FK0s3R6ss0hCIPwCIzYNjDtsojVjDL0+8JnxGCzvEUgI2IT+Z1AxkZg1APY 6chyWuvQcjd8gXi8KsKcNY1/Y8Nb4WabIqvZUSpjUIGqMuGlq+ze0pxeVkgsHq0RSoM98HF0CDT 0dyPpAJSKqb2qpHltig== Content-Type: text/plain; charset="utf-8" From: John Garry Add scsi_mpath_dev_clear_path() to clear a device path when it becomes blocked. Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 3 +++ drivers/scsi/scsi_multipath.c | 10 ++++++++++ include/scsi/scsi_multipath.h | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index af27fd3df8d46..f02b3a50e20cd 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -35,6 +35,7 @@ #include #include /* scsi_init_limits() */ #include +#include =20 #include =20 @@ -3009,6 +3010,8 @@ static void scsi_device_block(struct scsi_device *sde= v, void *data) scsi_stop_queue(sdev); =20 mutex_unlock(&sdev->state_mutex); + if ((err =3D=3D 0) && sdev->scsi_mpath_dev) + scsi_mpath_dev_clear_path(sdev->scsi_mpath_dev); =20 WARN_ONCE(err, "%s: failed to block %s in state %d\n", __func__, dev_name(&sdev->sdev_gendev), state); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 68fe50f62158c..b16fe6a55fa73 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -238,6 +238,16 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mp= ath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + if (mpath_clear_current_path(mpath_device)) + mpath_synchronize(mpath_head); +} + static void scsi_mpath_clone_end_io(struct bio *clone) { struct bio *master_bio =3D clone->bi_private; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index d2ef94ebd29af..2064a3e922748 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -55,6 +55,7 @@ int scsi_mpath_try_get_head(struct scsi_mpath_head *scsi_= mpath_head); void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpath_head); void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -99,5 +100,9 @@ static inline void scsi_mpath_add_sysfs_link(struct scsi= _device *sdev) static inline void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev) { } +static inline +void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BF4247CA65; Tue, 1 Sep 2026 10:46:40 +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=1788259602; cv=fail; b=oy+ZS3mps9d3dLUQk1P7Wxm4MOdQ4C5kBiR/ffYp0yBoXNldCYNA4vx5VlhAoi525a0d4sVOl3ZCts6kaAACwvE1SM/uvDAUX+X7eaAOhysDfnw3N2Th5ABz8mMs0jm05wUPMTsGfkdl+ObqUDZjFiSGJbxpAqbuNSYAtcZGiCg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259602; c=relaxed/simple; bh=nsNbSwKN5+uvuJy2Uera2kJwfsY1sTqi1ZKrIip/ybw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oMNKSNjqPpDPqb+PP4AigZ7Ax2Omozjr/OvXMcfjhLVeWsyZF4NObf1vB2xlw/vPwXgif7ooFuqJE1EEM+HL5KeibZ+ueg3B7yap3AX4LFGJKFden9cN+TaJxXMoAzp6+HSeYfPlE65ypU9rjJEe/KZrJ9XEwXyEoJ8hjp0XN7o= 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=ZsRRxtlr; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=t15q+MMH; 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="ZsRRxtlr"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="t15q+MMH" 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 67VLC46F2311414; Tue, 1 Sep 2026 10:46:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=FPs0CAmV74ww23o4lA+2MPWaiZjfYFK6xB5v41+QnnQ=; b= ZsRRxtlrCQV053n9c0Vau0x1h3CxJl5TNQrPuofG/0Iw45EMT8JMggAg443jJaAJ L1BK/bnTKowsPe7QgrY1CeKT8dAwZoNXbTWra4C6LWiP6KQl44MiB4nCooxByXWj nYkJ8GabvytSclkqPApfgGlAF7SDTIQXtAr7sogS7EWPs7ulj07LY7aqUAX6vgxo v1rRGfp4b+FRgaRhAgTjMorUxd0j6iWaexLA21uzJMmoqG05LWScx6sD7Efx35gH FU5p8su3CCWzBWefCxzIgxCSjveIlDmntMfLNNXIHqinW8uc7sZhyS/xGquVrvy8 M4FeDExWTQ0qOIu49tKAMg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbq1smbv6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:17 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjLsJ037148; Tue, 1 Sep 2026 10:46:16 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013044.outbound.protection.outlook.com [40.93.196.44]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve34qu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:16 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H3Yq2HJd2c1wFZ6Njqcr/HJ6LPqL7wj5Hq62awzx7+NiZcCf66mjBWbcggmMaxixViFS4xPVaiGBdF4tzJSIcJGzp5VYLb0wibN6etMlYZ24IoO1RGK1wlP7Z0hMH2ozEolZgNU+Y4/jUqO8Wo4jzue3rmK03UgG/B/PkVkEjiYRGSoOCjBV2RK2HKnsREcxvR09QWBIlk6xD5kK/0+PepscO8DIPPXJVmiwWD+OG6RoJa22we75LDGoW7zYtsivCKVfOqjACGIJ+Ld+YGAKnQ1t5m3FQ39pUxE1SsVdluOPK1v3Debk1P3agF1e14twxes+sL/R/NVrm6dLJPDYUw== 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=FPs0CAmV74ww23o4lA+2MPWaiZjfYFK6xB5v41+QnnQ=; b=Jpk4sPZj0NZhXRbXgBM5oJKJQJpxw0lfkIF6I5ygqt6/P/j9IF8rtGAmODy+gEt8nKCCQ0Pzqa5PTfxC03vQ7stxZRYEA3+4ScIcjq+nREACATCLDANBt8vY9RpHchKL0He3vXt5kw3e/PkCRuunxvSJ0zvkb7xwpaQAcJ/TtjEgcqmT+9IlBMbbBqzOsc5sH4KdLz/xcodsIeCvdP6h1jeuRvHyii2hu2AA2VwKWzz4ALB+gd3L9pnoUTTRaGR7PfKQuO30nXaBKJtE/oQ63e/5bGE6ROyX/k4eBzyoZz8w76NqKpW0jvFjC2Ju9BBpNvki4qAqfU9nYaSjEeP7og== 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=FPs0CAmV74ww23o4lA+2MPWaiZjfYFK6xB5v41+QnnQ=; b=t15q+MMH+IQYSkxfdxjPjC5wJ4zbClOdxbv0+O2Erxj75iSLtovqIyvt+t+auusKOtbtupTgvPI2I8sK9NOfInxEbdLWU0E4ZqrE5sVb/Kin5dFVftcsMPvbPQRsNxCLrO0sdBHwn70aO8Uo6rO229kfpbN4deDAnk6oLsfkKE0= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:13 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:12 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 17/27] scsi-multipath: revalidate paths upon device unblock Date: Tue, 1 Sep 2026 10:45:16 +0000 Message-ID: <20260901104526.3850621-18-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR17CA0002.namprd17.prod.outlook.com (2603:10b6:510:324::22) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 420aac64-2473-441d-1797-08df08163d62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: 4dNCrpVYFOfZuADI3bWQ8UumIqOlipb3mi0vBlx+apvm44/+WZ9KKiL7pK5LOpSYpW5+rsYJBDzSZTTkCxtt5aNCnptDQKRwZkVBNj7HjHlviLmKRFyxFEJvGj3gt9U6wXyjCg9WIQywNJV5ErvGP+grNrCKjLn6E8xU8myjWYHtThAASjtK1aN4pXeCVTUoYfpZbSlVTyLcENPB3AI3XTmaic1NTuJoWFJnt/zEe8kOdEqqgXpE6A59w4BgWpChjHptGrvly3j900CVsdKBA7qEXzKK2fOJSiYRK/LbGv2hlyi/48Nm/O1sT2MBbLb7akQBar5lna7kaPRHZ9BnpIN/1woTu9fvps5Zu5JQj1aqodiCjqPy9w5shhoH6l7Mvay8Gx8CRyteJHbRcD9dXGD0wtC0MacEmQ+Qns7I6DVDx8m7gNGnnVLE2liRpoohMq/A88wWJQg4oM/VD5k8r0IIiReaHODyaKktwIPQ9c4t3CjBFaHn0GYwxnKeK3RMIbv+OSSxg+zMsRB2rBmRfz5joiWyG0VUlrDOGjcPKyqvmtXt9U4BZ1OuJwfZzzyrbxHgoEumpOYRsj3WYZpLZqdVE5yys6oLIuQdZYRzpRN4bbRo3e9dhow0qB42F2Ta8pbT2JvwCD0Et1Nzaf6mBZxQbF4+315dZALkwYfN6H4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?APpd9VBk9ngmfOInDsk0ju9Qv1+bmfQvCWUCkCBuvvSpg3IH0H8xWCm/ya7M?= =?us-ascii?Q?IfVOEtpzUhYKJ88fr3WFqN+dgS/nM304XhwlQ9DkroUCkFx/W+gBbiL0/gLK?= =?us-ascii?Q?UaSZsMAZVVbGkp+RTmI9tKeB2d1y39WYGRxMe233plQHFgC6S2YdmGr9xu7w?= =?us-ascii?Q?gbcgT4d45VQuRAFVrhBEDIRlUhUDfDR9e0GQ2/O7L1zezepVcb4l0yvnIoUT?= =?us-ascii?Q?ogGkMrI4gquObBH+cemnzIBPBYJw2q1WFp0fqFUs0/rjBgJvf+dpjCd8Z0xr?= =?us-ascii?Q?dtjsNn9Inso2ZD7vabNvUe45hx2JDhnpB+q8bqLaEvgzvm4su/BpJRjlOkg4?= =?us-ascii?Q?pYetGCRwDdrFwUuuIBaxUS3TUNgOcMdA32JcB4MnbSbO0viMAgm64PcnImtT?= =?us-ascii?Q?kkNz9Kq7UNc6a0v14RhiLlLdR69KQ9WrHTAv9AV1kNcOxf9sPO3qAK4hlhI4?= =?us-ascii?Q?Z1m6xjKew7oXTPzrqe7ZndvKksf5N6kBFNzx1dNBbBa2xXBtukllHlile1yd?= =?us-ascii?Q?3sZmG8GjnM9YCABdo4GoYlO0KY8c96kuwNcR6j85hbpymNvvjGVI8wJFUPXP?= =?us-ascii?Q?cxp93o5i7AMG/4u3/WFk4se1vKYfhqVBKkvmoST3UlTvuQOymHrx66HqckmA?= =?us-ascii?Q?fgbdFRzZSSlnuz9aDkOAzwDT5gIIMNyws7q0s3W8BZQrpBQJUPnVm8+eWGsG?= =?us-ascii?Q?1Jt7K1IkAZpmwQdF5m/v8tbRFGx8mjwIS9PCqE9mg86WNJSofqtSHQudiViB?= =?us-ascii?Q?qztMI/cNq/QEUor3aGjaTTsvfZHjdikE8Eb56x5Fwixt85kNcgia+19OBWOt?= =?us-ascii?Q?ISxm/skvJAaT0VcFHVNmX/obJNhY9AeX0U58gZCD5HKlVPZqnpIFc3C6bMCn?= =?us-ascii?Q?EfaeeVDS7psJPqBTQllZdRv+7Sr8021Becp402lNT9ZaHk8A5oTQzIOrtCt5?= =?us-ascii?Q?QzYpbUSyIuAX4jJFn7OleOa8bN8zMjZa/9AYC1T85qtIIpBJAvn+IkCnZAY+?= =?us-ascii?Q?PN3Jjpu8uQxL4Pr7Cqlv8MAnuRvSmeDbp58OidO6f7qmTbIzI4QX4Akxik7B?= =?us-ascii?Q?8+V8qS6eJ1VBO0Yo3RupdyXwqTEfFChGXnOvFqPp8uJGwNcyaLXlDWteF4mP?= =?us-ascii?Q?G21zaDPTbEKJP07xMDZ5qnrBzInKfj71Ll8HwAcnqiZHXJSnOfGthK5JjnT0?= =?us-ascii?Q?14yHm9+FFQlrRCTBP/g7+uCsu31EdmUXye6UMeLT/iRW+tximiyfxWQ6i7cP?= =?us-ascii?Q?/MVQIczL1/iGPbnxfOKF3lfnC2G+ub4Cs5F4f4pN4tUa2uvs/uNNSE4j7THR?= =?us-ascii?Q?2w5F9ZXsJvp6eUeUalSATmOi1Sy6ae/q5oVWuCY8apowqCQgr8ScnGx7RwfH?= =?us-ascii?Q?ceIhHNAGWJ8/PDSJuQtpnMhn88hIY4ejyXpCOa2xasmaMv5DC+WsRnN2f42d?= =?us-ascii?Q?qULylzSiI8Q8mfQM9NrL1ieA3WP5DjzNy2CBfaBQNZk7r4QX/2yGC4YcMnTt?= =?us-ascii?Q?au+HAatZiPiXEVHMuNKqvCt6pW5WS37cerKd9Yc9xhK4coNSz++Uen2ksXAc?= =?us-ascii?Q?5B3Mujx2Z1ywkQTAtLsLnJDpyEyreB5/6RWbxn12UXJoEttMwP3Io7sX4uBB?= =?us-ascii?Q?u5fZQRgBn0mUktfTuli4hiUFR+XCmPr4XKaDq0g1GAmkg/D1L0d2eYwLt4uY?= =?us-ascii?Q?TMsvzDVa77WUU4h5TmFobpdCsR6HSZAN8Jz2QQ9Oo7vw7F3+Hqj4BJsvP/Hp?= =?us-ascii?Q?Oxa0YNg7z8UJO2Vr1Ioc4RTcHKAYq6I=3D?= X-Exchange-RoutingPolicyChecked: CPJ0+laXMgEFRmNENXSN3SW0nW5EI3SIr011cCuJPnY9Ho1MsL0liXJeQONlmC43ue5hJn0dklxZN/CssIcXuoIvCWyyIuCTcxvsrrZR9PhkDfp0KD4SSnyErl1xnAaQx42us3hrXHOzn9cBvatZyiW9K0dCsXTJACjqu2SXAyQ2MgkIScUCqNKUc7sAd37l5yy6h+XWVfpTTOKgHGSk+7N/Eh5S6iwPxwxCK7p1C6tdSwPkRdEDPRh8VPDjUzM0PGZrredXlo9W0dNrPD163exbchQYfB1a9Syk1iR9c/yTcysmPk8tZzxu6iVRArtO5ZRSPamsYKBFKYMIwNZ0gA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Oq1vY2wB35z65y3b2DFs6SerkR9Pzy5DW6nvlsk6mAjgPmfU/YrWijK1aJVaZEkHERQgpw98yQlUpGzzV4CosLRes/ns5wL60kiZ8muXsKnfuLf7TGBvhR3kEXWUq1V8Afp0/T+MfCuJl2yioSRvSo8g36MStLK3kccfx/kVjQlRgRCiPgXZeYJSfj9iEIWP3EOUQ/FcCiIL/iImPI4u3+uNiVcAv8i/V3lI7xUldGSLFS9uaWixpZ++MLBjfut4mq/akWdEoCqI+D639+3UjZ9kcqW0BE2QWqWiVaQMZo0nMcoEuv4MOU/fgpFQYzBsP2Ppi8YzWlrevivYo18Lj95Riv44XrkqTHC8WKq/N5wo121FpUIkq2cFYp3oV1t4+pmKfDQj0uWuV5ZVH4a9fI+SLRlg20atfgQ6275SBDnPt2SyKHst+C+1Jxu6FMclXv2qrTQsa9TxO89SB8RJDFD585Ocw/8O3aZcPAqXsAhWQIbtuPKie/p4pNqxDOCyjX+c7trcGLZqoWYOlxzeicRooN0BEwarxmLPN9mBoL7w+U/IF7WzP+rS0WB7j8g549OBP8AVZakVzu+vCAh+WANAN+tSzOKQML6Hh9G5MXo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 420aac64-2473-441d-1797-08df08163d62 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:12.4276 (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: 3WwmFfYf1Gn+3ymM9jzjF7vRlTil8CbU7YkVlnk2s6AivLHV+BySVTBSLXuY5HjhF6Ip9qkOI9QLyDw64PGrAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=922 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Authority-Analysis: v=2.4 cv=Vp0Txe2n c=1 sm=1 tr=0 ts=6a96acf9 b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=dGdLxrnxUM9qrin9hOsA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXwkGyOQYJCwIO 3UBCjQmDzq14VCl8wyYj3Gdo9igIm/Qkcw91iTu8WF5EyTTrt68xydqu1DFEAfUGlf9f50jZbbZ 66hKnOCN4Ckf/fzksGg2vvyDtLMnmE8hQX6LaQzvJELgOq5j5SlK0o0/dIcUcWsZ1KltBiwBIS2 /1zXXjJxnNj0ehik2NqFDWKUMLUKQ255qcalY8OGF6Bs2bPzpaN6iptuJtSOMQoLYgQMlGumWUe cPUuDhhhkMMAxZS9vxOOHEYU0RCPvI3Iy2Ud83bF3PU0+gY+m2fm6yQHvGcgG5GXVf8kOOAyLQh OSDe8KqhT2iLgNgUjJDUfmEpYcJ7WMCWS80xEFy0GOLemL0WUt5YC0Qg5wd6u1j+ZKxBGAZmbjX IWLd1ocr0pNZe/lOYPSC6y94KIidluG7ClZXDpb1MN8F9oJjUgYLn9f+oRrYmq78yyPi2nlSRsy bueONUx56hZyT3VIM4Q== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX+Q2XVIJrCpot mZiB/ofN8TczY9Yn7wnkQKf32dyxDO9dyQ1gmyA29CTdwt67jbNGMNm5qdHcB0D00CrO+m8nR4o MbayNgqi1rekwkn323UBOp4RpgxLJqAdsS3vVozM8Mi6TD1/mcim X-Proofpoint-ORIG-GUID: JdZbc2FKvAqXZvFg5VF6tgK5SyPbT3AZ X-Proofpoint-GUID: JdZbc2FKvAqXZvFg5VF6tgK5SyPbT3AZ Content-Type: text/plain; charset="utf-8" From: John Garry When a scsi_device is unblocked, we need revalidate paths which means that we clear paths and requeue any queued bios. Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 2 ++ drivers/scsi/scsi_multipath.c | 8 ++++++++ include/scsi/scsi_multipath.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index f02b3a50e20cd..189263ce56624 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -3093,6 +3093,8 @@ static int scsi_internal_device_unblock(struct scsi_d= evice *sdev, mutex_lock(&sdev->state_mutex); ret =3D scsi_internal_device_unblock_nowait(sdev, new_state); mutex_unlock(&sdev->state_mutex); + if ((ret =3D=3D 0) && sdev->scsi_mpath_dev) + scsi_mpath_revalidate_paths(sdev->scsi_mpath_dev); =20 return ret; } diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index b16fe6a55fa73..456351fee4b98 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -238,6 +238,14 @@ static int scsi_multipath_sdev_init(struct scsi_device= *sdev) return 0; } =20 +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) +{ + struct scsi_mpath_head *scsi_mpath_head =3D scsi_mpath_dev->scsi_mp= ath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + mpath_revalidate_paths(mpath_head); +} + void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) { struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 2064a3e922748..6e50da94fc5dd 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -56,6 +56,7 @@ void scsi_mpath_put_head(struct scsi_mpath_head *scsi_mpa= th_head); void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -104,5 +105,9 @@ static inline void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev) { } +static inline +void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) +{ +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35AF147D93B; Tue, 1 Sep 2026 10:46:44 +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=1788259606; cv=fail; b=UslByMsx9D5to7QgZ1TD23YON5VpESPT2/b4jb/hhgzXXAJgo8E2mPAEcYgZy0HTAi0Abb0eqs6OIeRTY50mg4SDiEFq7cTc6gnm5BbDjGK81ll/lbilLSozx0nDYrfJILaYYqMu00Rn2NCJZtEdonLAvN6DBFmhEUnDyxf/hJo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259606; c=relaxed/simple; bh=7wcqtgkHnhAe74JUtIFrFylTrCRLUC/KbMS0CvIrSvI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UfviCTKeTtyhzuhgvWnH4CW0dDgcM0vqD4evpO+430ZHh7u3l+4ePjcHUJZHP+lSL4h+CweJZVF6nZm/GUIOi9aW55vEuBM1flTl0GqOepw1hW/rPl/CzyEHdaqhffNdkV8tg7ON72ft70kjgAk80Jc473o+CwFH0KZPb+JFpQM= 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=nozj5YZa; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=EF0z9AOc; 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="nozj5YZa"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="EF0z9AOc" 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 67VLBtwk2846774; Tue, 1 Sep 2026 10:46:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=hbqzcuEsPdqOUBsipDrHIJ3A2EtCUW+jd5jKcHYplxY=; b= nozj5YZaY4+b88sCTexWqy0+R4JZp2UXPL+rMXTYhg/gsqrYz5nUNcfcjs5cWDfH rC6apO70H+Bh4r5HV03MRkkiKQHDHRCAf8PqSjjqXOeEm/uMX9rXWJ1k8z3IVS6m qW/vHKZdM5qGgDShHpvqd3IbYuQsIp+VCT9PeNsdOqb8G9eBS60sO+Mq6NXcw/Wu pkKaSXZ4NYWgRjd9KtLWgMwuquWEmfS5JKM5nwfceaFkUW0pfWEZB4ovGwabqcKO Avd2n6EpuCImLGsklKbqJoTcvZyLb+IgED6Xom8v+iX9nvobt7zrEm0KYL6cG7XT 5ErkmyJHsYn3FWLc2QDgYw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbpbavehm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:19 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AjMxM037329; Tue, 1 Sep 2026 10:46:18 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013045.outbound.protection.outlook.com [40.93.196.45]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve34rf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lWDfMup1w2FSTBucGaSyAJ/XnpDl1tIhLmoFHspBkvftcvCDzZ6Zs8Wop3HAZ1svLyfiFKeZp4fbf4rNn7STLircdHgeuuxTbtRgmg5CLZLMja0Ih4ayhZCIm94mhpGcYRKpCGZgRmMZ00YwMI7tXMiHO6L1wXLC8m3VLVzB8W6+NkI/GZG2d9X2HQ7OxdMNNSMYMLL5KZDTPdtNbuzTDoP7byYGWl2Ncd4V/pZfdVp51vFeZamUtC2um+BgAistyyBmnIQrK0N/nUzCyN6bj1h1LDdp+gVNxRTauZYokZEGlmqNW4l+pEfqAbTCUiLrVjul3+am+ZZVfn1oZRGeuQ== 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=hbqzcuEsPdqOUBsipDrHIJ3A2EtCUW+jd5jKcHYplxY=; b=KxDlJV1oVQuWoQvo9MVLDQCnGrA5yfO9bzCwmvWLYsWMUpRtAg3XjqnB4S1b76cHUrZVfSZRO5qXTpxCbx56mYxQvZd2ZGXJ8WJgFcz+9y6aEmlHmbykfuUIOL1KueNsdl7CKQyvCUn9K5E77PQ1A2GiFpzoeR/QnE8HKmEf4yJPfu+6ZzgAW8T1TXuGAMmfvBEQi3EY53kBz4YUnY6nQ/QcXuozxpAnhxtEwYFoYNV8//V7mjQ8NYOhkGwnZkm/4PPk7wX6yGYhwX1qD+524cYCxAMKu7d6LmONgON47SAOYT7unx9wQzBsG0Zyzbs+XVbduY92A5mQ+09Xpi4HHw== 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=hbqzcuEsPdqOUBsipDrHIJ3A2EtCUW+jd5jKcHYplxY=; b=EF0z9AOcDXS7K2ZFMlfyypXxiRnalOOV0BzZCgF95Yw5zGElD3OSraiAYOBJX+vMcLBWa2hPbljZSA/8OJJOo3D+jWJp7gej/K9SFbb52gU61UgflbhIH8BzIsVxc9YXu87H+iHRm6vQrpp+oW6JLroAFB2uO5K5dWgvOoN8lfg= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:14 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:14 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 18/27] scsi-multipath: failover handling Date: Tue, 1 Sep 2026 10:45:17 +0000 Message-ID: <20260901104526.3850621-19-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR17CA0002.namprd17.prod.outlook.com (2603:10b6:510:324::22) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 6af25da3-934b-469a-7d3f-08df08163e9e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: Ul+EVmmcsDQnEsDDBL9HL8dghR8I/RBETokG/4Kh1DuUsgHBq9AOnUwU+jB/0onUeGWj4Oy3YNAqoYE6BSI5o2ugeYeojuWDBLw9s3Qqc4Hp7CYqlitkcQngC2U7XWS4fOxz1LrjCuvTl1IW42NQS+L2Knn8aX1xaY4nZdtDyJoUpd/ckLonC6y+E3V5EV5m/iqaVlqJFgasYShY0vffLsSpjo9dKSGoQrBTtpwUiI0GUTGN4Er9ZY0FmOdlI6XfXK+mHx9e2L+Dys5RDjRe+Ylnvj1cUn1rHiMF1b2hLwYukMOClmcs0xfGUsCjijL66Du+XeHSmLpjpIYLKm/4BUE5d4QbuJMavZZ0LwgFyT+l7V4k14QJlvAZWd8aCOzHkvPREnU927iI6dywi9UjEPFDKnZC3/TkiHWJZWX7fiBfOWxQXmO6ZihBcQ1Cc3OZVjQSE22m74y4Hw5x5BoO2ShCmiK1tz28IS0RkjuqXQli+8FFiXhR7LUT0Sm05skXqm9rJYmyocveWACXAOHyc3Hd0hAXJuKvhxUiMx/VvEMQhShKslN9pi9AhbewYuyOCeDFtKV2X5t+CLbzo7FMMQFsNJGow/lgQPdPTvcOdmLJc/GhoFWO+1M6SY+ZgYu4jaPwyYbLHkp4YvFw66twf+bONv0iKQVtP/ki8JYH6gk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AG64fcwSR5/J/21Iq+KREnR8bmOmT0YYKkosTfouQKlZcqEMxOSnkQrIy+N8?= =?us-ascii?Q?j9UrW71p5PfYC/sVzfQvbs2HY7R4iaFkW10q4AMk8UPW9T6nVrzBwbNSCREP?= =?us-ascii?Q?x0lFjKPh7pVhek9kVqsC2AN1st2PLi8U/RV4MlZMvsnugsN56EtC2/vOlFm+?= =?us-ascii?Q?CEqIHgqoprZmu66gK/8tCiAESDjjqqwxW7jg1AdZlHV+TK21Hl5CKFMwipNS?= =?us-ascii?Q?OW11IYDuDHKKMFcXjI9AjdWm/yPyHfQADy6OPJnrbTPYyIQL8b6tq/lxHRxm?= =?us-ascii?Q?qXDWxqlpUrDrS39VJ2V7zacvfpPmfLOhExR0jihzVfpSkrH0WLq57gY20b+i?= =?us-ascii?Q?6Cu+ec65I7cV0dwhW7nH0HpD0oqmbFJyoif4Ty6LRZMN3MqO3IwcvakpXz8j?= =?us-ascii?Q?22EZF0dKBvtiOLsL4220ZV4cic1/EQqLaJ8TrL3XIDw7gsXS0aanM+SQBtc1?= =?us-ascii?Q?o13rUOSuhbnH6vZo3bDIzw7c+s9NpHEeQ/w/Osb7nTVMjd83/3rbSXwW4ifN?= =?us-ascii?Q?JuJbCrbYSgJg9Qm00uS5tR+phI/0dszMJM1CFtgdeFT8eOaEEn3FBa/IzR0g?= =?us-ascii?Q?ZIG90y39a9LA1ICwstu+ltIyl2GdDejlFpyGGaKGi8kaCOCnFp/kqYkvx7MO?= =?us-ascii?Q?a+1rU6CmhFBSAZ70v8cYjyaExZi5YzpR4ZU4Qqdnh5ST6K3/dhkfZjxcwTLD?= =?us-ascii?Q?2c91waHSVB2bH+nj08fbHbcfUfi3EaxojmYn7Yov98F2SkxsaBFmGHkRIZh+?= =?us-ascii?Q?tVj5kSRq38oHtsI7b03//jDIVK0DTMYf1Aqi5ZYAiu/HBBsg4zSE/vzCcmb1?= =?us-ascii?Q?5OHwVudCkd3MShfl7IHwWZXchOQ28Ksm1m1jFnsBsaTWDJdoJAzygO7K+sUT?= =?us-ascii?Q?8BsbP+PM7ltbjW0Tvbu/jdU2tFC/WnoXJa5JY741g/fdRveN5wwVovaM6mXN?= =?us-ascii?Q?GMOGd1s9fTuhrzqFDYx9mcl/KAY+sEBUlKHOo2/WbNV+6zLxqo27pBxFeQgM?= =?us-ascii?Q?mOHn6U+JTt6M5OHTxWid/m7beoaKqNTu2tuegcAwVzg4B57DDVH+k92KrHEI?= =?us-ascii?Q?ghMWbyIUhcIlW1NnarSe35Milx96eMd7vhw+s8zBitiF4vfTh/b1dUmrNkKb?= =?us-ascii?Q?iSzz5xD13Nzs7PJ2FBYqQx9epFwEOGgrJvn0VvJJUw0WgCnDaNgJD4pae+/1?= =?us-ascii?Q?JvUvAs0lONr/J1JNCir8SSRVUmGwJSxRWDS/9S9u7/zej7n4BqeW5f5uhFjz?= =?us-ascii?Q?qLKoJuKi8MHYNQsn4Ry/D7Jv6XNH2ZLu0wtPplJwkEcYzUo78tJtB6tIqyU2?= =?us-ascii?Q?NBGHc/b7vLG5blmna1nyCvkGEWlROEvOLAlumWM3tzEO6/WWMf2Y1PNjSOWT?= =?us-ascii?Q?uMcpDCp5zRX1zRHB22wAQW77Ipm53IwsEKq7OIyGR3euMpdA2EMZQnI69h7S?= =?us-ascii?Q?yClN/oJ4cjzY6zNN9uhbrCelfWb/6SWnIxth8ffPg1HvsUlrD/nBkohfLeDY?= =?us-ascii?Q?kWOtFrUzcFrFr5ZgWn36huSxC/DAzxP0JVf+0C1m0R0qEFYNOkaiWq/5IU1p?= =?us-ascii?Q?hS/ccJaXuuNtsGL6vHyVmLgcX5+hXyQMaFhcioqULxGgyhWhCXAzRbLfcpPg?= =?us-ascii?Q?kQ/oUgpzKOTvkarK06qGWv+Pg+EO1g0lQ+vS40EgsJ5vlCTs9m+t90NSV2rR?= =?us-ascii?Q?RknxxT4P9TtO08RMpp2b/QQw/sAO5+9cDkWx9KE/uxS6+yASgZmIUepg/Amq?= =?us-ascii?Q?qxpsov2q54iviRYfpi7RMwKwdAVJv14=3D?= X-Exchange-RoutingPolicyChecked: JZCKZyy6TJ8y1heQsMao4K/edlhu3ijx0S+vklWl3kLzWqNOjZiZ3YHTN/bpmDmBV2deS0E5k+ycJU5jM3m21mlyqUbMf14t5B2c3dCrv6Af4cAFNN7zcx4Iusj+H3Jzefzccz3+wbMBnKC11jJhuYXiYMVT5SSGx9SCPNsPjs72Jv4at7f3HAXzKlv5k+d6rAL9H9owUkhfxlxjTahYJR6UqR/yVw/DK0MfWO7QStWZa9sGWe9YywBaQ9ZUWL4dXJR/aYBnkzfPt+B/QVdZM2uW1lviuN4beCQ9iEpe8rdJMgExMtREmyN7qZCCfZsPxtxqzOSRG0j1VdL9wZiAYQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 8tDah7Npxq4afAU3IEOvkmWf5EUHJVf7Dsd4Ye9dpZ3GL+3rREZZKG17oiiuVtgYyUZyCPCgPhOoNYva4W2DlkiPjsGc8/owvAF94q5hhn10DVUoELQoq0TtCPqKDuD1vO2HjgE5piAEbChNfEZSx6QZANkwpnH2fgQj8412bpbTrTO7S3n4SPDwnGLZjBftIeIIbsGCmbCBmci7kMUJMR4zQSctVbCZKLOJ4UQyMTlPhr8Q9xsvIhFeLpLpbde+7bgFc60qORJYDkISSpkTdjDt3ea/gNLvPVm8lzk//UH/rX1pdKWSTiGk49m+bMTEOAs63dZBWcSk9SuiUR/Jg4WTwLIcn+bGA9rWx5fw2VC9bBmF8f7oK8pTegdQ92qlJEWBDY3wzLo+Ne7VFcBPYUcxXfZivEAom4G2FyyE/aRColJh0d7XVvQw82EZUNjgVaguGGLckNDZGNR5Rx2yMgRxaMF30MdQtIvjyFuJE6+5V7mWPDzo0nfZkydsWfRa1dV97vImiFl4+2wVP+qifrHGoQNsnaUf5AdXXn/Ix5Zj4vWrF++S/3vsyWjGxWjAwwYUFZcO39u41cbQ6PEAarQ65ElWQVrQWRwtFMkthZQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6af25da3-934b-469a-7d3f-08df08163e9e X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:14.4346 (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: KwavPuey+F0dkO3ddbr71DrBBFCcUKvzvhGqB2SXk4+SEJafLR7iyD5EUU1kGVr/7b3MkoHFJsg1dMe2y8nm5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXztz9cmZQ+Y4b cHh5iXq3PXrHIBUEqj4gHUqQMNY/Qmvg9s8q6+hXTr6IMqkl+QCkEcZHiORCXYJaNHzr4mVvgW1 qNzMP66O4IhInQgQee1rcIvJnWZdjyy28rLkUy6uajRKbBqzofIa X-Proofpoint-ORIG-GUID: 48MTaeUeMW1rRHml6Y_zx55vXrQIGqk4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX690QtLmqz3HA QR5jLbauMA8aAU8iA2wp4xoM4I3r6ysgSbi4A9WcAaJiEy0uNJ9PRO2GwadF2FA3+Q1U7BmJk2O 7uObh05PL30LgsfzBVcL7wStxAegKse+BOWc6lHn9PM8CAehe+iqFqjUYh5kTOHTGdMDwuzmGFQ GTH6gQbdvMYUPkuMcq6rGwZze7M2uMxlVqRCgcCfTlJQAszyk0T7/f/iN05O+eZAmxWPczL18jM JHnawK2/dbiG4Z+rBvc8Y56OxooGNfHldsu9S533v/gm07aWGm8sIEZi4McY4Kjrwy4oqDXNq5A owqom7NvTpuEnfvIpXb0xv+q1IHKi6wKLLcDl2CQOy0055jmEpmd8GOPFiF8T4BDtyMDa1Lcsyj 1t5xqPKRYX6IugtbSfstsNCR9jaP+iu1hI0u9OslppdABGKJwh0g2sgJs10MzEQHFoC84lkNfCV /Vc1KPqoEJyEbcrF65w== X-Authority-Analysis: v=2.4 cv=DMi/JSNb c=1 sm=1 tr=0 ts=6a96acfb b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x0eKOSpe3m1H3M0S9YoZ:22 a=KFrTxiSEMK9J-XJLMaMA:9 a=WmVTiCyuxqgg3mnwYu6p:22 X-Proofpoint-GUID: 48MTaeUeMW1rRHml6Y_zx55vXrQIGqk4 Content-Type: text/plain; charset="utf-8" From: John Garry Failover occurs when the scsi_cmnd has failed and it is discovered that the target scsi_device has transport down. For a scsi command which suffers failover, requeue the master bio of each bio attached to its request. A bio which for which failover occurs is handled in scsi_mpath_clone_end_io(). Failover is detected for blk_path_error() occuring, same as how dm-mpath detects this. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index 456351fee4b98..fd28667792472 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -256,10 +256,49 @@ void scsi_mpath_dev_clear_path(struct scsi_mpath_devi= ce *scsi_mpath_dev) mpath_synchronize(mpath_head); } =20 +static inline void bio_list_add_clone(struct bio_list *bl, + struct bio *clone) +{ + struct bio *master_bio =3D clone->bi_private; + + if (bl->tail) + bl->tail->bi_next =3D master_bio; + else + bl->head =3D master_bio; + bl->tail =3D master_bio; + bio_put(clone); +} + static void scsi_mpath_clone_end_io(struct bio *clone) { struct bio *master_bio =3D clone->bi_private; =20 + if (clone->bi_status && blk_path_error(clone->bi_status)) { + struct block_device *bi_bdev =3D clone->bi_bdev; + struct request_queue *q =3D bi_bdev->bd_queue; + struct scsi_device *sdev =3D scsi_device_from_queue(q); + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + struct mpath_head *mpath_head; + unsigned long flags; + + if (!sdev) + goto end_bio; + + scsi_mpath_dev =3D sdev->scsi_mpath_dev; + mpath_device =3D &scsi_mpath_dev->mpath_device; + mpath_head =3D mpath_device->mpath_head; + + spin_lock_irqsave(&mpath_head->requeue_lock, flags); + bio_list_add_clone(&mpath_head->requeue_list, clone); + spin_unlock_irqrestore(&mpath_head->requeue_lock, flags); + + mpath_schedule_requeue_work(mpath_head); + put_device(&sdev->sdev_gendev); + return; + } + +end_bio: master_bio->bi_status =3D clone->bi_status; bio_put(clone); bio_endio(master_bio); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A51F747CC91; Tue, 1 Sep 2026 10:46: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=1788259613; cv=fail; b=QnYhEDv18XjpXMh7oM8mz3b45/rB+PFkjloAGaGLcd479rfowMXhTJsE31gniEJl/1cnm47mtYV2jGQ3q8vUmAORU7F328ssAu5l/lg1ObZKrrS/S8deciu/Oh42ACNRJEVkjWDsk00vZ0q22yPw5GJSNqao3QI2YuSjH8VorUQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259613; c=relaxed/simple; bh=oYzZA+0OlPfEQYwQtiA48uiSnL2QvacnSVYiFwm/oqY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=i9UmpaakEOS+QVA4fgUUdgcRR5cQJqaWhNcVrUNHEamzCuAWxX/cfZmJvLA4vUbnfmKnjeJrbsRYwluIl/ltN74MOk5e3xN6W5QFcq9L0MTZ/sT22xDgaVyycVLIvEvR6r3cVW77f0JJXNjBr8d+7lFpJldH7ZYoxm/exxsVtTY= 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=R/zDMUlO; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=OxXTsE6L; 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="R/zDMUlO"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="OxXTsE6L" 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 67VLBs6q2311152; Tue, 1 Sep 2026 10:46:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=4qvo0uSsuWqHaSRtyFXpQMQze7z9Nr73qGkfNvFW3Zw=; b= R/zDMUlOAIFL3ErSa5WdWXsz5AAqhW+AulSJf7u2UrjJpMmuu9jNiSWJWtLwEXii dkZNEzIOD6/0EGVqD6/dbZNX10FPzutXXFJEuVrMF+5/eWr9Bpl3KKvoS++G7Fav Mpcr8L69l2z7jYDvjBNxUhvLmkBMx0QwZj7oAKXofOj18sQNrT+oEZ+GkEfsxXYC a/g6AUxsR/PGaYOe8Vj/tv4pk7tbf72LUNnKznQP4metyAcnxfibEZKq/D7J1Fq2 7Y4bvxXbO/2bBQALOC2xhM+CtKHECbenCGMFilozJty7xO/KIFI7Joy5+In5lM9Y EQvoPCxyXzWvzhH3SL3oaA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbq1smbvd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:26 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYuBI040245; Tue, 1 Sep 2026 10:46:25 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8n9d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:24 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ptfSWjn6dKZsZpAeM9JYQwMCDoeBFlNzsjUKK0lLglyNXe9nM7EcDu+Fo2Vs4oVrMuMj2TPqLbW8v8ZsvWBVgbYrLLyk0zWRkk5SN2EZCfAHXC2p1gsT/CzZf3lgMZ23VIXWtPYJdTMiIRs0hMuE99LjT0BXU62PqEnzHiTkplLGWdHJPE+e0GgHSRTXj+mYyRqjMrqz27P0R0YjFh+X05PG5DzL4LmUo96lJo0FIdC0DDhDyHcO5JdrBwoCt5LtJAhE8IO8ZC0C/ocYMWIVbjw/7QY35M1HGuwDMhFb7h0TF2AeDtOUT7zEXnGCRf652kmIbgxHyPJd4WTRhJRA8g== 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=4qvo0uSsuWqHaSRtyFXpQMQze7z9Nr73qGkfNvFW3Zw=; b=F1OBeqmGWybx7jFMnziPDLfWZVsUudq1ilQAKCOeEH74zN+0hy2/T6Xs2El3FMY7ybDTOi+ZDzBgfpPd1uhthz/M0rXu1hwrjpNlnEt0TjE5GOtE1buau4+QZHiUhLQEOyfvLYBiWGPcAtwsQ5FHetyGg2b5+M57p+EL6EODOdeWspHlokU+XGFU0MpiQeP4ORX9UQE+pHhr6B0uaz6TNEJpfC0IjLZbTy2WK2JgTtCW9EnSMH/7uOZEUjX78grJO0xkdakOdzJDNwNvPGbulLOyOMvrL0DenoSkxa+S/+9u9zlo8Z4hdQyDUvltJUfIm4DP20gaAY6yNwdcUHW4sw== 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=4qvo0uSsuWqHaSRtyFXpQMQze7z9Nr73qGkfNvFW3Zw=; b=OxXTsE6L9cgUCqepP6Gh9cR9KyWCLE2tk20QzxVAObpF7UC2cHIx13kOoV4k5tEJWSZk+Klnhgaxe4FraNweqOIOVboJMyfLf92DPpbUiFsmDUdmu3g1fbo+Yp0EX7bHBcf8VS2Dn2iPYglCjDUUKv5NEDjqtvrAgjKWJWXZLuU= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:17 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:16 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 19/27] scsi-multipath: provide callbacks for path state Date: Tue, 1 Sep 2026 10:45:18 +0000 Message-ID: <20260901104526.3850621-20-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P223CA0017.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:2db::9) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d4c568a-9629-4f52-ab9e-08df08163ffc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: VGWyd35fKp99A6N3c06hzwCuxJJvRDS1TSoSh2bacxANjDOLgPPHCscpjP+ib59Cuu4tIhHw5wyZ769MT8OKGjIew8QwsJJuGpjeg/pt/2PMpUt4pkursQH/NgSc+wh/sguWPWJVRtD6X1ujT3j+0/Q1UH7vzdaDi2utl9TIzxZ2VElMRMY9H8Ga+LGEPL585/te7II/wlPfp2mr9zBSTQTpPCErI6b9DTAVHv/BUu6YufF8u0s7vDpkXLRZsQFGG8FBKHyMcsOOmCnQN1SZTzVK6CLegS9b2TFXBTiN/7bFaxuV4Xg/GMJEoce3uEqvKaP/R/iW2mJGUGyrWbJZ6VUS4l5M86N/jCqdpZwY6PVqYuUtuIZION2ulU2kaRMJvT3ZTQoRShl3A6RREFz+1oM6MUjaVeygqtnw7oNnqswvkPAuLzOaWE0oexVbdcn2KQwNvXDjyQzNfT5NIn0/92qTOiAjMMZVTgAnC1hAra9rNrbLSPPzSGLjMAxgo4eRSpbG9mJlQAxyo702S/H7zyafeCcoWs3XlDTQ5ETNOhNk5tcOSynQYmoY6BUwdEPCBcwH2wHJrUkUujoG/t4cjktmleG5h1QexRpgUnbBFlU3cV77pLQwoh/5s3RkatIeATkoTM2bM7myRmwnuHPF0UuaHte8EszC7Xeuy0BC+Uw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AlbQdc3ozEDrumStZqEMrj0srTt2P31afmiPZb5ejPxtV4L1UhMnnTpdWXcM?= =?us-ascii?Q?WddKKKZgYL26eGot4SA3NLwxJd0W2PlfRLEbqm0RNpViiLFFBuhFKy2+maBz?= =?us-ascii?Q?ApFADFMdlbrgXXiOr5bu+lNtVZb5IsJcaQLTQJhdGHCYJx4wa49im1FyxjMv?= =?us-ascii?Q?+xS8dMHMRMdBAFVFkNOOpYKCv5bmntmrT6kBREURdtkk/BB3+CpaDZqSxzZf?= =?us-ascii?Q?A6AwsYXpewGz9yiSylio/iGHso/p/y7pYMNFUJcNBVnorCyYTgAKED/8bosd?= =?us-ascii?Q?ctDXXd5N2mG6ojfWeFWe7dZD8iZzINL6XrC/yglSKzjxGvSZgo+y53qjflb4?= =?us-ascii?Q?3VrVNcDEkGkdo+VweKauTbGCQ/dpND+/hUIC4fNjsPPSg0bFhkoyk/A3wOYw?= =?us-ascii?Q?2eSEh6N0iBE81prRZ613zcQDWtkiW8g85kN9u0gIGTWt+yfdMSZsbxR7eVTI?= =?us-ascii?Q?atzzNfjcM/DEL0cGOscYkDs1Y04BJ3AeBTVAyuOoCQXci3k+uRDI96ObCk/P?= =?us-ascii?Q?nQuWYQ3JGeYBX20iyuFJ9vUIFyzmxs2J2+mhe+0eh+FstG+Czx/b4N7CQwoZ?= =?us-ascii?Q?Qyq/H6YjRoyyLeL9NuqVH2XATL9WMd82m/McuykaHv+899bIY6ESvVVxUowc?= =?us-ascii?Q?M78v5dABJSEOA5hnbFOYSG2G2iDTRcIneB5i8RjRxpadPjPnytwoTl/+9JY2?= =?us-ascii?Q?50qPdLFQWwMSGKg7eLxll+LbqsmG/UJQt9NconEM6xctR9l73yBml4EgzaCA?= =?us-ascii?Q?v1a7H//jzYs8U5ZKbwT1B3J69oEsrpW+3GlS7YQ8ZCdduRZ/BavF9z+mGlyx?= =?us-ascii?Q?rV/R/ub/TcVkPACisWOVK87a/lwTfpWDVxQRMdIpMSMXlu+A1izLsWhevCzu?= =?us-ascii?Q?Re/kxs4Po2OOJjjd4C8jsxttRcwKoSpSlcY+h8iFl0Jr3aW0HrXubLv+tcg7?= =?us-ascii?Q?c1UNukcoU+oE2NS+R0rZDrDEcfYVBmPnjZxNFubkGfsJisBnYtwwLKJpoHje?= =?us-ascii?Q?D2IO1y1UWJIYghzP5JUPPtFgfIWzkjs6/c9He+EWwoHnzv4S5+IpUeGrhQUk?= =?us-ascii?Q?L0qtog8knkFVfZkeDN0eUqYY9jJvAAVfQ+wmV1tW5Q5ydA1hFOiVXWGBKbw+?= =?us-ascii?Q?QXSxUtP8pYsCyy4htEDOejKT31GeItmiqHedc0egXztD5SI8vEoYEOe8f4ba?= =?us-ascii?Q?jTtXkQteKYkYIdbLHw5i/JDPYUTPdzej/6gI0eK77bo14dVCw3ef+TdCFSDw?= =?us-ascii?Q?OtKk3Bo3WaPA6uXGjaFAr/J06v0qNXcGY8x5Jy952RQy3jxU66Owj4egAFsH?= =?us-ascii?Q?vC+KAkCbX9uYIZFE9/UBLG6MPVh0i6TsO0fXl2gTm8svVu+s6Sq5B5lCyCm1?= =?us-ascii?Q?wf7qkcDFfQ0nfMiu6a96J0aobW7Mh8ouUxZwdecRfH51xLO7q0K9xG08eq7L?= =?us-ascii?Q?VtgAK9a4M3cpblFwBV3PAiQI0KeB9es4r3ztdscqoKsdUG1S+jzo1v4Xp2IR?= =?us-ascii?Q?c3y9FcZcOGhHLnDxNqtBhjo1u226rJhkdBAyHvgbz9NoChKXRcgEQ9qPxUuv?= =?us-ascii?Q?e1a6Yjrbo1uTjSp4xZw2vQbMm4cyzopljDd88pmEDUwWO9/Mu70sTYfbZHh/?= =?us-ascii?Q?rAILvfnjdNwmB+Zbafd9T2dnTJAHDHLVGuvlDWuf3kY5fAuqG7NPFTBFRNqm?= =?us-ascii?Q?f0dSArMxw2r4u81omBUY4i8JBQ7BHI5oOAeNUp1MqwIvfc5wlnlWDODeuWY2?= =?us-ascii?Q?aUrpctml+bJlHdebCFib77jgF5YAbQo=3D?= X-Exchange-RoutingPolicyChecked: LULJqfVO+bJfS/8EWKPLaP4CFozHpI/PYj9qx98XjsEEwLE/Xfpv19kIbf9CXW4OUa3rJo2TlKGPf3r4q3tKQXjUu9JCS4PzA6BLLstdQBgMBSoxQX3ZnlPIBYAIe36JwsMRkSgsbzZovY8g3xZS7O2USlErWlBJAOdYjucTSmg2OmYhDwEPqg75YSBbEu9QDufJZplSrSh300//wFdo/7SCNYFpW/qpHAUjMT4GVFoVoL/3w/zaQj0SBe6kij8WxzaEDPkfWbwtgrRv888TyeHeWMGKHvkURd8Yah2jk3AjEp345L+5IaNr6DXQSfAwVDQMiyxfhvxrZGJfJyib1g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ZT8Xp1+UV2rnkRPm98hz8Ged/Zv7VpIScCJi4BXsZR4OvZ47zJw1OjJtQkQGB7BE1lXPmJQZuhGKVH1+CxjF318d47vX+gtW4vGxbj9+stj3Gi/zx1GxUD4LhAuuNWwea6FrFBRf0oaFNjfvnTwAr/GX7lM5gJuyUkotX36wzySlFolLQaSlrSwGvYuaPrIiXHP80qQG31HD+NoMQ/06WqlkruByMNqBH+NwmYcMFb63jrdGiBfqxLDcfnNZr2CrS1LcVGfY46Rq4H10opXhH8VbSIybFMHoWO46n1BBHsQgECyJuG+sekqY57Yghe++Wy5FU0nBWZUD9EWbbd9sxnE/irNdkeflK9nim3Bz2l2ApOqhJBgmrghalhOs0bReIagLP5tkx4J4EOIEsCvh5LAwSmRvXUqBLWH4gVAfs6gS62f6bUUb/iSPYL3hd4ZvYqc3E3dvsbUJy3B510ZI1AhBZ2rNpaesRmK5o7rG2pwPDNFHSQOTC1dOrEtxNl4CUq5wor0nkQdRTaJBehdhrfkh7nV6eSh+07e1povMZG7tvDrECRWjuk5GyBEJdr6JijmOBu41aB7C1lSodfdWzi/gZc1+jHa6SHUYfoUDCnQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d4c568a-9629-4f52-ab9e-08df08163ffc X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:16.8054 (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: xV6B01OHfaXGntd1UPiCq9TgimImykJw64BH3K0Rpq6bJAZHWeR7QvBwN7GtN/qgQMV9IEcXiyGoHn9BCbyHmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Authority-Analysis: v=2.4 cv=Vp0Txe2n c=1 sm=1 tr=0 ts=6a96ad02 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=DHJJM_rHgSnfI6yttmIA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX6ConmEBtOHHW n4cGtLNGTV3sE8NcDluPMQoYLAl8JnsJLR1jW75zXwPWCslPsW7CpQUicwtVc81+2AJv3JDwABJ Bjf5ETm1cjaikvYt3Bhfeb5XFvqA6W6X5Vduh73J0mIbzHhMknj4/4YWitLAjkH/nqAxie/xeU4 TewzFBemL8asbkd2+WHGOPpq54du3NH1G1VIFxiXOw3BbluoQItSZ7vsQ6q9UyvVdb1Hc04sNA0 zrlC4msZ4sbSetlOHKbCCNoyypaPBlcWHsJrsacJ7uI56lg0j15UPSCeq/rmppjOC2Nod2CHnMm LQ1rDMODq4r0f9t/DHuvDzxxL01yyzeJ6fwTWEyKHc8wPv127d4yNkMq4bd1/aikfK81Iny1Ytf EGOFZyOjwwTj6yF8PbnB/6Eeg6J0/qrQb/YhOLCZC/RwM6xJA5nwC3Tta5oWMrRPyov3Sc0AJv2 KRFaCAlWc4o+JTCl3xA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX3BVfuD4b1aOc Bb9SbbZZCduJAkvuM1EpzUYq58BqO6GRPnasgEnwDu5kyTAW2xupi7AxeeURGKyCy0jjIz3PaiC CdVjShHrPhZbzL1JLGkLu8LINrd45Ed7PV2Yx02xPzINKauVF8sq X-Proofpoint-ORIG-GUID: 2KRXT6ARvAbTj15ku-lZz0lPUQ2X0m2F X-Proofpoint-GUID: 2KRXT6ARvAbTj15ku-lZz0lPUQ2X0m2F Content-Type: text/plain; charset="utf-8" From: John Garry Provide callbacks for .is_disabled, .is_optimized, and .available_path. These all use scsi_device.sdev_state and scsi_device.access_state. Member scsi_device.access_state will be driven by ALUA. Currently only device handlers support this, and in future we will have core SCSI support for implicit ALUA (not relying on device handlers). Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index fd28667792472..b9f6b1eb3c883 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -321,7 +321,56 @@ static struct bio *scsi_mpath_clone_bio(struct bio *bi= o) return clone; } =20 +static bool scsi_mpath_is_disabled(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + unsigned char access_state =3D READ_ONCE(sdev->access_state) & + SCSI_ACCESS_STATE_MASK; + + if (READ_ONCE(sdev->sdev_state) !=3D SDEV_RUNNING) + return true; + + if (access_state =3D=3D SCSI_ACCESS_STATE_OPTIMAL || + access_state =3D=3D SCSI_ACCESS_STATE_ACTIVE) + return false; + + return true; +} + +static bool scsi_mpath_is_optimized(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + unsigned char access_state =3D READ_ONCE(sdev->access_state) & + SCSI_ACCESS_STATE_MASK; + + if (READ_ONCE(sdev->sdev_state) !=3D SDEV_RUNNING) + return false; + + return access_state =3D=3D SCSI_ACCESS_STATE_OPTIMAL; +} + +static bool scsi_mpath_available_path(struct mpath_device *mpath_device) +{ + struct scsi_mpath_device *scsi_mpath_dev =3D + to_scsi_mpath_device(mpath_device); + struct scsi_device *sdev =3D scsi_mpath_dev->sdev; + enum scsi_device_state sdev_state =3D READ_ONCE(sdev->sdev_state); + + if (sdev_state =3D=3D SDEV_RUNNING || sdev_state =3D=3D SDEV_QUIESCE || + sdev_state =3D=3D SDEV_BLOCK || sdev_state =3D=3D SDEV_CREATED_BLOCK) + return true; + + return false; +} + static struct mpath_head_template smpdt =3D { + .is_disabled =3D scsi_mpath_is_disabled, + .is_optimized =3D scsi_mpath_is_optimized, + .available_path =3D scsi_mpath_available_path, .clone_bio =3D scsi_mpath_clone_bio, }; =20 --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31AEF481257; Tue, 1 Sep 2026 10:46:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259620; cv=fail; b=Jkfy1deS/OiKRN3Kwy2/iujRhzoaf8RkmL7Xm2n2TNn3k6sVMT2JtN5oa0gzgspT56yKVTg6qA5hxNqHLyOkDcekeXGBXjGSV9tghN9E+zJR4/bSwEwM9jFOBUsQc1begBTmGz0RyMOG/j6+9WYJEX4ieqpQFPa+JNcgzgWKjH4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259620; c=relaxed/simple; bh=d3JsohD+1ktlmBsB4BBgruoga/C5ZGx8CogqWWHpUDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PpphEyMobY/pcrt96McLtqlDJtIZ1bQG+ivjl4Ke/8snT5nTwmNz4PeFwqPe5vGqCfR52Ryv+lVr8lQsCqsiRDQroUCgmKmV+RZjzF9kBXK9a754BeF62qnTkAgLirRRySvUI0vz5BskOywkKt/tm+XI9DEx3Fq8BXgpKOMODS4= 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=h0rsLkgx; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CPix58C+; 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="h0rsLkgx"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CPix58C+" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBwvc2296648; Tue, 1 Sep 2026 10:46:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=cCoRpVZw9uoat8cLEDF/DzHvx1Z+pfSNUE4Ge8/1K88=; b= h0rsLkgxrV0P+MTkEjiR7FYN8unKmcHRcFId99DqPOHGoXRUXp6dj+eV+FYg42FP qHBxWEnPFj2QtRPuKkGkNt3dMjNRHzvJFT7+ESRKBAU8x7Q1jcyUjsnjJx34obif UDYY+XrthlqRNvVHc5R3YPVPx1SwQncz6KUSGrOsCiMLwf5J79mI/8cxSP0NxLCl WFqOszIHptUq8wvFawO6JOdt9P4T1rdrKDkxXC4OT4M0XV0xYVU6yq1AzasVbm+J FpJQTN3+x2DR2yQuoYghZYv1ctnAeAIfDzXWhDaeS5Dp+0FpOWmT3znAaso+iykJ 3DzjrGQGxSXcjjU8VOmkpg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdbg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:26 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYuBK040245; Tue, 1 Sep 2026 10:46:25 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8n9d-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:25 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=igKGwi0/PWcWchUlqZJypVtacVnSN/TAFJJHMFj7s+2gdIh/kq+/7iW4TVCYO+Si56KzhxyfTrHnlFj/DnTXhZzn3yqaAKZZuQjcfbN0IW0YIZ1UPafgSxQ1Ev8Qn3P3+5+sOJFk+0g16dGoGsnVY7tbchjMDsMQ1h7RggeExzRKYxrv70bVs3QM05Jq8xsJcC+cyWlB9v0OqD9ZWwG88Q3mF7bpcrMp0BvmVNW0zeLDr5oefv+B56zdQiVSX/GxucGuK+uKLF7c+aIwALmlCMpRfAVawOL97c5xOsYRHWPgENVAwVjYfHztTbZwVOYOKYmrsNtBLHHmK44DzI60dA== 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=cCoRpVZw9uoat8cLEDF/DzHvx1Z+pfSNUE4Ge8/1K88=; b=Hj/9nCUTsLvVuLFaNsSyD8VkAOq9narw6UHzUkk2uNtN/YpghP/H4ZdEJxXHW6CDqRf+XodQ/9q2lJiIWPvqKgslzpSosj9R9aKoi6RTC72834V3kw+0F3JtsOutLxgp17r2OEVrKXaL9heT21PSWxwbDGTdZtgQ8LocfchRHVaboQ7oy5caog4Jzuz+ZbKFddjSfS+Hey44euwg8qyB62EkoKJSIMu/22eCC4yKJbFjs/TEwYOxBVr42k+DoPIbLGuG+pKYfTzgnpd6Q9is6QtitZAedfP6RsNSUBrIy5le1UuGVv4y6/2i/uZDlXLKD6CRd8IQ/fqsjRgiaRKOWw== 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=cCoRpVZw9uoat8cLEDF/DzHvx1Z+pfSNUE4Ge8/1K88=; b=CPix58C+VvMaIdGcAOV4zFs7qOpTpr0wOkq7M8QlQt4ff8nR15Mp8iKgmh/jQ4z5KgB4sPS+DPC+UYFV9jRsyCHNvuL6zCPX4RMt704ifdqI1q0N4D6A9/B9EltuO9F0cy8o44xNUZSH7UssTE9o1brGIz8ctrPmIIvYVBm0LvM= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:18 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:18 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 20/27] scsi-multipath: add scsi_mpath_{start,end}_request() Date: Tue, 1 Sep 2026 10:45:19 +0000 Message-ID: <20260901104526.3850621-21-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P223CA0017.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:2db::9) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f69b4e3-e9ae-4336-1833-08df08164120 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|10063799003|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: X61iZOEAiNM4fc4yojsLEawq/Aj8boRRFzuFEvsV2J+K1Lu6EYRumIkTFPVzjHZVkSrCCv1RURPFzpCz20Wo5BZcg1YmBXMocQTtyCPngpqa3x/WN0OxYi1XXajNGpAVg2bSh5vqUpcAPH+MsmR8ily3MC+eDr4KfdbYZQUoKwXgVoin7fS63OfSUetc4DFRwnJipcosKClHYbcfX3/M2P23VWmMtGNdgIUl0t0sY9uOHTpUTl/qgLlqLqeQUw8V00uSfx+AIqS3ZNJT0b6yhppmdij33jhgmY/9HdZ1fGgkXPY3Vfoa3cEdZOddDXW+UIpGAD15JA//WJWpr6kRDb4axarRIC0rHreMLYBu/0M7dJQztx57eCAgthVd2WjR5HUMQSxdd9rFoDFZdoM+dcsxPCAgMzvFEI1tUeBgZz3Ytg/AjO48K5n2mEtODB2srLHzxitJ8qOtauMcfapJD23KGGQLgH2kQRB6wwWqcMCnuEg2RSrdgM+16edA73k1bMFv0xNm3RAYNIZbvfYv5XWm+WfnVwjaAIjod08xFR1zbe9fVLiJ4Bf7ptuVgqtUzvUs86FyEorwgv4epfm1XkSsqor2PKWHUbzui7UjnCg9lxoJ0nujuuvhpq+1LQKNJ7KMjFZUGd08HChZzmPzyMFHdPO2DEuIBrA15CB9NeQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(10063799003)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7BP4XHOp0b2auPMrGt3b5/SOGVauNsH8va6UUmrmKYt0mctxvg+DngCV7iY9?= =?us-ascii?Q?L/azcWEPvK1IEthStd9riffnRLdP7CRTfPDvtKlT9EfP7ngSr+DJeDXTz6Zk?= =?us-ascii?Q?+EqxuaY/xVjmwFVvzh6TmMJWRQhOvlsfaUfKOuRJnXpaayvdO0nxa0GxBbnn?= =?us-ascii?Q?+MaOkolGqZcy5df+qarsl5cL94LjodzEUT2juZocQhwgi3N/A6vvV2kYzJL/?= =?us-ascii?Q?c5I0R4GZMeV+wHvskWREs9sBbhKeS7dSbsu24RSu1wOGwhkTaWGGSlMPP4yR?= =?us-ascii?Q?ATjAc3Szf9O+W5Nw1R1QtZhKPLxuMQVDxTqm3ZIun6PU1HHAYsBMvzXcGVhE?= =?us-ascii?Q?gUQ8gdofYQPckn5AzseqWUptTYqlaGJG6GTWQIvuwA20xiuHBxMRvWtrRowE?= =?us-ascii?Q?Y5ELyl6hOuKG2YD9Rbmk2s1vmPQAV7E+rPRiIQYkBhtQcnGn+c88p9SCDxlh?= =?us-ascii?Q?1vC+CuyMWDcPegcfxWX3YKGeLOszB21AhYp32tQXWAFztEXvJcXEdZSxbnSF?= =?us-ascii?Q?BOlEZLeBV4JkkgWk5yYHWBt8TgLQXUuUwyyKNYt/+34GBKFi7F7jztdRiwJ3?= =?us-ascii?Q?fgUnrT6FQqKeIhtg3F66ahq+Z7dLVZeusqeF0V+DZzJ/Z6pH2peKlk80heqQ?= =?us-ascii?Q?lJPum9vzH6+mmke0C6R/RVqhRm+UVnn9+xuZtPhat9GXIFz6Klz62hNH8CiB?= =?us-ascii?Q?+wZiHQWFJwF0wOSLS/webBNlAxBC+j6eNdbiBIOBuUIg0r25IlW3oJ7kmgtK?= =?us-ascii?Q?H/u1NP2aLcKjThIFiX9OSNERAvZtFpnsvY99zTjytlirrgH9uq9YUz4Wj/Q5?= =?us-ascii?Q?Jb36PvTkZSe5vS42EobDiUL10kMxuNgfbf1MEnix/RBi7WC7SINd0cqAVVgr?= =?us-ascii?Q?stCOsJtpSlphggkiHRXUinrWPJwHnxT/YTjjXFjRv6Hrv3F3xUjo5xjW6+hb?= =?us-ascii?Q?JLbBBVw5+HrRxoEHwhQcY8qs9GQSATC9SjYEmUkDn1yRaOEWnYZ6jC+qCg9K?= =?us-ascii?Q?h/D1z88vdryxF3aqVA8yGhvYkMewshBo92MAl1kAJINoY7+MGrtB0fk3fYfB?= =?us-ascii?Q?2tJR3jZu+seq8EOr4HUKcHhCGUm7jcLFYJNBU26TgMPYfqh4WYt/Opg6zN11?= =?us-ascii?Q?Jwmom+PDXrOK2i8HG3Kl4BCGFq5rr406gDxkzpxPRGB83+QNEcWZiso3bFa/?= =?us-ascii?Q?F6xbWzdNETjka7T10QPIGmMF0dpMZDnAK2+5VHQpJN3Xr4CTTjS52lIX9GKR?= =?us-ascii?Q?3AQJzdB334kqnI9i9mBHPWR3QB+gJ1GOSijqSNbcmvNZxd4DqYyFpnykKVhW?= =?us-ascii?Q?kFTlabjqs5yz7fSNlXPQMkHbrJvAOzdymSzab4pjDO3aUeplaMlQlDrhRRIk?= =?us-ascii?Q?u3087DjncauwNjtFXPG4Tfyn0tsK0ximf6pwfi+aChUvRMCwg9oaCgkMpSfc?= =?us-ascii?Q?SmGbSga5qYzYQF9LGF78heStQsGQwickzSKj0V/1FCigyu7VUT9bIL1SZdF9?= =?us-ascii?Q?2g/LxG8WdEMUElaznsc1eH35Qy8tCrHiTcd4wjIphmCPGDQaejGd0hHN8YXO?= =?us-ascii?Q?cJH4BqOMMvTw0vIkLqJboHMl9R56nIvs6B9tYDhX+tQPTedOaS6ihHaVxfYV?= =?us-ascii?Q?bYtnBjIMCwKFCSw8/JPSv5UnNRIoG+adZffpUlwtq1cGe0XU8qvMPOjC9Ux8?= =?us-ascii?Q?76J0ou9Y6KXrL+KYeVGmiLY+YQ7EegB4XGvK2xjEJk8FmNyD/4ZCMbmLlOn7?= =?us-ascii?Q?PgOwiAubZerBII0W7hCb5E46Vl52Uek=3D?= X-Exchange-RoutingPolicyChecked: VY/gOHptD0NkI69I2IGA9906NRgHG6IHCfqFpF/ipReRzEXbu1UfsgnK/jQVZ8L4PzjDB12BQirSIkfLwB0WLaRjg6zS1hV9zrff5APbSe4lIniuVBmTqvysPwHQjT4XZlAPV2HiHKoQm6Xzh4hFazzNKpbUv6T7bxuYkNxRNL+LfPKgnWVli++HVkbDyANs4PAJvoi+3YTge/GsEYCDWtW6sUQ0FyPxHbCwhEB05/kjAeEJDyR6TNPGJ47wkcOhv4iTRtZk5dxP6ZcoSrYdDwyGA0PxlQ/RgmyNhzQBTWfOlThl3OwEbcBfiTDlyd8w7lfvNDhc/M65lObzRxjJ+g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: C6VhEYij674aBvwmR267gidiX9jtPAHHwpZ1yJW4+bkunf5+He6r0W7Q3YkyF1XIbt4yCudfdOvRKLcBQmWojym/fHmLLjdabcjtg2slf/2ZMJRU18RdWJhzQiZKpbFP28Q65W+UTRTdCtiuXhYeskqieCPhJa2LQ6YINWQDilQkYZboD5fHGNV81rilr21UM6ua39TwVUhVRsBqiwAkbiPzurpwhvcbWqgrDJPXpelYwlViHyuRlGiVqetagyMd6D/hVBvyh3JXsh+3+ET56K6EIwTRhoPATimwXwEjkoCnv3kb5lsGimtKEe0Jok2klp+PzwSlZkIY4fXTocGPJAvezjwFyzIJo9uQUWNjQRdBwaT+7jNeG7Kjfk3x3zCufv3e61+pRsHaNnK6sl64djE7jzdbXyn5Ztiyhr7VX99Kkgta9l/u+UZ0C8JZ5ZESVAK+rPQ51CiHIxRoPf50m3dAvf6RFCFJZP2A+cGvnZQXIEJuJmoYFGiXwCdjKhbQVlxNOMLnBUx7EvhtiKoRilHcXGbFWXW1ojatLCDwyQup2FNIZ7fdtsMJ3zy5wPHGyq/aYE8OqOkev4YPFI+Gh8idoq61NSw1aiTOjKeI7LY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f69b4e3-e9ae-4336-1833-08df08164120 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:18.6537 (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: Vx/HjrAcfRxHYuUL/4VmODbZkt7WldT6UUsP3k5Rm5fhT+S8+9C+F+rCUCZEaebba1YxLvjydRMxLXePKMqjzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Proofpoint-ORIG-GUID: JCXNTZgmOorkP2byBBbA0jntTVm16qJy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXy4ulH9EGGVeg CBffE/QjcvNnOAAiftqRDw4+5i3vudf9+kje2NJJsug+CteQFs+lc5C05rO3LtYjKVUxUKwLoiD 1dcUWYWM+FVLNRbF7XeUsmlemOec/hsr4JAjDu41k6qiyJjU/fp4uUY3QYvG0D31/0UXwz2jQB2 HOuVKp9p4454Mc2hvGwOR8bIIG9GigoNhO6Lfqk56kH20wcjR/pLHpPQiygtPitvGO7OActjfFc 4WDf515bpeh7sz/OR189K4MaixqAZANUu3CovG8viM89bZ5F3xqCGHlyDVd/08+XPGxqgirPVp3 ckWMXrk0oGYlWXl/56tEndPuHDEnA9/TPP11l8fb7h3y1P3VCKZwdD2JVUVmFyMGVUsleT9of6/ zoJphzqsgA7U0alOfhwahi9YAawyvTb0ft5ifzF2G4zgLXRuyfqq7WHYS92pjJzIdkRb9HFORid 7dfMjG8cTtbub9ctFtw== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ad02 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=e6BYPIScm8OiYhIHgSgA:9 X-Proofpoint-GUID: JCXNTZgmOorkP2byBBbA0jntTVm16qJy X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXxz26rVLWqk20 w7ICamUFg32+EmwNJE0LVfqf+2tYoMpdSwP8nhMQdErn3JEETwkuWDYsYiRDN3s35DoqyVA4/Bm hBqWa/qBVabPrdr82isc3y8NycI8aDi2V+YSZCLrlYm9RWRo2tRi Content-Type: text/plain; charset="utf-8" From: John Garry Add scsi_mpath_{start,end}_request() to handle updating private multipath request data, like nvme_mpath_{start,end}_request(). New member Scsi_Host.mpath_nr_active is added. This is required for queue depth multipath iopolicy. For NVMe, this count is per controller. The reason is that many NSes may be connected to a controller, so congestion should be judged at controller level. SCSI has no definition of a controller, but SCSI host is a comparable concept. Indeed, many SCSI disks may be connected to the same SCSI host, so it makes sense to count number of active requests at this point. However, for a transport like iSCSI Initiator over TCP/IP, we have a separate SCSI host per SCSI device (so there the count would be same at SCSI device level). Signed-off-by: John Garry --- drivers/scsi/scsi_lib.c | 8 +++- drivers/scsi/scsi_multipath.c | 69 +++++++++++++++++++++++++++++++++++ include/scsi/scsi_cmnd.h | 9 ++++- include/scsi/scsi_host.h | 4 ++ include/scsi/scsi_multipath.h | 11 ++++++ 5 files changed, 99 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 189263ce56624..5916dead5422e 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -669,7 +669,10 @@ static bool scsi_end_request(struct request *req, blk_= status_t error, struct scsi_device *sdev =3D cmd->device; struct request_queue *q =3D sdev->request_queue; =20 - if (blk_update_request(req, error, bytes)) + if (sdev->scsi_mpath_dev && is_mpath_request(req)) { + if (scsi_mpath_end_request(req, error, bytes)) + return true; + } else if (blk_update_request(req, error, bytes)) return true; =20 if (q->limits.features & BLK_FEAT_ADD_RANDOM) @@ -1918,6 +1921,9 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ct= x *hctx, memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); cmd->submitter =3D SUBMITTED_BY_BLOCK_LAYER; =20 + if (sdev->scsi_mpath_dev && is_mpath_request(req)) + scsi_mpath_start_request(req); + blk_mq_start_request(req); if (blk_mq_is_reserved_rq(req)) { reason =3D shost->hostt->queue_reserved_command(shost, cmd); diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index b9f6b1eb3c883..a80aa2101ef80 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -568,6 +568,75 @@ void scsi_mpath_put_head(struct scsi_mpath_head *scsi_= mpath_head) } EXPORT_SYMBOL_GPL(scsi_mpath_put_head); =20 +void scsi_mpath_start_request(struct request *req) +{ + struct scsi_cmnd *scmd =3D blk_mq_rq_to_pdu(req); + struct scsi_device *sdev =3D scmd->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct bio *clone =3D req->bio, *master; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct gendisk *disk =3D mpath_head->disk; + + if (mpath_qd_iopolicy(&scsi_mpath_head->iopolicy) && + !(scmd->flags & SCMD_MPATH_CNT_ACTIVE)) { + struct Scsi_Host *shost =3D sdev->host; + + atomic_inc(&shost->mpath_nr_active); + scmd->flags |=3D SCMD_MPATH_CNT_ACTIVE; + } + + if (blk_rq_is_passthrough(req) || !blk_queue_io_stat(disk->queue)) + return; + + if (!clone) { + scmd->flags &=3D ~SCMD_MPATH_IO_STATS; + return; + } + + if (scmd->flags & SCMD_MPATH_IO_STATS) + return; + + master =3D clone->bi_private; + + scmd->flags |=3D SCMD_MPATH_IO_STATS; + scmd->start_time =3D bdev_start_io_acct(master->bi_bdev, req_op(req), + jiffies); + scmd->start_bytes =3D blk_rq_bytes(req); +} + +bool scsi_mpath_end_request(struct request *req, blk_status_t error, + unsigned int nr_bytes) +{ + struct scsi_cmnd *scmd =3D blk_mq_rq_to_pdu(req); + struct scsi_device *sdev =3D scmd->device; + struct block_device *bi_bdev =3D NULL; + + if (scmd->flags & SCMD_MPATH_IO_STATS) { + struct bio *clone =3D req->bio, *master =3D clone->bi_private; + + bi_bdev =3D master->bi_bdev; + } + + if (blk_update_request(req, error, nr_bytes)) + return true; + + if (scmd->flags & SCMD_MPATH_CNT_ACTIVE) { + struct Scsi_Host *shost =3D sdev->host; + + atomic_dec_if_positive(&shost->mpath_nr_active); + } + + if (!(scmd->flags & SCMD_MPATH_IO_STATS)) + return false; + bdev_end_io_acct(bi_bdev, req_op(req), + scmd->start_bytes >> SECTOR_SHIFT, + scmd->start_time); + + return false; +} + int __init scsi_multipath_init(void) { return class_register(&scsi_mpath_device_class); diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 8ecfb94049db5..52227e2cd9749 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h @@ -58,8 +58,11 @@ struct scsi_pointer { */ #define SCMD_FORCE_EH_SUCCESS (1 << 3) #define SCMD_FAIL_IF_RECOVERING (1 << 4) +#define SCMD_MPATH_IO_STATS (1 << 5) +#define SCMD_MPATH_CNT_ACTIVE (1 << 6) /* flags preserved across unprep / reprep */ -#define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING) +#define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING |= \ + SCMD_MPATH_IO_STATS | SCMD_MPATH_CNT_ACTIVE) =20 /* for scmd->state */ #define SCMD_STATE_COMPLETE 0 @@ -139,6 +142,10 @@ struct scsi_cmnd { * to release this memory. (The memory * obtained by scsi_malloc is guaranteed * to be at an address < 16Mb). */ + #ifdef CONFIG_SCSI_MULTIPATH + unsigned long start_time; + unsigned int start_bytes; + #endif =20 int result; /* Status code from lower level driver */ }; diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 16243ec376cd9..1f0b10fa58825 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -757,6 +757,10 @@ struct Scsi_Host { /* Delay for runtime autosuspend */ int rpm_autosuspend_delay; =20 + #ifdef CONFIG_SCSI_MULTIPATH + atomic_t mpath_nr_active; + #endif + /* * We should ensure that this is aligned, both for better performance * and also because some compilers (m68k) don't automatically force diff --git a/include/scsi/scsi_multipath.h b/include/scsi/scsi_multipath.h index 6e50da94fc5dd..dca1307c9fa46 100644 --- a/include/scsi/scsi_multipath.h +++ b/include/scsi/scsi_multipath.h @@ -57,6 +57,9 @@ void scsi_mpath_add_sysfs_link(struct scsi_device *sdev); void scsi_mpath_remove_sysfs_link(struct scsi_device *sdev); void scsi_mpath_dev_clear_path(struct scsi_mpath_device *scsi_mpath_dev); void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev); +void scsi_mpath_start_request(struct request *req); +bool scsi_mpath_end_request(struct request *req, blk_status_t error, + unsigned int nr_bytes); #else /* CONFIG_SCSI_MULTIPATH */ =20 struct scsi_mpath_head { @@ -109,5 +112,13 @@ static inline void scsi_mpath_revalidate_paths(struct scsi_mpath_device *scsi_mpath_dev) { } +static inline void scsi_mpath_start_request(struct request *req) +{ +} +static inline bool scsi_mpath_end_request(struct request *req, blk_status_= t error, + unsigned int nr_bytes) +{ + return false; +} #endif /* CONFIG_SCSI_MULTIPATH */ #endif /* _SCSI_SCSI_MULTIPATH_H */ --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B78047D459; Tue, 1 Sep 2026 10:46:57 +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=1788259619; cv=fail; b=cA8DUWVDr6mC0L3UepvrmDGdwnm3GB6KM+fMHODg743TutP8vFD38pYjdUlahMtkBXoPisirYxjaD9YiTW1+8Sh0wbZKP1STrcbE8l2uXc3TEO1DYRJP8BWcb7GqMGhsBk6MUNfQUC5zuGc6lHMlHXzoSeXJFBFQqOIauAbBhpM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259619; c=relaxed/simple; bh=QXxOQ/nO8Ht435FvRN/fOvrut7xEU8WYiIbtLI+vIK8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Wa725PJ4HsATOpITyM8Dkb5fyxcdwfM07VuNM6vhmsxebOGr9+yyHTGegILZWbzUia1UA5GvcofMKGF0ez1X7hdxILoPezZUuaeC57GPQBqi2o1ueoEyp0/qz+4/xO9GCAFGIKqemrGq678/iVDZcpGkQKsRIgBBeYt4UPrHqUg= 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=gDCC37y1; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=l52SSZOF; 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="gDCC37y1"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="l52SSZOF" 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 67VLCZ262223243; Tue, 1 Sep 2026 10:46:27 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=X0gBDLSlke0GdEHQTf8F1pYN3sojJJ0mSHaUFYnqqLc=; b= gDCC37y1M0x10gRCQ3EXtpnpZnuyu8mum8gtU4Ib7gaK85c8AKHlywT5NGPGbySh gSaKE/UrJQUUv7wox2uqIlKrpT2JJ4WdjFvTIlq1v7W7x9zM9/bxQ5XcsPeoHEOS TNjsdORiyDw8K3GSZEgf82RY3JVrnBlb2Nud+nx+tTGPD2UqkXHRcRXgib1G9ck4 sdxsSTC5JZtwnbkl7sGRWr1WdzaSLJGO3TyngdVM0XkF6xtIiuXksDGEuywaEsBq p7xAxg8pn8+3aWduI1UcAVhuGcVWoSZ2/Cdsh5tUBur5sTIXEDtm8GNUGQLiNwLy tQjdxDR+yyzo9Im/mAxH4w== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbqyrvbx6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:26 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYuBL040245; Tue, 1 Sep 2026 10:46:26 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8n9d-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:26 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ebcj82dyO/N0/3vWJZN3E6S21w/MegF3C1FKuiJZiuSm8+cFpCyArsRyAOrxP0RyHE51wTTLNdjHdjd7Ib88GwQYhVYSKaxzbNm1OxLxbDOOAzjw5Eh5Q6v+Sgram1sEvYww7YmqVq3yoNixsMAoJuEksWmLcqy7YcxL0ojgCjWMhB/WzVHIToS403UkLv94tv/1mp1sPPvEHS0rpq81Mu7b2THW4Gr7BXjYlIYSwxdbR09IdiIfPMBIEN1oK1cTLyIUGsglkp2dmPGCWt3yMOVo+71nFCzBf6dmCR5IaqOL2UKzIl7cI0FyU1VRniGkwuu4hK355mQTKEhcauav4w== 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=X0gBDLSlke0GdEHQTf8F1pYN3sojJJ0mSHaUFYnqqLc=; b=lXq9HecdjPeKhgDrfyq6xq2lEIHcLbrLrnnkzEMw2QWoGCpTOILtAEgU07VE4hIV5Ea3Bje5cfUUl5ihq/qdTSjYu16XOnWK6xBGkMHI4/S9zQHO3v5iOQjnLUJwXsqPLflqhOVqK3MGa2SI132wMShbSzhRPXuN1Swo+ar164f6kdNFkUPgZ7Gn4rSGoGji6DiTbxrLx8s2z3YvKWsP6nCGIIft31j9Y6wN+1g7uLP3wc7xyFTdrFSFPUqshC3B0MBFPAD9/8AzfRecgVwayArmxxvM1XUVnazZ5CUaQ8+rKvv6k6fM+3ThJ0A9e4x32p5zgDflRiXssCn/yE+7FQ== 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=X0gBDLSlke0GdEHQTf8F1pYN3sojJJ0mSHaUFYnqqLc=; b=l52SSZOFGlG/gPx5Ew/xsMskWTTXeWsGVqxKmIbHBOXvzD+urn6rQg4Dq8NhnTUqfAqIlkmlDDUlI2P+sO7k7fpliY4VkEY0CBk+pEkUn9PNVwZrWXRbhMwqTBXszlhIbWuqoAwtDeJbEqQnK/5awkgNC0k/jW5CzSbe2o+THjA= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:20 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:20 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 21/27] scsi-multipath: add delayed disk removal support Date: Tue, 1 Sep 2026 10:45:20 +0000 Message-ID: <20260901104526.3850621-22-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8PR07CA0043.namprd07.prod.outlook.com (2603:10b6:510:2cf::28) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 728d1f4a-2928-4daf-8dc3-08df0816423d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: 0vwb0+ewCOj7F6cWQCAdgYAAWTGwurtM4YyxhaHDJ6nZIxKzjQA7oXC8HdYspAjoxWBavKMBppZbJN3PyChgvIPtxncw/o/nSVcb68P6xJna4XNFjVn13am7tmPun6djTFkxoH6YFo10vMlUoH2kBUb8RBKaSQRbScIox7NsaEOx/rkHxt2kBE4GtFF0rYrDJQmBism6MiMvIt3GE2m7hUxtPvun+WE9bN0Ke5zD2/S5LriofnQUMH9vZiFUIZBIcOGn4M0jdvdkMF1OVV4PQ8gNAIx0hwqk1unvL6c+RhtoLScbk5ryFQP9iyHS4bx/51BCATrCjokMpnRPm7GjdawRFIlaipBvyh6aO9fUn/tlzRZmHLRE5Tfp5z9WQwB1Ie4EF45jqLGJ2STl6HqONRigNqBzKSPZqoa3SsNcESvQaeBLcEk/F96yhbljXcMAKUZkaQDuXZUQYKxRlc72CIwRiXFPMxWwL+OZSbcCASrkGAuY4UW4IAYe58sza9R2ReZFnWMyq38hIv3qNGjzZK0ayyv8EdS8w68dFznl4AxMOUGD72kmJdCVDV8ro/xbKN+i26XxW2xJdSYHgW5fNYf5N/Zes3LG4Yv1WNhXG58QQPXr9D2Qsv6psWhHOvEG/XhmokFbU4LX6wdRFjgtIapLpzM/RUykIG+2Sz9xOK0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jsXliB6TV5zCCOD3+A7zynvx63IPv1QOGG40kG7dCOrz3q9Pr8jKQ0WQqeEx?= =?us-ascii?Q?yCGZoeziDg7w7y+dh8DSHh2VGoPZXpNhlcqi1dvOc3ZlI7GnAnoHj18OTdag?= =?us-ascii?Q?NA8KHYHXSnTme3mo1J0k/4RwvvQ63N0ic4yDSoc1bXV4BVybnnJib5ftbWgr?= =?us-ascii?Q?e00qspltFwccEDcI2yuwyTkFtrYLWEXasq7JM2HcVBEaI+kuVxy4tdSdEN03?= =?us-ascii?Q?ikUpYVKmDZ87lw4Ou00EJaWd1S5IaoqeoKEb6yuJqAU4vgtSZ3hFDSBw1t5s?= =?us-ascii?Q?Y9OrdJ2/tsbTIHovNb/wknKYbCbS9+NQo6Cg0nQSmvlPu4zBeuNcljh5l3nX?= =?us-ascii?Q?6iWUmJppX3d6VWoDQJ/8SI2gzoQlxkuY/bFNM2zyyHf5JZsqVG3pY4D4iKdr?= =?us-ascii?Q?SzRKd0Jo7MTlxhqS8URwxO4VXKwvR41xRwEJKaCRBmjm/ha8M8b4BIPUL/4z?= =?us-ascii?Q?unWVddZHGncdzWMRZ07lGVrgppI2+Av91BE1wI+ws9PerdPJAyASGRDua16F?= =?us-ascii?Q?EGqO5T8xBSnhqa9DaYtwEQEmO1CHYfdPq8UbR8FUmdYwtnz17gDlClni9VDj?= =?us-ascii?Q?bMfUzYnpuJTJQ5GmLNEMP8KoVLAPsO0IYEjEyXmHEgvy25oLH97p/lWyj05b?= =?us-ascii?Q?OlUyJkL1NII4pLfupugmfuTzin9cIWkiOLgqtOD5zHDGLie3MOXkpWX66Sfk?= =?us-ascii?Q?aKqwsoUZUvvl8/alNl+ErD4fvjq8sFrVf98FaSKQHIvnA3kd8H3d8OtiZcDM?= =?us-ascii?Q?JZzNp4IU6zurQlz3Y0XUSLYeqs7BwRfH5A6zckoWAJGntWXXPFO3TrFd/R5+?= =?us-ascii?Q?SfpvIGv1MUNIE8YXXuttYOMx0WsjFABZ5TGDN3f2lUUemL3xcILOevFAOv/i?= =?us-ascii?Q?wcQZUo2yUyvLyB49ctGKwSmHeqNj+h0KzWWu5J25xykz48wKPJzDMLaoNk6F?= =?us-ascii?Q?uS8Z+Bwcp+LM5/YP62KdbCRXg+PJruilxIJ2nz3teIVYmOanHZW6Tg+Qj1ay?= =?us-ascii?Q?Zit2Y/CILwpL/C3ie6YvleiDZxk/FMiZ1YP0wmRaNBuPTFaqTXm9RCZA3i0X?= =?us-ascii?Q?2UJ376aBdagWSzIQmyVe43xfAS8XbqvzDDNWzbuW2tdCeVZfXgEdsnlwAGcX?= =?us-ascii?Q?kjdQtxwqFzaSi/LtIV0o4NDgpzEg59I1PPqzwsAFlCPcCrIbtnBz7McYVJZ5?= =?us-ascii?Q?U1urcRPLRPQd/AftKzsKAAyGiHuEQgPFmSt4RX1vL4fh5suuQWa+7kBTEMaH?= =?us-ascii?Q?+zU5HFys7fjwrxzqosfSZWh5uw29196X4lqLHzrrxtbGR3wjf7IDQxgHkZMz?= =?us-ascii?Q?CZjf/X1qXzPWOQaovDcJ1yGDQF5b7l834Oj3eKGGvjAjs8qgFD4xsVRdBH7J?= =?us-ascii?Q?RRS2wL5pexjrw6s64a0knCdMgbnU/x+Kcy68XARzoeWt2LUKpo8ToOoIepYb?= =?us-ascii?Q?hbgKHkLfEh6jcuyVJ/ySS28ttfBgEHH5Y5VGdLK1ioxT+7uF/WiAxZeXmdI4?= =?us-ascii?Q?gHYRI2mLjqlv9QdEvoGTxqZuiZdmrLrhXSBrM3ANl5x0mdTtjYkFNbTN1D3c?= =?us-ascii?Q?1GQKXTjBN+MxkIMkOqvNPwSaXP6IaFmnLi9CpYL9UTCVOYWFVl6hegaZnd+Z?= =?us-ascii?Q?282L47S1oO1Zu9LyrSPFvDpbbiDZmY4O2h1w0eSDkDCi2m0Ba6ziYehipP4J?= =?us-ascii?Q?GBnJT+rY+8+wMuwnqIItuZDDtuo4WTkMAiYuTgGl+eR+ZnRcsE3SVoJSKMAM?= =?us-ascii?Q?MHDyEusC1AMIu7UvvQ566YnGhe4FisU=3D?= X-Exchange-RoutingPolicyChecked: QGb9STMTF4xMa5u6K/Bzk1s/DLsQbYkLUheDdI0qXBABpkSiQvuC6muqmGMw/X7y3ji0A1mSKgUCSbR6qzlLHO+54ykwLsoE+6zjI3kGDxUgI9R501YJBcbfsmukfSZOYI6FYGfrbuiMAXwPOJ1osAgw7Q7ybOde/78ObeCmXBicYCVg3V/3lHkZNSKgw6b/P6eBpLS+w3uG6bjZctx8QlnHpB6ljRcmgJYL+bkwzoKQBVdWPd9VZ2wdTrR9Df65y8MJKOZDdJiuZ43K8XVcYnc/YBkFI/fzJYr4zZqW7w0miqsOFJkFp1Ff2zM5RIHIxtX7af4lDqjggGXYnuZj6g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 6V6p8tNJJMFTeN5ieCnoLE73q1RZPn6Ow2K5BhQBYHD8Bfan2Xswl2ABsSkdSMhBCL5n1j3Qo08SVtoRFxH0+qgEnSgIJ/9ZzyjW0dT+IeJEUx4+nipNLwEd2AkSMWpm4xsTze9eq/pvUm5hCHEzwgE1wbIKl+ifltv/yIrqDZlFBcegXt00POi4C8ddSwKjKiBDoNhHdea1sJFfeoaRQZoYc8ZT208iq2DHKdKn1vcWXjLVKDzRqyGeiTXBZWo2uFyzCTpMoD90IEtCAJ8j7T/3y/98NHSqV6Ye6Q89pqSd5/cwYQ4ERumcwRbdgSO9j1d/U/gBRWcqqKTDzHNKuzjkK/am5O94n12cn2+WuINh3N+7aU4BQflQT219taHwSKScpVZBWQYZz6TgHzm6ruCMnh9hOmjUq52rkqI3NI4wIQWUBevrvC/5K051G+eXyYv9fonyVA5JiTgWopV6JyaFXARRcYZs8yjjYBVeWG40gMZ/32BduhnKYioblBhR9D0Anq6xLbnbT/jvo4GjIeaeSMZIYdRLWsbfngstx+ordtWz+iLFFptLrToO8D4o4GswKGVU9H4DcNzwb/1qQKWRKezZUObX5O/Syg+nRAI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 728d1f4a-2928-4daf-8dc3-08df0816423d X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:20.5274 (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: 4KY5wCLBUJh0LLV7lYENACGfAsLBx6oD7Nv6v4sjfPGznxXo/u8IUVn13KXCfBm8CKxx0sgWFeWJVUjbZO32+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXw5QN+OP/ZZo0 S1ZCfu86EcW5fBfZnu+eGmvmMbSQ8fL4Ctq+MDDsrj5ke7KVxK3WDjcXrD/QQr3lK0Y56bpHTl3 d1Z8dPUHST0xtKCR7r07B9Sp0zq8MT0yBeV41xoUFWstP1EJnwj5p6qXYpDn/arJiIKTd/urE94 YZqzOB1Ze/eleYpBLI9kshrYwvbqKPyr3ihsQ8fJkWZML0pjiwZTcqBwtYIsjAZ8fmtwf8IIvzh CLDb6xZmBTaq+z9mpV1gmkwV4DRmHTF2dC3N7f3Vy0c9DbQTrufEhkmfSjZMVb3cf+UvWlTkrco YzIVXIyJZjxW9gcngdwQ7T9XZacBWb+whQUOa+caHpQOwRVDljWsQQkaW5ljJJROtpJcnbVQ3WK +LaKebiVoYEzEpZXfvyAanWnxs3amdQj6T1VcH+W+MeXEBmbfC/JYZDkI+Gt4msK2OlkhbzCQlH wxRCwbgjSKDQQK3Yk8Q== X-Proofpoint-ORIG-GUID: eygWd1NeuPxmp7rOL4yHJIWJ3ipsxUfY X-Authority-Analysis: v=2.4 cv=fbCdDUQF c=1 sm=1 tr=0 ts=6a96ad02 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=7Gl3-_t3PgB9XO-mQDs3:22 a=S0-NFRiyq58gb8qD-mcA:9 X-Proofpoint-GUID: eygWd1NeuPxmp7rOL4yHJIWJ3ipsxUfY X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX9wazrAkIswso 2mASylfcTetKPnoQzDuUxs/WzD2whGBSCUs9hXeOQ3AHenN1v0iHRzJOqnqgIaKBtPKg/NeHvk5 kP0BHj3Gj9evbWUuMuahp1d9mR8l+Tds6kNE2GpQ6KUQzZ5ZynhR Content-Type: text/plain; charset="utf-8" From: John Garry Add support in core code for delayed disk removal support. In this, the callback calls into the scsi_driver to do the necessary removal work. The scsi_disk driver (sd) must ensure that the scsi_mpath_device does not go away while the delayed removal work is active, i.e. it must keep a reference. No reference to the scsi_disk multipath structures are kept outside that driver, so that driver needs to provide a scsi_driver.mpath_remove_head callback to do the necessary work. Signed-off-by: John Garry --- drivers/scsi/scsi_multipath.c | 27 +++++++++++++++++++++++++++ include/scsi/scsi_driver.h | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c index a80aa2101ef80..4a9ea277e79aa 100644 --- a/drivers/scsi/scsi_multipath.c +++ b/drivers/scsi/scsi_multipath.c @@ -367,7 +367,34 @@ static bool scsi_mpath_available_path(struct mpath_dev= ice *mpath_device) return false; } =20 +static int scsi_mpath_remove_head_drv(struct device_driver *drv, void *dat= a) +{ + struct scsi_mpath_head *scsi_mpath_head =3D data; + struct scsi_driver *scsi_driver =3D to_scsi_driver(drv); + + if (scsi_driver->mpath_remove_head) + scsi_driver->mpath_remove_head(scsi_mpath_head); + + return 0; +} + +static void scsi_mpath_remove_head_work(struct mpath_head *mpath_head) +{ + struct scsi_mpath_head *scsi_mpath_head =3D to_scsi_mpath_head(mpath_head= ); + + /* + * scsi_mpath_remove_head_drv() could drop the final reference to + * scsi_mpath_head, meaning that we pass a free'd pointer further + * drivers - take a reference so that won't happen. + */ + scsi_mpath_get_head(scsi_mpath_head); + bus_for_each_drv(&scsi_bus_type, NULL, scsi_mpath_head, + scsi_mpath_remove_head_drv); + scsi_mpath_put_head(scsi_mpath_head); +} + static struct mpath_head_template smpdt =3D { + .remove_head =3D scsi_mpath_remove_head_work, .is_disabled =3D scsi_mpath_is_disabled, .is_optimized =3D scsi_mpath_is_optimized, .available_path =3D scsi_mpath_available_path, diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h index 249cea724abd1..d92b63d357f2a 100644 --- a/include/scsi/scsi_driver.h +++ b/include/scsi/scsi_driver.h @@ -8,6 +8,7 @@ =20 struct module; struct request; +struct scsi_mpath_head; =20 struct scsi_driver { struct device_driver gendrv; @@ -22,6 +23,9 @@ struct scsi_driver { int (*done)(struct scsi_cmnd *); int (*eh_action)(struct scsi_cmnd *, int); void (*eh_reset)(struct scsi_cmnd *); + #ifdef CONFIG_SCSI_MULTIPATH + void (*mpath_remove_head)(struct scsi_mpath_head *); + #endif }; #define to_scsi_driver(drv) \ container_of((drv), struct scsi_driver, gendrv) --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF084480962; Tue, 1 Sep 2026 10:46:50 +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=1788259612; cv=fail; b=LguchDF2ZDCPz2itbli4oNca9sXoqvuBKBdeiL881YanOTLPGAXg/YYLNw6KK7aV/itaSvXv5P5BQHhZUwff+aZObu47heflfWes8k/V7+xIXxsXySt0Bd7cvq4VRGHp1sQUvM5Rl/Pfe8mBSTON3kvMyuU+FlmX9YtJetZ3pYo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259612; c=relaxed/simple; bh=oH3j0HFYrkKLmTnusf8KVHEb8hWHPIfSLZRm9rltz8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nq7h8eWhqQZPkcjKyzEO1q5lt/X/IqD08N9giuQL95ZV1sCJIzel0VU/b8xTQ8OH8eHN5e4WVI0O1cCkAuWVxEB7h1sBHlsL3CGI1CpQSBDJp29o8XhC3iA7riGtCpg6GTJBvG1TS+4cCZAdy/xTJfcRiB04oJyzyRhbvWJJkNY= 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=YuTNzhwf; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=tpe2rTCx; 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="YuTNzhwf"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="tpe2rTCx" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLCkAK2297378; Tue, 1 Sep 2026 10:46: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=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b= YuTNzhwfEi53qtLYl/d8VtVwoYLh3HDlnMbLO8qfokJ/wWsViRZv+dESRq7pL8cf c63KZ70Qir4VsEHt+u86XgRmPazyeRFPzjD3GpqZKJfkPp9ZkgdOkjUHhRlZFA6m YSSkSbdgNy6BGXn3vDRMyXu2kTo6/vD/BXaR8tjnc5xfz4b/WtZEI2yrRMT23ZoX AhRMk+Dtu7l1obCRF8k5EgHFL4SJfmg67b3jjO12WUsZXy5ye7FPhfjSyO4jLyOs NFiFR+QvfEzbxeXlsqZwAU+tEc73aNPOhEkIANGLds4ck/WuLE+XkCZfAiT8sud5 0shXbLVA8GtlyBxpAnLQFQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdbh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:28 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYuBM040245; Tue, 1 Sep 2026 10:46:28 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8n9d-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:27 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uytbhMri7yMt81HQKybg1SoPB//rYdHFIyFN9ZZnwSO1ol3RTdWjCI3G0h34sFjWrFFt3OdZxW+1QWdXBaGhQwGKDhKx2PCKISy3Q3zpda1y9Wqzxhl1AzXszVGgz5XeOjexwLU2rvIHkmWBN1sbGtwyKF6yQSvm3FUUNxWahrIRMJXQmJ2/8lca1jR5+JVVPtMzwkzZX0Vmcn4hw/sgjU5Euh4wthELQuOHZGaL5pNbNjvCUzxBOOz7aPspjdTXOPDL/elm4KQr5hn50VDggePbEMRp9f2CSO+zvCFMAMd2kjlkpPOAbu+DSPmIpwLHdjPdNnydrF1ewxeHVOxcAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b=QeCbt5jLtTdtbd8Fq0GYmUI6x8QbjNgqmGE4vgTc3fMKSTQI8rxJySrNxAcWYCpggq8XgphGKbJosiL/yfRONU0B1rSgEOZpA7JeGLNA55VY8OutWNh0jFS82KjETHruk8lrOwvEhXGrQ/rDByzQ19kCkAC5VkI7qoCmKyXJjTnca02fkw+VsvlQYKU/tQnWBEqGS4Cf45sXgGMLejCZWlnSL1BeXyr1EHrV58G1JFGIwrCwMkaA+dxP1JKxDym1cRROSes2TKolx+EmezPSIbDZOaHAnf+2apasdmodccu2HNMvs8UvyP4ATV8qcXgZcSu04sTAPOPMCE9zie7kHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BpTbmunR74CPu09YxsEfFSDfkJsdmcDiiUmNzzu1yAg=; b=tpe2rTCxy7/kzUAljJfZ1mwchIM2IffMoklrSD46HmTZ/9fZahmE08a+qJuYdZRqqFkI9GFfJRxnJg0/9poqlUhYNO1NEjrH4CBxHUNBqyWG1hUEKGSebpSGooZYk+OlRklhC4ve169mpzM10uGXpQbdQkwam79EWg/Zk1lsDG4= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:22 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:22 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 22/27] scsi: sd: add multipath disk class Date: Tue, 1 Sep 2026 10:45:21 +0000 Message-ID: <20260901104526.3850621-23-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0028.namprd03.prod.outlook.com (2603:10b6:510:339::18) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: e201e576-535a-453b-1446-08df08164384 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: A4RB410EO50zgTQQPNVmcEfQdNWESgHP6fEhF7xxAaaLv/wf7Y0QJwoyJ4jlk2gaq+FK0OaoCgLs/eW+W2tMF64oAe2nYpc+wiSN1wXfENvWJJoEDgHaG4tF/UrTgSO3Sp9TgcAEuJrFAdEzhZqNDdWZSDCBmuWpX0iPopCM8pcFXdWABrCnlZG9IF6xvjnqfPeQ0JuUgUAPqkhXyQMTpmIUsgcMW26ntg1OBIDoi68yOeEy9zmOz405ODI4tviotBY12QUFrgtSzYoJwYTd3JHhlhNCgB9EPnw7gZGzlPtlDthVrHMOYEc9FkRObINKxi/hrRzCh6rEVwOZWNHd84cOwLGf8gT2AcCr4NVASpLoyC7ap6+NEye1cPkNJsmphDG0nn4AewGqZ1QYRe+m8YPUE0CdCmb8qU2DzRFqSDPQpsg5ZTUZkcmrJsAbnuufywWj7p920ZEcgbR0PrzcI5qMq7q2lVq8lij1XuBXZnHORGM/xJvNTCcJy4sq1c/BfXM7r2utYcn0UvgKQVJ1tC0Df21aHBHBuydffRlDK8nbEhbKupJpqZ2uvX7GK5Fmlcgn8LnXg5diy+9KugsKL0axKEsGxbS1WTZg+S1CMadrXQWdMKYpvwWGXRQ4aosO8Qb+0zWCBjabFtU05WCa+xq3gkb4eBUtWI9pSP3z29M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TlaJqD1KGpN+W+ye44KiNCwFyiMvz6Tdci93GAA/o8wFyTtO2VICNkJKVMLh?= =?us-ascii?Q?iG95yxPvJ+J/ld1FkckPYhwDrHlcoDS+QtzJMFeA2LPK1I7cSrfWLREjpxSl?= =?us-ascii?Q?6amvjK0Hguyp+kKRfvYcGIbYnKWE8lNrC+d2voKOIZFFEE/IL2gMhOqxYAG3?= =?us-ascii?Q?Lj7tlBq02IRDoQaMsemNnu5p62obHPhZ1bAkNcO/ajl/4HcN8iuSyY+y6oHX?= =?us-ascii?Q?FllZULdq4+RZmIWvI0Pv5QM50TXqxrIYFMnIsVGLYtatP9osw9Iq9qAEDajr?= =?us-ascii?Q?YRt2Tk9hIfqYAJt0kz8nRXmP+2/22z5lU6PcipLVIX4frDTB/J4P/lCC1EOb?= =?us-ascii?Q?bhHc/oV8bWOhiv4jf6Qfx5ZwcYdvGOVwliu1uJ7jpffyqQKSKaGF6vjGP/d2?= =?us-ascii?Q?hrUHgkDssXX7LxPxSenjBP5c4UNPi4owuUUdi1R+ahbYIRvve8BoStLfzbZ8?= =?us-ascii?Q?XLK6eKyZf5DDd8YrXzkFme8tRq+7i1o2ZM5KKAjjsb9a8KEDqWFbL4m0a9vk?= =?us-ascii?Q?P2vbjmTZBa9Ml6Xg2bEiCads7tzJDVAOX142cqQHVU7lxw7C72kSdaGpLb4U?= =?us-ascii?Q?f7ihSwui7r4NxG8+/42CVH4KnQSRV4gdYl1E1t1b9FuMU+d7dq7BtXCdQt/J?= =?us-ascii?Q?u+TksDjGeQtLuCEoijQORZIbdisR+wBZIy9vOZBWh6i+DLcIh3kAgmE06/OI?= =?us-ascii?Q?F39NmKR/dLdyId4O6H0lQsUzb5jqOptWb3NOM3D2gxnMBPKGpLLt+klyE+VY?= =?us-ascii?Q?NorBWh5emQgzn67CKhUMkYe0ymO+pmM5I5Wt8klHh31mNh4KsoKF0eYtSaMm?= =?us-ascii?Q?uLxrqHCJLF+lhdGEQFe/viWewjX2SmM+cKYhrIlXqASxgMwVqtyEKAU/XcO3?= =?us-ascii?Q?t9AFSLVES+nGQ4QHL48wNWgbjWcHbn+SDnHAADb1hiuq/8hcjbjcBR3bDfKt?= =?us-ascii?Q?PXkH+Q3z4OYwgO+j7ShVo3yJ0Y4FnmbTpnL9StgKgMovrxhnxyjidf3KfJwr?= =?us-ascii?Q?0+D2M1Nwf4tMPWUj5GHi1ge4tLq2edf1v/kDr3s4aAl4DYjzgO/pJyxIgWEe?= =?us-ascii?Q?S8KVvUaHsVy+z8NUKon7zNabMeL3QSCIHto3w/PINsA2km8UlCSOfTvd1jUK?= =?us-ascii?Q?qS7/Nxmmza9ogmk9xZUGaPXG1hoLcz8grIYJ+1q7L4hwqR6sELLfvhg7BkN/?= =?us-ascii?Q?88VjFuwkNPIvZdDQ9i5rKFtgfDEb0M31yzK6KWMgqWGeUklrFEFFHGM+JYeO?= =?us-ascii?Q?Q1asLvZ1tV7At6W+1qoqKeSu1/3CJripIpb5fWCsr4DY6QnmZIQU5VckAi9/?= =?us-ascii?Q?RvmwrzccAkNHDGZz6hlpxYuKMebfH/wPtAO2Lz7hO53+41aZY8dN+rvJBEcb?= =?us-ascii?Q?H0GJOnqOsxIusyYlZocKi/oOL28Zc3yLwxMOBy+P/5TjVLSlEn6L1eSgQWYZ?= =?us-ascii?Q?6wl1EKkgZqtnUa6u09fedgWuSBIbk3ojlK9QGZQxAiYB3AL12KRBMuJ/GkNt?= =?us-ascii?Q?KLHyZxBwEQKK8hZHXLXZ2NtBJrNme8+Sy51yx0iqiO8PFGFVI3Fmvw3t9Jai?= =?us-ascii?Q?/8JnUFXcgWSpqvXBMT3TcVqZyYmCkKz+AUMWBuP7FGGkTOCvOiFcLNUOiCbb?= =?us-ascii?Q?y7qVkAfRdo30Sk+N4G/hjsQyvWNDtex96AwBztRYxAwzKOS/UI+1II+zemWh?= =?us-ascii?Q?7CXoizvjLR+eawo5FI1heghN3wEAUePLa3ALj6YMP7c0+USMJuZysDUqgD7O?= =?us-ascii?Q?kwTC25bQhwR/VmCS45dz8wk7HZbLkGQ=3D?= X-Exchange-RoutingPolicyChecked: SmckhipxMzH4vTxcixWnynzwa5+ZPnCvJjlkaGdv/R7xPHeHLg+toaDCfMPWyBrPg48Hx3adcTpZd9BEmU+1MtkXS47oeCaEy9YoVd8kn6hfH4NgN4xdXWKFnLurKQi+Uk7TEvF/bIsER9A/4tOYLQGeXssed03L3rVWevRnfMCYwFoYvTsWUGSjE6LUOCZxtkW9VeadxajMRgA7O79HnY4S4vhyR/JiDPSyT2bXyO236hd74Qwb5pK8rAztZH5fkOhRgBiHT1YeQEmrqAiyw10lPnJbefbon454OPlOy3UKBff1QeWv2T98zBiV2V7yBwlfzE1N1irhW1TigcQGzQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 4lXBS7fuAUA/SVkETlE7AkikrtZbFBEziC49Fpti387S1Zh89rvsB/bbjb0cBvMqeb9XDoFFblYnMy5Z+7suFO0rKykCvBMj0PCkV3/Q3dLgsrPCoN6Uq/cjQ42GzQgxGZSxJHleMACMTsTWxWqTrXbnaKu/WcMmBdzgPKEReLFMyuh3drAsnwDv+96EkF0WxQckyjlHWEq/y8xf9j2n0vCLbq12z4WoKTAAi0HZr1s0ZyCkPVyYDok1acElufPc1E/gw78l/8IgNYnDc5lk6yt9rh6IQUnnrcpWl3y+Fwccc3uF4bVSza0LpecN+uaZUtldKpFdBiFrAX/QfW7cSyxYPvo1sdZ7aebHw1YVOvVdZK2XqC+d5oyoK+cEU6GffYq6QVl5JCh9IiCvHOOzbRgnb0ZzYTl9Xn9WqaldzOgTiXqTWc27D78kLXunqpaPhtQFFOBRt0iiIFTg6cKqrST6z7YIVCqXbFn6yQU/HSzuqJOmyKbHvXd2nZEWD9TMDTqI+zAOO6Gm2lCk7sUNSIShmvWOixhl5okrt81M3TbUa8pLMXsYdz1OAhZEzPTbGi5yShe296gD8YLY4JavNH42UCS5YoMImKF61wdXkg4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e201e576-535a-453b-1446-08df08164384 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:22.6689 (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: WtuicyHZpRhiPa/TqvJQf/aS3VaK4sFsWE7bKQ1lS1HTepacoxl/Q3B983X7zYwI1B4MKno+YfuQ2E84g6NWyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Proofpoint-ORIG-GUID: w8iM8dzQTtwGeXjsYUMfT3TvYYSpnoGJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX2W3PIR0lojxp U5brGzhPZsaGgwQXLsA/cZZWSv9PI2TYR13aszzYMSrx0JNdex+CPLVVma97SsiQ05PrsriBnGg /iAXtGpy7aqNocUFlFIplj+jAA8dsbdeBfK9hG3bLHpPe4V/45GqJTweVCiP/M9uzLd7qiSQOef 7MYYxa7uFax9BNEYxXj6k7gPU0psAVazlYLtID0cfq0OU/9HZcVESXr3z5onV0EJKZc1mZ5GufJ mtOrH0krfRpS0dIBK23r4rFTWVuBZigr4i1ny2lHj1x7XyYe2sdWCJ6pwNRtGSvkEwgGf7Pp9sQ VmQnJ7y3C1JjI82PnuPMjsXxEZZv22l3aoL4EUjQ9clrZ7mMPRZKPsn+Flpgv2EOFizcJaAeCGc 4Ud+7typ1Q7+qWId6JY4+bDv4Vou6ewrkTmm0PyQwfDUnTmzJ1S1CGjK4u95ptliytkxViaSmnM g5PQHq7rbn3V3SRtiIg== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ad04 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=ecQ7zCoEdOpy3JLqRw8A:9 X-Proofpoint-GUID: w8iM8dzQTtwGeXjsYUMfT3TvYYSpnoGJ X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX+nrWHp4OUXov T4Qxo5ycKE9lKVA6UweqbtJJvNZQdMWpPIlVStLFHkOW5/7PGe+16aXT+2+K/HgcGtrJtyhAsFi StnYDQfJhFfb209uOyCZL8UTDGjUZsVQY78eFN06nPyRndu1iLx/ Content-Type: text/plain; charset="utf-8" From: John Garry Add a new class, sd_mpath_disk_class, which is the multipath version of the scsi_disk class. Structure sd_mpath_disk is introduced to manage the multipath gendisk. Signed-off-by: John Garry --- drivers/scsi/sd.c | 43 ++++++++++++++++++++++++++++++++++++++++++- drivers/scsi/sd.h | 3 +++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index a1b21ea14e549..6847805215bd7 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -70,6 +70,7 @@ #include #include #include +#include =20 #include "sd.h" #include "scsi_priv.h" @@ -113,6 +114,39 @@ static mempool_t *sd_page_pool; static mempool_t *sd_large_page_pool; static atomic_t sd_large_page_pool_users =3D ATOMIC_INIT(0); static struct lock_class_key sd_bio_compl_lkclass; +#ifdef CONFIG_SCSI_MULTIPATH +struct sd_mpath_disk { + struct scsi_mpath_head *scsi_mpath_head; +}; + +static void sd_mpath_disk_release(struct device *dev) +{ +} + +static const struct class sd_mpath_disk_class =3D { + .name =3D "scsi_mpath_disk", + .dev_release =3D sd_mpath_disk_release, +}; + +static int sd_mpath_class_register(void) +{ + return class_register(&sd_mpath_disk_class); +} + +static void sd_mpath_class_unregister(void) +{ + class_unregister(&sd_mpath_disk_class); +} +#else /* CONFIG_SCSI_MULTIPATH */ +static int sd_mpath_class_register(void) +{ + return 0; +} + +static void sd_mpath_class_unregister(void) +{ +} +#endif =20 static const char *sd_cache_types[] =3D { "write through", "none", "write back", @@ -4468,11 +4502,15 @@ static int __init init_sd(void) if (err) goto err_out; =20 + err =3D sd_mpath_class_register(); + if (err) + goto err_out_class; + sd_page_pool =3D mempool_create_page_pool(SD_MEMPOOL_SIZE, 0); if (!sd_page_pool) { printk(KERN_ERR "sd: can't init discard page pool\n"); err =3D -ENOMEM; - goto err_out_class; + goto err_out_mpath_class; } =20 err =3D scsi_register_driver(&sd_template); @@ -4483,6 +4521,8 @@ static int __init init_sd(void) =20 err_out_driver: mempool_destroy(sd_page_pool); +err_out_mpath_class: + sd_mpath_class_unregister(); err_out_class: class_unregister(&sd_disk_class); err_out: @@ -4508,6 +4548,7 @@ static void __exit exit_sd(void) mempool_destroy(sd_large_page_pool); =20 class_unregister(&sd_disk_class); + sd_mpath_class_unregister(); =20 for (i =3D 0; i < SD_MAJORS; i++) unregister_blkdev(sd_major(i), "sd"); diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h index 574af82430169..22438173ea2f8 100644 --- a/drivers/scsi/sd.h +++ b/drivers/scsi/sd.h @@ -83,6 +83,9 @@ struct zoned_disk_info { =20 struct scsi_disk { struct scsi_device *device; +#ifdef CONFIG_SCSI_MULTIPATH + struct sd_mpath_disk *sd_mpath_disk; +#endif =20 /* * disk_dev is used to show attributes in /sys/class/scsi_disk/, --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36A3547D446; Tue, 1 Sep 2026 10:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259628; cv=fail; b=Ufp9l85p21Qk5BLCf97o9KiWWhzWhPC+JjUYBOwyja4l0rIsc6//wslYJIDl8Q4Pb0H2yEsFsnSWCGodWpACm6pfTkouohcYGHlFDWvBYE1DInbJ166lJnrYIbfwMBAJYsFkPUR6/w5zHpw189xMQTgoBxbJjXtU0fCP8lmsYQA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259628; c=relaxed/simple; bh=0tHfHRxVgUg0g/f/dBdQLGON/+3npr1P/655VNCOZG0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JTqQmIXW+qh2vMbYNTUKZekJy+IZOIhUNVhoFGoj9L46epbqLHaSDcptuIvD71t24Zqe7XPAWOdCqXADLZcpTl9+wn0zF+NwhcvpqmHPFbgL/EI1cNp0VHjxCM+chFB6+xE2mm6FP88E/CblIfmAPChn9NlgUCHuTB5slixf3tk= 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=Om7lkbBn; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=yk87TI6D; 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="Om7lkbBn"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="yk87TI6D" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLCkAL2297378; Tue, 1 Sep 2026 10:46: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=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b= Om7lkbBnOQMTaoLrpY2A7QHRIbNr4NMvFyMcPVeI30cpV9/sNUW0/6mOD9sVlei0 E1t67A2dobZGLcGK0Pzi+84XVMpZFzJES+nJw7Uu+xjBfoyqmmMrApanFoRkkd+Z +0Hk8EvdUka5r/2vkw2zCfTVLiFKZTxTyWi5HFLbaFNHrzdH9hiCFkzdlIgvPUyK r9qz9m4J/qfpMRg5+Yo8iE60q/xQh9G40pKhcHL75stPuZMzZ0bDjpkEoBcLxKDW eUDNlH0CQyQbXuXthtC1q7vvd8h3cxAVXwtBEkiTKBluFvwv6J4WzLSeh4altEtd jTsxUqSBEhLzpkBv851oQg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdbj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:29 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYuBN040245; Tue, 1 Sep 2026 10:46:28 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8n9d-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:28 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EMBYZ8hlvYTPv7kmO/Am312+ILOFzOCaAWAAcu77b+yJeIlW/ctTAgrYlBeLlmmdeIArCtOMbdfm/KyeRx3MRpOqf9L8QyhmI8iVSV1GmzvqX/1x+ER0wz8SFydgsnoWP3oYa8W5d9GlwTzVO9c++BdmRF6hKtDJsAVNgBO2NMDC+FiRYowse4WTyn2S8bXLWaqGvZFXYnjXqdstIJyT+dH76vfXl/BWuzRLvJCaxC3+CZ6GoHakvTF0yZNBIJ0ZH0ah427rjvZ/vzvTeGh8G75Agn1liswmV9nIPE79qRl5fsvKb7cJsmuYuqhBGeuXnxqkazyMKKL5OhAst3amuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b=Vb2DQkonHTRaYHOjxHYOKoUImRx62f2deH9oRpJGClIw2oK8WtWCgtwgHWBi2k22Cv6sq+cBfOF7674bQn7smZPafBN0h6wQUsCYfp6wzWXYrjsYItpfNGTfjIXP0uMwx8ZRxMzCTWKurOHHbcYT/7OQPk6K+yT2RlADwFNa7cjK3xuh9nNrngxfoMNhEl6BfRo2Q3rHC6LfY94ZYo2fbnzqkKW5RubBplh2MGa+Uh178iKWqooYAfGVfS98nFzW1zplq9kgZwejco6Np5f/MuucBoDyuaN6Tr/Z8CgpKSb/kFRVl5wZySLUU2kYzKyUAKgbd6kba54r5aY06NS8qw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JGlwJRpmTmzi3d0wpKC+/WgXEINhpER7dUJPEEUIXeU=; b=yk87TI6DW8OVmQMq9EQPTpVvl86MvZedLaqOroNSveBQEewztpSCz8O5tmMvlJ77tTHEPTtty3lJ0Or0PdSDtGEtixKkAQYib14mDbIBY6wtm0fChE3BX88pPL+DXIJqPA0zNICHLz5V1aAVOcbkOZontHWGsJsMahf2ZdpAAqE= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:24 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:24 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 23/27] scsi: sd: add multipath disk attr groups Date: Tue, 1 Sep 2026 10:45:22 +0000 Message-ID: <20260901104526.3850621-24-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH8P223CA0025.NAMP223.PROD.OUTLOOK.COM (2603:10b6:510:2db::13) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d57d05b-a87d-4b2c-e924-08df081644b5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|6133799003|20046099003|18002099003|22082099003|56012099006|18096099006|10067099003; X-Microsoft-Antispam-Message-Info: DVsaHtslsya2pVdnIMX0R2yc/RZK/+UmnrjuvrbK5P45r9aC+MQ0/GCnT6RAg4BqcDkQQ0cNh7iktq1msVK+2jDitfC/VCClebN7HL+laUyW0p8meU5lABaEBj2psi2W+L0ZbfaQ0K+Ky/N8Ieaafa6cjSZd463WKIqdFVjEQgS4p5NcnRl1QfG75UqftCGneHhZi/Sbs5oJiWuH3XPqp/MNn5yVotfK/WgolOPHE51ODDEabyhEpbcplqOpYUWXIbyJ7Oy+S/DBPevNxQuMEL+XIE10RGliNopLmUKes/r9LgmkWjK6Rkac/3TPLv2iDDoh05cmODpztjSHa1BWXB0zc3F/qtOqzZdyRhbpUILQXx0KB0V0jnfyfVev4akMmruq6ucl4xVJlbgPKW4sCVMpSQbXIQcqs6FlZA8fuIDIkCZbWylBLi+NoBEmCz/hAz9yvnRuZ1pDcUCSLXJZkDzafeM1kG1/NMjBOIpfv8slHRmn7n70EtTh3t1Zsp/ifRkMaWRpf3a6JoIPKa+rYtXDKgwEYXLk8B5OQqAtsEvRe7jrBGBd2MhhkyKRPMlvdVXPaPTLZyK0WFv3gfFCRp1BNRn0JBDOMbiib+umJtWDwarrrgsAdR0N+kDRtm0uURqoDWoGI6oG7rWqP6QM/BeJxJn7p4F1zaLPrUnLOZg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(6133799003)(20046099003)(18002099003)(22082099003)(56012099006)(18096099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5nSPSQn1Ug7+BiKXbsoHpEfbtM5pIAGnP/HVG3sMYGPystKK9c6j/SJ9gjA6?= =?us-ascii?Q?kmoyntWjR4jMReiFtzmwyMil6lDEpXaZvSBJT/eFo7H5VAZm7trGapE05zqs?= =?us-ascii?Q?UN8Da/t5LYvCBVOQyRAGZDijc+RozceYB2cGwf+GepUDgaKC5xvWzMVFfc9l?= =?us-ascii?Q?IQx87JkycVBT6BOf7+khDgEGd6RXykojTPrVZxBn6rO5LpueGQYdGZ9UrGIZ?= =?us-ascii?Q?gHCoIN6HIwE33mbe2791l4XqNsc/4n85GZX2ebtdLI3AEScV3Cy7sGLGG0Co?= =?us-ascii?Q?a6Ugop2fF9ryjbVMrwyuXrdWBE5ZcSENhhvImNlBwpBIqHcmCodfjpnJhY5Y?= =?us-ascii?Q?wa22RZoBUv1ajqJFHdkHsTPpHKNqcgreXTv2RwYysnjVlmVT/5ITmwbBSBZc?= =?us-ascii?Q?S+r2otRDjIVQpC8ajWKnhCjeqXhQ3M1ybauUMgFzG9YWE6s4q4A8/H68D5f5?= =?us-ascii?Q?V8q5zdGsItGX71e1ozpK/Puz58FZbla0mQTNjC+jj+jx4JNX82YRLOwyYUQu?= =?us-ascii?Q?LupmC11TBjN8kVnb1riODeDF8Kq6lRPgSM7Sqm8q1irzHBclrsizhhQQurEj?= =?us-ascii?Q?0xy2aHij2RqG1G2kbtzOGmsqYMQEpnuEMQinoIALiUNzb+30vvEyGiR0gRT5?= =?us-ascii?Q?HSyuuHHhBIhdjAX8lCdSMBtiRYpXW4JzbzDZZp3076wE5DCqj28eHgM0Fn8w?= =?us-ascii?Q?FkCnGUeiGIyJpePzsih5y2k8FZKQHxZTEHj6h+S1sT4I1tv/6AekodfgayGN?= =?us-ascii?Q?D9m2Krroza9F3Errp1q6DC8yulm5q57uflOgj+wt1FglDHrlxI/rI2XSf4mI?= =?us-ascii?Q?a7NBv4xBQWmMIq6Guwf7N4aCR7EGi3FqbnaoH7lDlLuz9JhSjmJP3KsmCPqL?= =?us-ascii?Q?Cj4KbYXF+s5/Sw/Sk55K1mB6AHvOEN+2V5FhVNgSeHtvLj/xH9+gidYUJDoA?= =?us-ascii?Q?a1F4ebyw1reJmA61KQNmvsrcKOEjoo9TLIMb7AX5iPljZ1QFmEaXAdJXw19s?= =?us-ascii?Q?szNBIiCCMMrazH2q0/Iqgs8WVLfG0b2xBRUrSeLhF8DjxAI1/YN72Kqzl+ZR?= =?us-ascii?Q?xUvnqC5m+gYWHlMLnCXLNXwsktrv0PCzSkvPi5sAy31fdAjT2BXXWskXRiN4?= =?us-ascii?Q?O+5G0MBArtsm3taW088T//elFMB77HycPyrELE6NeF9EqQC6CxwlekenJsrc?= =?us-ascii?Q?ubkWg+CpuLo7lZrs+JD4UlIW3jfP2MxfH/TTNSqdy6XY8aqarkonRZFPA0A/?= =?us-ascii?Q?LFiCouqma2Wj4pnNCMjMaZlRAOFkvj66j2vXkBDqKPqjdXpHe3Ivfgf+88mD?= =?us-ascii?Q?3NTEy5VuegcQa5xH8c2Y1cDB5+9n7N7mj3UU2BZwf0lyhXLRNH5VJxjlYr9m?= =?us-ascii?Q?pa13uVanxVmNcYhYP/0NZtn8lTWBXQVD6/6KSqhVZtb+UV1Mx0QYSYaAkztg?= =?us-ascii?Q?aJAoBSZr3T7CWzwL53QQWrSqKmbr6vu0PbYwJuKRKktp5pUEgspifhuez3Oj?= =?us-ascii?Q?hb385F4yazFH/dZECCqtN0nLtnyjo54BIpY+IBrdxgr0kNzUTWZ6DCNiByZo?= =?us-ascii?Q?222vseVXjQsUJyhkJbVMzR4oHzgwXFk9oipiFRo+PxJPcRULrmbcIv8fvZfO?= =?us-ascii?Q?VbfZQr7vpJl6WLMPLGvt/euzqgglNaJf8WZKU1vv/0rX+1ZJE+b6mm9ZzrJj?= =?us-ascii?Q?WRhASN6NW7CzLX21cnRcF1gq9iNcfV/YRXwNvMcYLiQCHX+b9oD8RHGkRlPl?= =?us-ascii?Q?ig/Xi5sgu1zRCFdhuZ+i2Og+D+acTII=3D?= X-Exchange-RoutingPolicyChecked: 251d7oRqxZFP/Rwh2T2qUtb6xfGMBpTiDXyRpx6eRLInDMy4VMzJLgwCN3UaNzfysRqJRjPdaQkIr7o7ArLX86g4bm56EF/H0zwisUxZugZ2Kk8mm8mWeP1sB9LMUGatiTWLZs95vKXHzvl0+I3Yr+7KoZCh6qBLWlYkkWPKHA6LbEB9MWGTuR9SN+x3JXQUu/vQODpdA/JbrUaIiOZGdUToouu9Cw570Dj7ofEOBV4vntfT6Hxn2r7DS/hEmUo9sZWqih4jYHOqlwy9/v+1HroT/SQnP5UDkNH5e3Te9yxLrRLl0/gJTiDr4lsghZ3nG+OKdBzXPz3M86pex9a9yg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /oy4htZUCY4zPeWORkwJ1uEJcmNAZm8tfw20lzTYs/ks8RG+Ywo4sjKXU3/Txeov5LWkMtwwDcC0+9wLlnV2UEGe4oSyE303N3eoVvVVS8c6QcykO6hzDacIS0Q2iGzbs5yND1gGVKaKgVeAywReurSo7t8p6WIgxo+dCFPpXxREiTm0Bewc025VVWvO89slqQm45XUnEpjJIyJnUn8DVmfX7g7xB286IEGQcTSNzFiYfcbgN6Xtoo1GFnHSMybAOknr6Ysukv3Xik70jJN/ndVua3e4KonLOmVDxAZCKHhTms6PQO07x5M54TgQSIdWGo+EGH9FMPufX/WJaSukyAn7/Rt0eixA+jHkgzQ7EhBC3e6IWV073PBI8EOgByWh8WQeDs1gRAd9D9aix4kBWaVWmqTMbMiXaNMSShNomDRBL3xFlb8bFv7mV3iDaK3nMmBeecZRuVvnU5P5ejrGaJvJLKWDzJfJLJqy0cNNhEdDzlSw1HveuJ4Wi95mCI6MwxfET5qJtrz1BXA1vO9NhfY88E1T0wtQhhoD2Bv+CbBtNa1ZIi6qAo+H0WaYMsyJBpUKSVoaAc263cZukNWOB1yhPlfZuw2WsIrOLMCLzAw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d57d05b-a87d-4b2c-e924-08df081644b5 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:24.6618 (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: IuWWAYXBywpojtVFcrUlGLXuUlgeToFEqfFsimgzJf2DTJy+S5Po/WZ4+2oIeFHDY0M5h+PVFiC2fPIke9pr5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Proofpoint-ORIG-GUID: UBgLmuPOQtNzs8qFEc2nQ-U7bSmNqpDN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX5L3FdxJz5IP6 reGPTZ06RaJgT3r7CNRUkO77U5XJEIkoQiNmBI5yCUbatZXBjlzyVomoHuh6+ftXsX/I/+/eVuh IMVBlZCFVKjm1FlaKHsRxk7TeXXWq2E+TygfpFJ2zhr4jLCyAHBpJya6sg1ERNluIY7R6JeI354 giTHs7KgZ8JOPGTu1XLZCfYzt5Ak0S//MM2Q+zufOAcyO67UdJ8MVsLYxNaXYXlZ7Kg33qMPSDd ghmj+Mr9pCUwVvhUJIIO2DffdVsGFdufRzdpFaDxxEYafuWRG7fnxExe1GT7XoF/kWEQwkh0aDS e97fyoTgJrBTwOP9QmR5wBeiOSci6dBvrvcnYVCM0SKXApU7ZYEu6qH/CLhRdbqnVrwdnpO1z6/ lMYF5Cwp5uWDZqk3B0Oj7TgJKGnC5pGhMRhsqJLbSEDMDQLED6IyDPvYIUSzjtogJhmF7GP3WzB 02gK0rVdSavQTwe9+Ag== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ad05 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=4WwWyauO2_0H2zdGQVkA:9 X-Proofpoint-GUID: UBgLmuPOQtNzs8qFEc2nQ-U7bSmNqpDN X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX+KQ0AukSE/w5 +hBjrP3hy2TdHFNhantzw4wQbuq0x0bXPhrbjCuuJzhrFz8IyOrNLrfeY9NgZmIJ3OSCXTOoZTm iJogqPudnRF32QhM79Sc4Yg7paM1NaG8qlUMtnlbWr9Ij8Shq3+J Content-Type: text/plain; charset="utf-8" From: John Garry Set multipath disk attr groups, which includes delayed disk removal and everything from mpath_attr_group. Signed-off-by: John Garry --- drivers/scsi/sd.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 6847805215bd7..60e071d23ddd0 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4019,6 +4019,42 @@ static int sd_format_disk_name(char *prefix, int ind= ex, char *buf, int buflen) return 0; } =20 +static ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct mpath_head *mpath_head =3D mpath_bd_device_to_head(dev); + + return mpath_delayed_removal_secs_store(mpath_head, buf, count); +} + +static ssize_t sd_mpath_device_delayed_removal_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct mpath_head *mpath_head =3D mpath_bd_device_to_head(dev); + + return mpath_delayed_removal_secs_show(mpath_head, buf); +} + +static DEVICE_ATTR(delayed_removal_secs, S_IRUGO | S_IWUSR, + sd_mpath_device_delayed_removal_show, + sd_mpath_device_delayed_removal_store); + +static struct attribute *sd_mpath_disk_attrs[] =3D { + &dev_attr_delayed_removal_secs.attr, + NULL +}; + +static const struct attribute_group sd_mpath_disk_attr_group =3D { + .attrs =3D sd_mpath_disk_attrs, +}; + +__maybe_unused +static const struct attribute_group *sd_mpath_disk_attr_groups[] =3D { + &sd_mpath_disk_attr_group, + &mpath_attr_group, + NULL +}; + /** * sd_probe - called during driver initialization and whenever a * new scsi device is attached to the system. It is called once --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 55D8047DD4D; Tue, 1 Sep 2026 10:47:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259681; cv=fail; b=rhfJpYW6VlzPLJ5ReATkkds6sSwKg9vwXrmiNqRJxa1HulgzEb92tR2NDx4tJDVFePzeZbApi5L5QqNmpyTtBDa1IHev1xpuMxswrR6+0Cf4MLvGWH6e2KEgAq0EHH1ivxlHXpzPFCKk0k1oznxH17aGcfzrKTqw9zciRDDMcAA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259681; c=relaxed/simple; bh=gUrOjFsKFkI2SPTusxKnE3ROxsQithPeHw4+As057OM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=m1ln58vxY+bnIoFmm3aVmxsH/6I7mHrXUe7mD0YTagg5X08r0wjmFgcZ8uEyxLm1L/Prx8oAI3ftU7pslWbzvfzuBBwXMk/ccrXvLX+phMxS+nXascVcPgh87AL2spu+xAqVwahE1ihNGzQtLx2AgvQvJDImbyAJkdVwvZLyj8Y= 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=sD9ZbNdj; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=okxgApRD; 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="sD9ZbNdj"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="okxgApRD" 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 67VLC5l92287504; Tue, 1 Sep 2026 10:46: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=8glij3Cpn0zvkEWA4DEIOYeLFq+5TNW/SwTuER/RLi4=; b= sD9ZbNdjh3HyCrX1g49ov+vZyOQT4zEFiwrz6U17UlPQ4Rndgr0SFmTTEkS+Pq+w jmdAjr5uRhJfMCW5QSzdvDm+SOF2vl1dJUvOSOfpVcqXd62Ed9FNGDiyc6SeNWj9 IOUjUwuk3xrao5ru+JUXfu6n+IPizFmDkecrM+IQMwIkTjqQqwwe57eRMbIQrdAN bAWSiLkqb16XypgKSBBhaKXwyVNF/1RnEOObqG5ReX8rjfe+Yp57hl0a0pqIvTLf V5ymQu3u1S1yu4M/DGkqcv6Ro9TWI9V83vonw+k0/Q8ig+95nNJyclEtipIFXj5T 0Yy2LWlxLCyRpTlIDc0+/Q== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp72cc8u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681Aja7j001164; Tue, 1 Sep 2026 10:46:31 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013018.outbound.protection.outlook.com [40.93.201.18]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqac89-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:31 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gdzQUJLo0QuYJvfJoUpR7zLLAcV1MjlOoSWx04Vh9hOHWIzDj61oyr5oktKNgkOsD0cZoro5LIwsf+kmbKfTjAIvrsRNtw5f7nHe5mtq7maKr2RRtIVmAROzuPIjhvaaoXAX8yY0tdIThXK9wJGJQQAixHTwA8wAO3gzUD88+yf3kqI9AQCsh+urWPVKye/t27tarX16cFHqF/+8+tO7hRx5d7macezz8yMbM2CoC/eJO4osqom70ae1oVrdRbfMe/6rjHEHvXp7ayi9YhfdRvV6VKrbcgYw+9tmPkKvKGQfYYMlDFiYJcQ0NbCujcItFAaVudm7kl4US5DkWRYtKw== 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=8glij3Cpn0zvkEWA4DEIOYeLFq+5TNW/SwTuER/RLi4=; b=Xj0mL3rpFbBS/TQSOHVnm7b3Zz3grpE0JYT9dKKg2E97rPJO1roKwBPCbeXYO2siHd5X1eemGKYZ93S/GiXMJAQLxKdN6J7Kli4xjvTpO49ntazbcjPnRW1Azy/RLcTM3mMiQJSlQlNPhQ/oGNfNktPvUDyWh8xsDnDRfJsa6cfdK/MX7pemocJLx72gHwVFZgUonwQKW4+n+XpKUCUusqWgyUomGu45d+x3mmXrsy0xxL055kFIN0lT8vG+4EXIHZiQuuO/3MW3Ec8dgpedfPocaUXKFarfeTSTZ+oqOIGKBABQ0FA1g237uTE/mZw9AOYnczuQexcj/WGaOZGVEg== 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=8glij3Cpn0zvkEWA4DEIOYeLFq+5TNW/SwTuER/RLi4=; b=okxgApRDopNvkrfC/3NP2GSFPxErDXTNUwxUT1pyJkLfEt5q7t/K2UtfaCFl13IvdLp7uQm6JHFtByFaL1s/7GIUS/7MauKdpyIEWqB00jcDUTeLqWvcnjX/scYsS3Ky1qgU8uBKGskVBhtAL1akHavs3/ICbQiQpRUrajBtbs4= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:27 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:26 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 24/27] scsi: sd: support multipath disk Date: Tue, 1 Sep 2026 10:45:23 +0000 Message-ID: <20260901104526.3850621-25-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0029.namprd03.prod.outlook.com (2603:10b6:510:339::20) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: c1895385-c177-4717-0f3f-08df081645dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|10063799003|6133799003|20046099003|18002099003|22082099003|56012099006|10067099003|5023799004; X-Microsoft-Antispam-Message-Info: NEKSUA+/YX8c1/eLGSP3lfSue+QzVzBFAgw5ukK58vatwFZ+gegybo5FZQYr0emN83MStFIsN+SG1PZ0AYBIkGnzzfneHPEJAheUwQrL++wsMQOMNjiRvCkQSafcL39I9CM2sC7b0p7zaP6oOEkMoshguZZXfLu8ffnj6UqUD4PTV8oJO7F8dPeZiiZ9b31D8b6PRWQGxNi/8AAh2jdpHJSuQcrsa+WROS/IG9nKV5Lfusy+ux7wPcnIZPxLSzA7GtnXpNXDLcW333V11j5qW0z+6CA+uR9GG7MurqwSYBBRy/6iYm+CNaRzgzahdbr9/KMkFcVei5OaCkhl12fWXqdLfBN00F9Td16wKZDeqo+FDjnAuiQbx28oKRnMsFQGVOfrwbRO4HfAwQloLogFWJIDCxUjUylLAQJZamQDBK8OCsYMqG5ceyU7Q6TNdYYVdeWTkndiDotg2o79batHCAZwWS7mgD/P1tSUELm3EWrb5soyL7361E8Y5+RCb2xJHGUnJYoKiQX/hfpuJ2nf/wGBPVeFs9Pevr8Gv55mxJcoakY9pvA7DKQrjrjenIvFmPhh7NK4UxkK7kxnV41GCGn08i8oexfXnFavBNcw6eJhHBgXWHgg3+ySe+Jz+d6qLbjMXoWeCNO4UUo8tuw4ZUz3a+ZSuMfXmSwM418Yn68= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(10063799003)(6133799003)(20046099003)(18002099003)(22082099003)(56012099006)(10067099003)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MsXre1N13VRxalWgrudTEtKK6RjGLxJ28YyN7C2m0ZxIDAvfZCy8SC3YKlWu?= =?us-ascii?Q?yS5mwUvYgA3ppeZSxUYs27Er2O0fTwHcCo4XEMlv3HeA2DH0kOFXoNv157iY?= =?us-ascii?Q?PVLHrPImFIQgVTUol13R+9KgS/vwryPWCxlEITmQcqkvKGmwiw4gKZ4XZMiy?= =?us-ascii?Q?3tT2OuB9wij8ji9wsSGJVmjSd8H+E44T+9XKhhJRzbmG1QXKcSOjHIj/xjPv?= =?us-ascii?Q?eh/eR/+6FU05+rPF35ZsHBS52V1iqUSXX9fN/IagN+gUJhht6N5LIvgHW0FZ?= =?us-ascii?Q?R/PJhB/B8XbslK6zF9V4sp1rLHZUSbJTDliPqFrd/a3xmT98QTam1Y83oPRG?= =?us-ascii?Q?ut9+CfnThBb4lG5YHWbvwdE9xuFJCI8NWNSlBDn1yJm5x61JGvpEE6BWVhDN?= =?us-ascii?Q?THwCf3y6OzpwuFwnV+ZBkfbUL8k77JNX8frCTRUIDxpctZe/15MMJDIrFYm8?= =?us-ascii?Q?IUNOCLSgfGVpwhzopuO7zpTxSkKQ1VtTnNmeVP8WQUA8465UaA7j/Vsniox9?= =?us-ascii?Q?EALLS76Vl58Adl91WFzVsrCkv8gL3oPdTrOnE5LHdn67EOAgcZ0jX+o91+DD?= =?us-ascii?Q?ZdjbjYu30Qqnav3Q2yKIx0WNAkpMELccf7l4LxUytuh6nQHgDX82h86uNr/A?= =?us-ascii?Q?lIKvEWyapLK3eVK+KNl89toeAouoVgXlx6B1R0YJ4yNwXDcE6foKOr7luSey?= =?us-ascii?Q?ghwkI459+659LiGOpL5uctOM1GTuNIROUp5XgU35uC0vCIGraCpX1EpegNZq?= =?us-ascii?Q?73m05kzAdRiGStTSciPUfvnNkkjD/G4f1rYWbbD0A31p1aHVQkHHuUx3eZ/8?= =?us-ascii?Q?ru17dDE/OHdkbRS6Hym0P7cWR1ODuGo7IEHvg4LyAJiT4FJfVnvoiLcRtIgK?= =?us-ascii?Q?5xZkVU97OLlCRCMQD8cwYd/IPRCcMhtwJfNPVRMtbJ6zjuzYnPxx/1z6NsDf?= =?us-ascii?Q?NEP3hhK+dGVRkIz4N9Fav+9NpxvqUf6GEZj3CRMKffeUlhJs9SPqTHuYC5IV?= =?us-ascii?Q?xOHlKVOYxeu+LsZlS8eHdYLWS6wQONFjC6vDQUqELpK2zDJKxiF5yiCLAVeA?= =?us-ascii?Q?hkyjHnZIH6FkL2ky7lwMyLzD33VYmjpmxcoeNTDyCOmnDeGAOS8jYXKIBqb7?= =?us-ascii?Q?6TVkHDcFgYdRkEyK0kRe/Ihd1e6ehHo6AxmMT/TB6CfG+G/qaamHyPtxVFJ8?= =?us-ascii?Q?A24Dt8R1dd5Ut/blID+/nujUC+Gk/xJuoy3X8pIH+THin+KVW6UeIryIK7cc?= =?us-ascii?Q?gn98cVk5lgSaaWSxYtHnlblLfnE49au/al1/B8U+ucf9qyFVjuFjgKVQCyna?= =?us-ascii?Q?xotyy2DpYadxHEvKKMzsGbGwBFmZ0tmVyxJNzt2bSlqDJU/9sGxeCeb8eqee?= =?us-ascii?Q?PFgdfHcHmZEtKO0Fn9RYVZp6wVgm+aSvKWgjyqnKfoF4bwH3bvbdzwgYkFOE?= =?us-ascii?Q?j0tNj3FJJqPG/YG+IBpXz4AWT89qkEuLRn18Y73MY4xuypqp0y7dziYyatQp?= =?us-ascii?Q?dmQncvw/7/11M/T7A8CwP1W1LUl7Tno4DrbEqLv3yD860vh8iQtuA851kfN8?= =?us-ascii?Q?DpIVzc2d81jRLrS02OsaS9ztw3Cs7XyFahX3MDN2ANfJEoNgo3db5sWv/m5O?= =?us-ascii?Q?XHvI3eM99GFgbyz1TVfWO/2ju90kqiXde7Omk/62B/xeP0+UyZwrEXqfrw+T?= =?us-ascii?Q?oVO8ahWrFtaLOyccQ9GfigcHzPSA+zfN3+0duI+BVSREmyST8Cee5QOUufwy?= =?us-ascii?Q?kMH8FN8ECniqOTD6A14eQXlbpVM836s=3D?= X-Exchange-RoutingPolicyChecked: tvU00Wd49NmCEI1AOq0qTfiCbgtmxWCj9HAXvPWPqo5mwxsLmMf9rmXG1+ZB8xgiQ5VDF4faF2YWxo/bUs9A9E+MXe5o3vxZMpDfbN4jEhGAW+Uo1tEQf5vFf+lCiLl/p8ZJxf6E8XFp5UYRR8n+kzYrYS83TGkGANeaEj+ndM4fq7F4RbioLL7rDuL80quMyeA7m+LSiiAur7p9ag7fcagAANZSdWcAEZh4yoZ4/YxIpal2ECQkuEZ1PL1IvFKVeKlE4Lc6DH8W/GruOea9QXI2Hn60B2kBkygFJ2ug4Kk46Cg6rEna5dY+JCUawUGGjf7Ih1MyOe4VZ4pNaqXFVw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: UZ0QescsxmKvt0kSeoQOTJ65xtAn91xF/1HHDHQFc5rawrp8imgOCIOQrZtEMsdoWa+esJyHBWqGnjhaow3mvZEqV52gfIlwJUsFAMOho6ZK2FANgZ1REU9C/gWTe0sPJ9HCBfm5g97a5p3hAzUXqOBYRu4nx/gg7rnArTsGhjNeuAhKnxpnkys8D4YTUiErPHY2BOvFLajQg0OtWg9K3XNY56mGrZ8Bri5nl6/UJMYlO9jCUsbB4JmRpjHfydipJNgmDyH2mXSv11KmcqVlNzEdVHuSNjt92chUaWiGh7Luqx537LoCuXUtc90EpxQCopH62Y0Qs4zCI4m4gFtsGAzpZ/NZIdWkRwbMNgcGQzaJ8xYddeAM9A2GTDdaEEvCPRcI3LoyMcEhzRhvJYa3oFSY323dRSJywxOq0WLCymy26OEj2VBFbS+Zytvo5Q+rPslrJiZ1MOdG3L5dxlB5OyQ6IhlAvnllywAOkwCAzcskDAVUvS7S18MChr9hzo7mnAOG9K14jYnDFtaoEMnC0ZWaPJRmsNxjNWQMGXTF/nNcdBN57t252/SchqXQi+L0SMzpK/q5rWsh3yxqd5IByBdTiog0KO93WBEaCrPJ+jY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c1895385-c177-4717-0f3f-08df081645dd X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:26.6495 (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: Ko6SOnnsSyXyWVqpk5qGB7cN+6gQq5vN0DAPp5U5IwDzSFrYgXHxUF+kgp6UxJAiAAy+qc48nCxqa3LqK8w+QQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX3IYclr5nBzz1 EyslfYTlO1gR2AGv1EtpFS/AT6vOu506CoTDoyENNuWUU/3l2pvFM/86topedB1oG5d3aHDUGg7 VJY4n1g5PVi4ePqz3Y5w1vWTvZCb0vJh+peVktzl3a3rHJkrkLAF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX6q+CiDogAoVB oWYkFD1+A1BIZlYj5lB6VXx5B9OG6HMuORwH522N/CwwoXSK7x2Z2oobx+jrqaHN29bttoJMrZs 1RIMt+9/hhFkDLWz0LUxXeYO/1PLSoL3TPrd91bdFZq8KuSETas79HTB+DNrkVr0tsFAnNR+tsx tRy5OJQwViWHJreT7+hyAUfmAmObSbmX41Llwzp4zZRQ2vYLzvpj/EwBe9zsKqPo4JFh+JbdS7S LEzSpRJTXr8TshJ57Z0imuGet4tj4wmWX1iR0aP0Lfb+eafvqcuDiBHtW5tIawZ/rbHoqUA0xQH 7zrpSrmmlW4zfpxa0mu0XiL8GNZeXkUVzWo1XhTZfujTpjQkDO7J9R0Uwvan1HfMw/nxWkAc8Jh wDFl4Z/SzEJBwZvSzjhGhtFmBzaI0EfeMmcYX2Vkx6chGGTQWBThwkeuujSSs5ZrP+R3sL9IWyo HkjCMCUfMpR+RnScVSU7sh6LElfFn2xPcXd8AQ3U= X-Authority-Analysis: v=2.4 cv=G7os1dk5 c=1 sm=1 tr=0 ts=6a96ad08 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=UnEsLBAWqG5TZJypXWwA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12102 X-Proofpoint-GUID: I_8JK_Ajw-ZaADKIkNahBKhfRF_KHvwl X-Proofpoint-ORIG-GUID: I_8JK_Ajw-ZaADKIkNahBKhfRF_KHvwl Content-Type: text/plain; charset="utf-8" From: John Garry Add support to attach a multipath disk. We still allocate the gendisk per path, and this is required for the per-path submission. However, those gendisks are marked as hidden. Those disks are named sdX:Y, where X is the multipath disk index and Y is the per-path index. A global list of sd_mpath_disks is kept for matching scsi_device's. The multipath gendisk has the name and disk->major/minor set to minic a scsi_disk. The following is an example of relevant scsi_disk and block sysfs directories: $ ls -l /sys/block/ | grep sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 sdc -> ../devices/= virtual/scsi_mpath_disk/0/sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 sdc:0 -> ../device= s/platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0 lrwxrwxrwx 1 root root 0 Feb 24 16:02 sdc:1 -> ../device= s/platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1 $ ls -l /sys/class/scsi_mpath_disk/scsi_mpath_disk0/ total 0 drwxr-xr-x 2 root root 0 Feb 24 16:03 power drwxr-xr-x 11 root root 0 Feb 24 16:01 sdc lrwxrwxrwx 1 root root 0 Feb 24 16:01 subsystem -> ../..= /../../class/scsi_mpath_disk -rw-r--r-- 1 root root 4096 Feb 24 16:01 uevent $ ls -l /sys/class/scsi_mpath_disk/scsi_mpath_disk0/sdc/multipath/ total 0 lrwxrwxrwx 1 root root 0 Feb 24 16:20 sdc:0 -> ../../../= ../../platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0 lrwxrwxrwx 1 root root 0 Feb 24 16:20 sdc:1 -> ../../../= ../../platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1 $ ls -l /dev/sdc* brw-rw---- 1 root disk 8, 32 Feb 24 16:01 /dev/sdc brw-rw---- 1 root disk 8, 33 Feb 24 16:01 /dev/sdc1 brw-rw---- 1 root disk 8, 34 Feb 24 16:01 /dev/sdc2 $ lsblk /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sdc 8:32 0 600M 0 disk |-sdc1 8:33 0 9M 0 part `-sdc2 8:34 0 568M 0 part Signed-off-by: John Garry --- drivers/scsi/sd.c | 425 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 405 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 60e071d23ddd0..28304a497d8c6 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -115,12 +115,30 @@ static mempool_t *sd_large_page_pool; static atomic_t sd_large_page_pool_users =3D ATOMIC_INIT(0); static struct lock_class_key sd_bio_compl_lkclass; #ifdef CONFIG_SCSI_MULTIPATH +static LIST_HEAD(sd_mpath_disks_list); +static DEFINE_MUTEX(sd_mpath_disks_lock); + struct sd_mpath_disk { + struct device dev; + int disk_index; + int disk_count; + struct list_head entry; struct scsi_mpath_head *scsi_mpath_head; }; =20 static void sd_mpath_disk_release(struct device *dev) { + struct sd_mpath_disk *sd_mpath_disk =3D + container_of(dev, struct sd_mpath_disk, dev); + struct scsi_mpath_head *scsi_mpath_head =3D + sd_mpath_disk->scsi_mpath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + + mpath_put_disk(mpath_head); + ida_free(&sd_index_ida, sd_mpath_disk->disk_index); + scsi_mpath_put_head(scsi_mpath_head); + + kfree(sd_mpath_disk); } =20 static const struct class sd_mpath_disk_class =3D { @@ -817,7 +835,8 @@ static void scsi_disk_release(struct device *dev) { struct scsi_disk *sdkp =3D to_scsi_disk(dev); =20 - ida_free(&sd_index_ida, sdkp->index); + if (sdkp->index >=3D 0) + ida_free(&sd_index_ida, sdkp->index); put_device(&sdkp->device->sdev_gendev); free_opal_dev(sdkp->opal_dev); =20 @@ -4019,6 +4038,90 @@ static int sd_format_disk_name(char *prefix, int ind= ex, char *buf, int buflen) return 0; } =20 +#ifdef CONFIG_SCSI_MULTIPATH +static int sd_mpath_revalidate_head(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_mpath_head *scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_hea= d; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct gendisk *disk =3D mpath_head->disk; + struct queue_limits *sdkp_lim =3D &sdkp->disk->queue->limits; + struct queue_limits lim; + unsigned int memflags; + int ret; + + lim =3D queue_limits_start_update(disk->queue); + memflags =3D blk_mq_freeze_queue(disk->queue); + + lim.logical_block_size =3D sdkp_lim->logical_block_size; + lim.physical_block_size =3D sdkp_lim->physical_block_size; + lim.io_min =3D sdkp_lim->io_min; + lim.io_opt =3D sdkp_lim->io_opt; + + queue_limits_stack_bdev(&lim, sdkp->disk->part0, 0, + disk->disk_name); + + /* TODO: setup integrity and zoned limits */ + lim.max_write_streams =3D sdkp_lim->max_write_streams; + lim.write_stream_granularity =3D sdkp_lim->write_stream_granularity; + ret =3D queue_limits_commit_update(disk->queue, &lim); + + set_capacity_and_notify(disk, get_capacity(sdkp->disk)); + + mpath_revalidate_paths(mpath_head); + + blk_mq_unfreeze_queue(disk->queue, memflags); + + return ret; +} + +static int sd_mpath_get_disk(struct sd_mpath_disk *sd_mpath_disk) +{ + if (!get_device(&sd_mpath_disk->dev)) + return -ENXIO; + return 0; +} + +static void sd_mpath_put_disk(struct sd_mpath_disk *sd_mpath_disk) +{ + put_device(&sd_mpath_disk->dev); +} + +static struct sd_mpath_disk *sd_mpath_find_disk( + struct scsi_mpath_head *scsi_mpath_head) +{ + struct sd_mpath_disk *sd_mpath_disk; + int ret; + + list_for_each_entry(sd_mpath_disk, &sd_mpath_disks_list, entry) { + ret =3D sd_mpath_get_disk(sd_mpath_disk); + if (ret) + continue; + + if (sd_mpath_disk->scsi_mpath_head =3D=3D scsi_mpath_head) + return sd_mpath_disk; + + sd_mpath_put_disk(sd_mpath_disk); + } + + return NULL; +} + +static int sd_mpath_add_disk(struct scsi_disk *sdkp) +{ + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + int ret; + + ret =3D mpath_add_device(mpath_device, sdkp->disk, + dev_to_node(sdp->host->dma_dev), &sdp->host->mpath_nr_active); + if (ret) + return ret; + mpath_device_set_live(mpath_device); + return 0; +} + static ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -4048,13 +4151,259 @@ static const struct attribute_group sd_mpath_disk_= attr_group =3D { .attrs =3D sd_mpath_disk_attrs, }; =20 -__maybe_unused static const struct attribute_group *sd_mpath_disk_attr_groups[] =3D { &sd_mpath_disk_attr_group, &mpath_attr_group, NULL }; =20 +static int sd_mpath_probe(struct scsi_disk *sdkp) +{ + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct device *dma_dev =3D sdp->host->dma_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + char disk_name[DISK_NAME_LEN - 2]; + struct queue_limits lim; + struct gendisk *disk; + int error; + + /* + * sd_mpath_disks_list is kept locked if no disk found. + * Otherwise an extra reference is taken. + */ + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (sd_mpath_disk) { + error =3D sized_strscpy(disk_name, mpath_head->disk->disk_name, + sizeof(disk_name)); + if (error < 0) { + /* + * Should not happen as would fail for the same when + * allocating the sd_mpath_disk + */ + sd_mpath_put_disk(sd_mpath_disk); + mutex_unlock(&sd_mpath_disks_lock); + return error; + } + sd_mpath_disk->disk_count++; + mutex_unlock(&sd_mpath_disks_lock); + + goto found; + } + + sd_mpath_disk =3D kzalloc(sizeof(*sd_mpath_disk), GFP_KERNEL); + if (!sd_mpath_disk) { + error =3D -ENOMEM; + goto out_unlock; + } + + sd_mpath_disk->scsi_mpath_head =3D scsi_mpath_head; + + blk_set_stacking_limits(&lim); + lim.dma_alignment =3D 3; + lim.features |=3D BLK_FEAT_IO_STAT | BLK_FEAT_NOWAIT | + BLK_FEAT_POLL | BLK_FEAT_ATOMIC_WRITES; + + mpath_head->parent =3D &sd_mpath_disk->dev; + mpath_head->drv_module =3D THIS_MODULE; + mpath_head->disk_groups =3D sd_mpath_disk_attr_groups; + error =3D mpath_alloc_head_disk(mpath_head, &lim, + dev_to_node(dma_dev)); + if (error) + goto out_free_disk; + disk =3D mpath_head->disk; + + error =3D ida_alloc(&sd_index_ida, GFP_KERNEL); + if (error < 0) { + sdev_printk(KERN_WARNING, sdp, "sd_mpath_probe: memory exhausted.\n"); + goto out_put_disk; + } + sd_mpath_disk->disk_index =3D error; + error =3D sd_format_disk_name("sd", sd_mpath_disk->disk_index, + disk->disk_name, DISK_NAME_LEN); + if (error) + goto out_free_index; + + error =3D sized_strscpy(disk_name, mpath_head->disk->disk_name, + sizeof(disk_name)); + if (error < 0) + goto out_free_index; + + device_initialize(&sd_mpath_disk->dev); + sd_mpath_disk->dev.class =3D &sd_mpath_disk_class; + + /* undone in sd_mpath_disk_release() */ + scsi_mpath_get_head(scsi_mpath_head); + + error =3D dev_set_name(&sd_mpath_disk->dev, "scsi_mpath_disk%d", + scsi_mpath_head->index); + if (error) { + put_device(&sd_mpath_disk->dev); + goto out_unlock; + } + + error =3D device_add(&sd_mpath_disk->dev); + if (error) { + put_device(&sd_mpath_disk->dev); + goto out_unlock; + } + + list_add_tail(&sd_mpath_disk->entry, &sd_mpath_disks_list); + disk->major =3D sd_major((sd_mpath_disk->disk_index & 0xf0) >> 4); + disk->first_minor =3D ((sd_mpath_disk->disk_index & 0xf) << 4) | + (sd_mpath_disk->disk_index & 0xfff00); + disk->minors =3D SD_MINORS; + + sd_mpath_disk->disk_count =3D 1; + mutex_unlock(&sd_mpath_disks_lock); +found: + sdkp->sd_mpath_disk =3D sd_mpath_disk; + sdkp->disk->flags |=3D GENHD_FL_HIDDEN; + snprintf(sdkp->disk->disk_name, DISK_NAME_LEN, "%s:%d", + disk_name, scsi_mpath_dev->index); + + sdkp->index =3D -1; + return 0; + +out_free_index: + ida_free(&sd_index_ida, sd_mpath_disk->disk_index); +out_put_disk: + mpath_put_disk(mpath_head); +out_free_disk: + kfree(sd_mpath_disk); +out_unlock: + mutex_unlock(&sd_mpath_disks_lock); + return error; +} + +static void sd_mpath_remove(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdp->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + struct scsi_mpath_head *scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_hea= d; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + bool remove =3D false; + + mpath_synchronize(mpath_head); + + if (mpath_clear_current_path(mpath_device)) + mpath_synchronize(mpath_head); + + mpath_delete_device(mpath_device); + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk->disk_count--; + if (!sd_mpath_disk->disk_count && mpath_can_remove_head(mpath_head)) { + list_del_init(&sd_mpath_disk->entry); + remove =3D true; + } + mutex_unlock(&sd_mpath_disks_lock); + mpath_remove_sysfs_link(mpath_device); + mpath_device->disk =3D NULL; + + if (remove) { + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + } + sd_mpath_put_disk(sd_mpath_disk); +} + +static void sd_mpath_remove_head(struct scsi_mpath_head *scsi_mpath_head) +{ + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct device *dev =3D &scsi_mpath_head->dev; + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (!sd_mpath_disk) { + dev_warn(dev, "could not find mpath disk\n"); + mutex_unlock(&sd_mpath_disks_lock); + return; + } + + if (sd_mpath_disk->disk_count) { + dev_dbg(dev, "non-zero multipath disk count in removal\n"); + sd_mpath_put_disk(sd_mpath_disk); + mutex_unlock(&sd_mpath_disks_lock); + return; + } + + list_del_init(&sd_mpath_disk->entry); + mutex_unlock(&sd_mpath_disks_lock); + + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + sd_mpath_put_disk(sd_mpath_disk); +} + +/* + * Always calls for a failed probe, so we need to handle that some structu= res + * have not been setup. + */ +static void sd_mpath_fail_probe(struct scsi_disk *sdkp) +{ + struct sd_mpath_disk *sd_mpath_disk =3D sdkp->sd_mpath_disk; + struct scsi_mpath_device *scsi_mpath_dev; + struct mpath_device *mpath_device; + struct scsi_device *sdp =3D sdkp->device; + struct scsi_mpath_head *scsi_mpath_head; + struct mpath_head *mpath_head; + bool remove =3D false; + + if (!sd_mpath_disk) + return; + + scsi_mpath_dev =3D sdp->scsi_mpath_dev; + mpath_device =3D &scsi_mpath_dev->mpath_device; + scsi_mpath_head =3D sd_mpath_disk->scsi_mpath_head; + mpath_head =3D &scsi_mpath_head->mpath_head; + + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk->disk_count--; + if (!sd_mpath_disk->disk_count) { + list_del_init(&sd_mpath_disk->entry); + remove =3D true; + } + mutex_unlock(&sd_mpath_disks_lock); + mpath_device->disk =3D NULL; + + if (remove) { + device_del(&sd_mpath_disk->dev); + mpath_remove_disk(mpath_head); + } + sd_mpath_put_disk(sd_mpath_disk); +} + +#else /* CONFIG_SCSI_MULTIPATH */ +static int sd_mpath_probe(struct scsi_disk *sdkp) +{ + return 0; +} +static void sd_mpath_remove(struct scsi_disk *sdkp) +{ + return; +} +static void sd_mpath_fail_probe(struct scsi_disk *sdkp) +{ + +} +static int sd_mpath_revalidate_head(struct scsi_disk *sdkp) +{ + return 0; +} +static int sd_mpath_add_disk(struct scsi_disk *sdkp) +{ + return 0; +} +#endif + /** * sd_probe - called during driver initialization and whenever a * new scsi device is attached to the system. It is called once @@ -4078,7 +4427,7 @@ static int sd_probe(struct scsi_device *sdp) struct device *dev =3D &sdp->sdev_gendev; struct scsi_disk *sdkp; struct gendisk *gd; - int index; + int index =3D -1; int error; =20 scsi_autopm_get_device(sdp); @@ -4107,22 +4456,33 @@ static int sd_probe(struct scsi_device *sdp) &sd_bio_compl_lkclass); if (!gd) goto out_free; + sdkp->disk =3D gd; + sdkp->device =3D sdp; =20 - index =3D ida_alloc(&sd_index_ida, GFP_KERNEL); - if (index < 0) { - sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n"); - goto out_put; - } + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_probe(sdkp); + if (error) + goto out_put; + } else { + index =3D ida_alloc(&sd_index_ida, GFP_KERNEL); + if (index < 0) { + sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n"); + goto out_put; + } =20 - error =3D sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN); - if (error) { - sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n"); - goto out_free_index; + error =3D sd_format_disk_name("sd", index, gd->disk_name, + DISK_NAME_LEN); + if (error) { + sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n"= ); + goto out_free_index; + } + sdkp->index =3D index; + + gd->major =3D sd_major((index & 0xf0) >> 4); + gd->first_minor =3D ((index & 0xf) << 4) | (index & 0xfff00); + gd->minors =3D SD_MINORS; } =20 - sdkp->device =3D sdp; - sdkp->disk =3D gd; - sdkp->index =3D index; sdkp->max_retries =3D SD_MAX_RETRIES; atomic_set(&sdkp->openers, 0); atomic_set(&sdkp->device->ioerr_cnt, 0); @@ -4142,6 +4502,7 @@ static int sd_probe(struct scsi_device *sdp) =20 error =3D device_add(&sdkp->disk_dev); if (error) { + sd_mpath_fail_probe(sdkp); put_device(&sdkp->disk_dev); put_disk(gd); goto out; @@ -4149,10 +4510,6 @@ static int sd_probe(struct scsi_device *sdp) =20 dev_set_drvdata(dev, sdkp); =20 - gd->major =3D sd_major((index & 0xf0) >> 4); - gd->first_minor =3D ((index & 0xf) << 4) | (index & 0xfff00); - gd->minors =3D SD_MINORS; - gd->fops =3D &sd_fops; gd->private_data =3D sdkp; =20 @@ -4171,6 +4528,7 @@ static int sd_probe(struct scsi_device *sdp) sd_revalidate_disk(gd); if (sdp->sector_size > PAGE_SIZE) { if (sd_large_pool_create()) { + sd_mpath_fail_probe(sdkp); error =3D -ENOMEM; device_unregister(&sdkp->disk_dev); put_disk(gd); @@ -4178,6 +4536,12 @@ static int sd_probe(struct scsi_device *sdp) } } =20 + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_revalidate_head(sdkp); + if (error) + sdev_printk(KERN_WARNING, sdp, "could not revalidate multipath limits\n= "); + } + if (sdp->removable) { gd->flags |=3D GENHD_FL_REMOVABLE; gd->events |=3D DISK_EVENT_MEDIA_CHANGE; @@ -4192,6 +4556,7 @@ static int sd_probe(struct scsi_device *sdp) =20 error =3D device_add_disk(dev, gd, NULL); if (error) { + sd_mpath_fail_probe(sdkp); device_unregister(&sdkp->disk_dev); put_disk(gd); if (sdp->sector_size > PAGE_SIZE) @@ -4199,6 +4564,19 @@ static int sd_probe(struct scsi_device *sdp) goto out; } =20 + if (sdp->scsi_mpath_dev) { + error =3D sd_mpath_add_disk(sdkp); + if (error) { + sd_mpath_fail_probe(sdkp); + device_del(&sdkp->disk_dev); + del_gendisk(sdkp->disk); + + put_disk(sdkp->disk); + if (sdp->sector_size > PAGE_SIZE) + sd_large_pool_destroy(); + goto out; + } + } if (sdkp->security) { sdkp->opal_dev =3D init_opal_dev(sdkp, &sd_sec_submit); if (sdkp->opal_dev) @@ -4212,7 +4590,8 @@ static int sd_probe(struct scsi_device *sdp) return 0; =20 out_free_index: - ida_free(&sd_index_ida, index); + if (index >=3D 0) + ida_free(&sd_index_ida, index); out_put: put_disk(gd); out_free: @@ -4340,6 +4719,9 @@ static void sd_remove(struct scsi_device *sdp) struct device *dev =3D &sdp->sdev_gendev; struct scsi_disk *sdkp =3D dev_get_drvdata(dev); =20 + if (sdp->scsi_mpath_dev) + sd_mpath_remove(sdkp); + scsi_autopm_get_device(sdkp->device); =20 device_del(&sdkp->disk_dev); @@ -4508,6 +4890,9 @@ static struct scsi_driver sd_template =3D { .resume =3D sd_resume, .init_command =3D sd_init_command, .uninit_command =3D sd_uninit_command, +#ifdef CONFIG_SCSI_MULTIPATH + .mpath_remove_head =3D sd_mpath_remove_head, +#endif .done =3D sd_done, .eh_action =3D sd_eh_action, .eh_reset =3D sd_eh_reset, --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3110647D446; Tue, 1 Sep 2026 10:46: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=1788259619; cv=fail; b=C6GaTQpR45yc+2BGkzsDO2WrDOEKHSXwV6a+TsMxd+BvugMpNnAdbYTZqC39/PSdC7mvJNn0ar5+goU1msoNKMqYroN1ivlj/I6fPUfMnfYXF69Vml5/rJTHekUd9UMzx/X0g0W/9tZCkYCrfvbe2IdUPNsF+vQjt7sdc0x9RKU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259619; c=relaxed/simple; bh=SzfpWJriGR3KHg6Ac1n6cyUiayNevUn4h/o+13uw5bY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=M+jLfj0iJoJp6Wm/Vq6c1LSOjUwFTaxChy8qydlI4vRaonDpY23KdXuVIP7dgXqV5Hup2cwh/At+Tx4fNJKZkBKTmfuLUFDbDLQ+aMLAmGzHCkTkAT4rMMia0SZG7TgD4SDtdMGtdEn9ROEdxmkknZZqaG2ZKtuxW1CoWpcLGho= 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=Vo7NfqKF; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ruga7zqI; 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="Vo7NfqKF"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ruga7zqI" 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 67VNvo402501643; Tue, 1 Sep 2026 10:46: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=cCdtmCk206BC8mTObdvMrFwjOsXH2/2uPTatX84AB7U=; b= Vo7NfqKFMuKmJAKaXu9aXA7UlnfjlXdIkp8Ix/VzvbY6x7ByQznEqd6gxRvVs8WD 4d05/B5vgui2A54LduiHCzo5aWr8WIfeWu/ng0Cr8nMcrkzvh3+aML3ZsDR9FA5w z9MXMeFU79d65uvessFlZA09pLH75Bb6+I7MxkW/c7YphLDdp1C3U4msOQBVCJzY VhtZlM49U4P69XqRImM3l22DIqIlOildcVnDEtFIx+C1ydQaEYWJtcSEizAHXAW7 rSyGvUhpYIG6Ciu58BQ5lngNimB+zrvI5Qdfq1pepB9zyG3X1tnM48TIy7l7jyqB Sl7UnLafCesYIvrpld6a1A== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbnubcbuc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681Aja7k001164; Tue, 1 Sep 2026 10:46:31 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013018.outbound.protection.outlook.com [40.93.201.18]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnvqac89-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:31 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CAjkEk6X4wXjn9WznplOIVVoBaDTcwC41sYyiUi7OxMkNd1MvHqJhmSvUgV66C7L7mDpwZ0PnF4sfSFwLr39w3/P7LGlSo5qE8UFL8IH/J3N6r78hT03phq+wWTH5aO2VH3dXUan7y0vpll3MkysluMme7hQjMNsSh9ipkPsyh/sK5I/brWzGIPwde/UbC+XIocmnws8AJsUZnXL5RGX3EzNUtz9Ys47y+iBG7j/Ra8H7rEFRIpbLd5hA/p6qLWAho4/YUmEhUS47gD00GVdlXAFg+9Fbjm+bkiHR5t5zeqw0nK528oMFKYzbYHYrW7EeakaPJtR7YcynQNDdCGYgg== 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=cCdtmCk206BC8mTObdvMrFwjOsXH2/2uPTatX84AB7U=; b=pL9KE7c1hiZSLf15SGJkpTMhC2jTt7WfzjT44CAoI9Dgm1Z0zvUvxtrBnfsrUzw77exB9QVgeJaZm22o9W712EAFLQrQdbOWYe96y/8cFBPvlHBZstRr38AvIYuXFnIURLyJ5Htf3xa2kJZFwqkRyG9507AbvKXszEsCaXE62OG2BVsmg3Dk0fmZFxxEfm9hr+Kh5+ogosAqL3gpkFqqhSozifhG1Ov2FGB6Ir548kRg91RyjTQzHTskLjYMOTUQZXLT102bfXYDd2u109vErd0fswG+PpdqjgOy/QX2lkDJleMKBqZtWEr2ZV886rx16TjFYShYCd6PSdwxexGykQ== 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=cCdtmCk206BC8mTObdvMrFwjOsXH2/2uPTatX84AB7U=; b=ruga7zqIEmyGzS/RVNq2bcC3rmt0k6HHuvzcO+Z2uQ+ZNza4u6V/ifNxKtJIgvwo1w35/xMYRNmqlCTdCDgebrqYz7xZfzOGF6vunKsqVJp2UYNfIOiINUF3fJdO1Gwg8w/KCu/bqccZ5ql8lZ5p34dXL5IKHZ3uyKJYr6LlzWs= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:28 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:28 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 25/27] scsi: sd: add mpath_dev file Date: Tue, 1 Sep 2026 10:45:24 +0000 Message-ID: <20260901104526.3850621-26-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P221CA0087.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:328::23) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: d1ddb36b-1d6a-4bfc-adb6-08df08164717 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|6133799003|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: 5YqfhedOMUK7McASmuPHeFufGw3+Xh+iF2p38c+Tk7wJjj7dU7g6AbQSkqVUZ+HaKoy2k8o4oVqPwEfmbN5f6hWGNxIJrYxmNsUQcJcJp/Wa6wwJlOpLwWPp08jgLgAGy4t4R59EupEZkJyQ07NPlhrrMxFqwseVyngeMWaVI6UuFM7u6tilgJ+JpQe+D1HTWkQSnj++1/UM1A1gzZTiwynSHfxjYtkd4kRlSD0F+TzVMmYAgEOWc6VO0VbDeGI13dPQGat5jAuYcBUrl2E6IeqllxzhazXIu8X0pK1BoLUlX6R/X1A0Dv7z5ijdMMwBg5otS3VnUyyqpaBwNX5UjuNI8qiqFUXB23vX7kUQ9XRje3cX/xyQE+Cz8aJgH3vzeuslylZXd0oZGzlmN3CTKX9kisHvAiwOkY7mNsBVKTzPEtGJByWpWwJQnOYWb74YDt+oWLZaHpeKf4gIQVJ5/8QNrI9LmIPtB3bCztOCDwszkRxKsGinQJwA9TEKTIQv2N1hc2p9TmBqSNRnTcAxBJUmDmyM9ltHQ68c1y+Qs8H9F65LtL6KkrI52SOJmFycl1JoAE/UXShWFLurvcKRVa4P9flVnHOMH+xGnXfdspCOiUSeBJaPWu2TP2hHENpTGeSzjMBkV7DQDfM3BRgmAfqkFf4t7Vd4enM+6sY2+Oo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(6133799003)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xn9+JrkzDyGt3L8RglTUeX29xrKygsTb8b2rrX59jaEhn5Zt/vfovLICGyty?= =?us-ascii?Q?/3q7gN6ilzCEYqZBhTxKzuP6vUjbytAo5VMY6T7QXhgzCyjSd/s2/6QUK6Ae?= =?us-ascii?Q?wUamhMF/8w61y2/F3qBnwQZl7ZM/pStzCvpZbt3x17uVqUtpbD/+fluzOdy9?= =?us-ascii?Q?1mVDVYRbXrUPgbc0yB9oYpQOQd6JsI3Y8f7dufIgXubq8pHnOlc76OM0r0b9?= =?us-ascii?Q?okt2RvP9ibGNTpmZ3wrzfuNwUWduM6Z+gX2XQUb3D7XSz1e8flocfxwsIhcw?= =?us-ascii?Q?74Y04S3JIOr0t5PwlGmTkB2KeGF2WaLdv1UEPtNps41siny5EAo4WDDewJhi?= =?us-ascii?Q?ZO7tNblmNdDgzgnFOSyXadZmqX/aY3kwopUBSF6Cjo0VW1SlKZAblXs1xCpp?= =?us-ascii?Q?VGGXAon9SZxrxM+Ic0iRc/Es2yTzvqQnyXDXc2SavIg3lxoMHXezkMSrPIlq?= =?us-ascii?Q?zMMKfBsGUFtJ7US5Dq1UH2pR1KZSK7SGnPcltbXvA2Un0bpNLzvjj7bLreSp?= =?us-ascii?Q?xdDjsrKeRNRZ4pcbX8UpjySvKn8rGIaH6wtkxpTTXmCHa5l2YnZyhZIyrO01?= =?us-ascii?Q?oreaPRnmWiovtQjrjUOaVI5ZaKr4xdz5l17T8sLizjiCpn/jazpqFQoYoXNA?= =?us-ascii?Q?ddqmM6h0OF4SazPxV1Oz3EKOUinu2dvdP7+ygD8U9MEw+w6t8qDoeW9SlCfj?= =?us-ascii?Q?Ysfco7FvUgmqA+zm44QgjKQkWYUn4sm0sa+Ln2mlvmcRdJ8wvWGW2ALAaf2S?= =?us-ascii?Q?gsvZeclcxOMaGjzgVMavjSHVvuF4cuD+Ko+drJvCePAsVm5Ct/yI26BGCx2A?= =?us-ascii?Q?GCgOc52JqR57Emw3qQ7QaqGGpZHzgPHigJfWMZoWpWp4IBfEXekrZMZVnzpJ?= =?us-ascii?Q?QZc9SXsp+Sat2Vx2C83QturOd0okJeal0hyY8HhxYpPdepAqwKWdE5XnsF23?= =?us-ascii?Q?58jjGDLZCsL1pVcSEK3xlSLca4oA5kvbjW8+BpSl7viJaxxvZ+XuvuNRC5tM?= =?us-ascii?Q?WT6V9F0odIocLFC/x+Ouy3sl5RCjKftGonfw3SQyROckBsaHIjlt9Mz5RYa7?= =?us-ascii?Q?VE3Sxe6BF/zFzWVtxgyZHIUIvbnzmdkwpwNjKqvVI+FO2CnSReyVS3N/JuwP?= =?us-ascii?Q?NPANDzdaYcbrYbxFvxwu2tdfb8dOiBimgVMOMiXrrxfr0qi9HZu33upNQw8q?= =?us-ascii?Q?IJWkR29QcjbkY3HFp99ARk9Cc6oWucajdYcbUjoMoGRnxqMyOZWaeLpIbRAj?= =?us-ascii?Q?9n+7tl4KpzDrTe+UebzXqqCh7qbkA0W8dFqUNeFc+jBmvvALVOpSOPf4B1EV?= =?us-ascii?Q?wlfwQMpd83JSI/pJSxGp1zj0eQiO03Vy3Rdhh+eh2/uHjurfyJ0pOyuCgWme?= =?us-ascii?Q?ODx7E5eUk6hx0oQLS1sCIrCWOezE1uQA6Th/0T3LGlyZHeoLGxUXUpWygslA?= =?us-ascii?Q?49MwPVk+T1BNCgmZlOnSMwqkGp5qIJ1qCY6/af1hxqv/ytF5Zm0ho/eOO6Bn?= =?us-ascii?Q?vk30JM1syFZMWCoIcBd5AA9gwX/TQKLMu3FZlq6E5hMqQOpu8DaI3qLn7TGB?= =?us-ascii?Q?Zsz3OooZep06/DzF+53V29wjC/PmMWwDr+h4uJueonRZgQlxHrYIvIFB/UBv?= =?us-ascii?Q?3hd+nitVlH+OGJ8JYdG59eM+PbimGeDrTVcyTJi6z46sESwKdXwzfl8NA5sT?= =?us-ascii?Q?eMCGqTHSqS12tjqNaAPYccLL7IUdFpmWsl3XhXrvFqpyc0NCXrVuQyfujzsX?= =?us-ascii?Q?hSY3DJcq3yiZMjj651EBaJ2B31n7W6c=3D?= X-Exchange-RoutingPolicyChecked: pmr+RCJyrPdRboiIlpR6Tu+1THPHNDDL4GcDKViclz/USe/W8JUtSzGe9QBsZMghtN5YEy5KGQoUf3/rJC2rd5sxfWQwO07lg3GC+G4iNwtELf0BEXeiLLq6kOyF798pCC/ZjMeGCh8UtRbSyufHShos0X1UhZDeAL2NOalFMSXODUPQvx7e/danHsLUaHTlIIm2aBzN0/lj53ewAG6BuszBzGKURh0OE9Ojjt7qWGutpnszprCkP9ZSUDpYLEZPDhYUNR47+akUEvHMH1LRkveUk6tSlDlKnxSw/wm5e4nsx8DyqK12N3F22zTpBd5rsdFm62Bnl0zCrMWq7GBtAA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: w2Bcx0zFFLIgQuYNwsXboLk1amaAbG6Y5L6nKt8O6uzlHO+hRsKhvW6zAwFWgs+wZteEIkaHQ2af04iL3Fq0oOtMjp9oRfjTK7DuY2bqjJVJHtGPLmGLALfFitHY+pFiyIFuPhLE+RkIf3NB4C3HgFREi5oWiePzbFf47xwrmipxPblJSpfCygnxQKN4ybXUZqs+5CxbBU9VhncGICqdBXoAp8FfWoiL0QEjlLvG/sYscUryyQVwP8JMY3gXEcS7AU7DYJPEK772ztuFEJcsfLG+z8Kkre00LcRa08L2oqOCWbh2P5YeAkzO5wv2QlAI4BgN54ZB65j9FyaaWCXKcG0LJ4W/FupKUfNEiev/93cygjfyjes3VOQftnYoO3ZYC3eHAbUhveawsDuP6XFYR91IzCNVmpfxwQlFJoDMBLrs6S3FP//ygNkMEaWCrnH9OzR/69ZoBCHG5u4S9HYNwRzz41P16WyQtYiPCgmbNH29IveDxkw+3DRXJDTf4xnJe1jVoLEmiZ+zxFPNTJYBdVTEGDh0l1qRHgairISqiazG/7QVdJ8Ey+LeBZRhbR6q9pthnXkwedQWWrxwO4tzQLa2qKfi085I+Oe1UUPWsmw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d1ddb36b-1d6a-4bfc-adb6-08df08164717 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:28.6349 (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: U8Mr9E5ePLiv7Fof4QwCvr98lF1xb7Jk/35TWhog4NnN3dYWDbuz5EpeyMIH+awdtj7W9Dn/jiPZMjDHk3QHVg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010095 X-Authority-Analysis: v=2.4 cv=QoJuG1yd c=1 sm=1 tr=0 ts=6a96ad08 b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=x4eqshVgHu-cdnggieHk:22 a=7RnQmdzTPIgLJ45uHnoA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:12102 X-Proofpoint-GUID: SLzBl0Bqlsm9j1eWdxplFArxm51AWH5U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX7dZUYx2edgXw n05uLITmMun+RB4omofGQw++SaTNkImsy1i7ryZ+MnZQ4yJDg4vNgRS3+epRBP4z/E3tS+l0F3O BnZICSATDtaJ47GRCZmW7qWXLl5+6r7XD6m8hPetSiK0sAo+wtfOFdf27dbzf52l+8UJL2WDIbu iJ7Qt5Zzo+/glYPZYR48WpYhk9WnMO2pesumOF6GSEZwBrakti96B5bTnEXI+vOwjMy336oHEYu Pi2eDc+DgjI35Rsb5Y27XdCrqY7+a0m9KVh4ld2fKfWmMRXjuCnk3b0swFNEqxA/nLAsy1t4+oh sULTxuQIzwGG/ruyWwD64xOoDgnY1I5rR34gbuvzLmzh7fs2B2dsbjpmNGtZbg3Y1gSLeW+Xtv7 wJ7bignJ4EpN4u1jqcb17a8g2VYa6t1E+zy5+B7YV/7nW5jcS5FCjsceiUH40aoMg+blncw7U+z snGgfJEmVcXabutaD7OmEqS+k7LvxhAmrItt39Aw= X-Proofpoint-ORIG-GUID: SLzBl0Bqlsm9j1eWdxplFArxm51AWH5U X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfXwPRkatwBRWxY kb2S/WF8zksWeUJAT8+N9lGeIxgiml60uXRS9UdVKVbkGFpS54zXkg4jenDgT8dqYr6xrDgtwY1 O9lck9K2s38RSLULXOCOsscnu6/KXl656Bit7QbLv6guQJss7iTi Content-Type: text/plain; charset="utf-8" From: John Garry Add a mpath_dev file so that the multipath disk can be looked up from per-path scsi_disk directory. The following is an example of this usage: $ ls -l /dev/sdc brw-rw---- 1 root disk 8, 32 Feb 24 16:08 /dev/sdc $ cat /sys/class/scsi_mpath_disk/scsi_mpath_disk0/sdc/multipath/sdc:0/mpath= _dev 8:32 This can be used by a util like lsscsi, which would find that the gendisk for the per-path scsi_disk is missing. Signed-off-by: John Garry --- drivers/scsi/sd.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 28304a497d8c6..8c79a0ab52575 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4122,6 +4122,77 @@ static int sd_mpath_add_disk(struct scsi_disk *sdkp) return 0; } =20 +static ssize_t sd_mpath_dev_show(struct device *dev, + struct device_attribute *attr, char *page) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct mpath_head *mpath_head =3D &scsi_mpath_head->mpath_head; + struct sd_mpath_disk *sd_mpath_disk; + struct gendisk *disk; + char devt_str[13]; + ssize_t ret =3D -EINVAL; + + /* + * This attr is for the per-path scsi_disk block device. We need to + * handle the scenario that the multipath disk has been deleted and + * the per-path scsi_disk (and its attr files) is still present. + */ + mutex_lock(&sd_mpath_disks_lock); + sd_mpath_disk =3D sd_mpath_find_disk(scsi_mpath_head); + if (!sd_mpath_disk) + goto out_unlock; + if (!sd_mpath_disk->disk_count) + goto out_put_disk; + + disk =3D mpath_head->disk; + /* A reference to this disk is held through sd_mpath_disk */ + if (!disk || !test_bit(GD_ADDED, &disk->state)) + goto out_put_disk; + format_dev_t(devt_str, disk_to_dev(disk)->devt); + ret =3D sysfs_emit(page, "%s\n", devt_str); +out_put_disk: + sd_mpath_put_disk(sd_mpath_disk); +out_unlock: + mutex_unlock(&sd_mpath_disks_lock); + return ret; +} +static DEVICE_ATTR(mpath_dev, 0444, sd_mpath_dev_show, NULL); + +static struct attribute *sd_mpath_dev_attrs[] =3D { + &dev_attr_mpath_dev.attr, + NULL +}; + +static umode_t sd_mpath_dev_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int i) +{ + struct device *dev =3D kobj_to_dev(kobj); + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_device =3D sdev->scsi_mpath_dev; + + if (!scsi_mpath_device) + return 0; + + return attr->mode; +} + +static const struct attribute_group sd_mpath_dev_attr_group =3D { + .is_visible =3D sd_mpath_dev_attr_is_visible, + .attrs =3D sd_mpath_dev_attrs, +}; + +static const struct attribute_group *sd_mpath_dev_groups[] =3D { + &sd_mpath_dev_attr_group, + NULL +}; + static ssize_t sd_mpath_device_delayed_removal_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -4402,6 +4473,8 @@ static int sd_mpath_add_disk(struct scsi_disk *sdkp) { return 0; } + +#define sd_mpath_dev_groups NULL #endif =20 /** @@ -4554,7 +4627,7 @@ static int sd_probe(struct scsi_device *sdp) sdp->host->rpm_autosuspend_delay); } =20 - error =3D device_add_disk(dev, gd, NULL); + error =3D device_add_disk(dev, gd, sd_mpath_dev_groups); if (error) { sd_mpath_fail_probe(sdkp); device_unregister(&sdkp->disk_dev); --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 311A648124F; Tue, 1 Sep 2026 10:46: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=1788259618; cv=fail; b=jgKVNu3Ze9MOk5875sSpQ3bkx4up/CY0SfxV/M3pcRDcmP0bOm752XTuGmdsrGH5dL22R/lt3Bz8AS4orMaizLiCMxacdsKylroMkOzzk9k9w1J1mUMhvzjrJRCFsLT39ju1zGaCkhTZEl0fmbSyURSJC9pUDh74o6EqFQeCgwc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259618; c=relaxed/simple; bh=eNYLT2Xq7HytdMY8FlA+bswiC4O4B47RlvkZuaCWdl8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Y8CApKAfSK85Ji8MCj2UgCSJH+jK2m4/4BxZptyh9/xkQ0/tGP4bRoaOq3i2yvw0VO1Ch1AugbTdNN5y41/g37a12ysWy9gUzPleONO+fg9aS0I+CQ44nx/FpCSmzYd51G4zuGZ8uG9CH/nqhAcBYMr0JaKV3m3zcWXujMBIiVg= 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=UWsuq8ti; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=tjFcKpVM; 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="UWsuq8ti"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="tjFcKpVM" 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 6812psDI2878056; Tue, 1 Sep 2026 10:46:35 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=BbHnirOdSaShtpQvZ9aML1V1Ld9TJnnVoW3N7sLn4bM=; b= UWsuq8tiqcC8LKLr5B0GeDfM5z9MBlKfUzir0t85tukc7iiTnBVv+SuqWj6bnb5W J3l4zY6sWd4/D5BQtxg/8j2SWcLZvdQZHKYPv/aj/2xFMIg0hipH6+K9D7aD5uqf geudZVU9dlKmdZ2zIPD2hio5nL7EW1j9KJ+9lmNJzwrWWvvmwCQVSYANQ37pXUJg Bv7K8fmgRlYavU7Hojn1A3iq4KYk3WImYF0YJKoIfikd7snsefUgAwsQMsWiYPxp bP2dMx5fnJ4clHJnTvZmMIs/xC4mC2uvBEk6H7NYBARHsZszEJFtmIQCc6VXAj8M 8nDuRcOMfDZBCdH4xRxrWw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbq1smbvh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:35 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYtk1040131; Tue, 1 Sep 2026 10:46:34 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013012.outbound.protection.outlook.com [40.93.201.12]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8nf2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:33 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jQY4yYA3cA2LAeeLzopbDMYXfaRxib0+xxlqSoAMpLUXBl4t0SFPGTN0WQMqgxCygEnBxXlM/WXxqLsGplavXmYVdT/hyRsrLrxloQQyT7Zbn9Cbbyt9VLMQYCKPJGuLtShacUwydH+PCjPg8dPsrnK54gUvEkl1ldPiBLDm0SrqgoxE4rcuDkYJo3w4c1sL4sSZLCNISBhCgDq/b4/f9ojanaCEi6M00SA+4eOKsx44ztZTKZmYOcz7/PM23jQ3ZxE1NBoCTHWE1aZaTwlSv8JldPSbnB7sj1ocyZYW7JoP3P7enfpSITr5SPncdq+jfAdfh+4qdRcOPVe5BydHsA== 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=BbHnirOdSaShtpQvZ9aML1V1Ld9TJnnVoW3N7sLn4bM=; b=Ai+j0TLI9pDM7E/nCYow3sF+tpEVsfYp6dAtYpMlUb8pJh74jcwbz+YC1D3cTkZ1JcOqttFRdnYa6YSWAlT25m9lCpd8jHxkyv/BS8qgCU1lk7AQhGVDE3r9TY8RIufCtQC3ut8nY16q2/qBDsJxNmV6SPcG9zs6WBOwLaq8F6QCnTxjKVK0RPY4/HmQRWcnxBzVwqY5TF/1AUcQrMTOxGApMTBKfh3c+1B0rQvrDZqmGbxfhF9xqeMl0fym6HryaNtiAKkGNsgTmEM8jdrA2cet3fGW0rdu7bSUQkRxTllDpMbwL99NrnquEULX7hYUxEFnRthn7IuF4rpn3icxSQ== 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=BbHnirOdSaShtpQvZ9aML1V1Ld9TJnnVoW3N7sLn4bM=; b=tjFcKpVMI5Y4ww1RSv35XUoWs/c82Qy0Z6n5NQ1eUMiwaJ+ay9xC0AjicCsTzP0kH/p2Z1lahUY3i57fnDXdEw7ndhv1PPyNrW4HiJreJfI/7iJTdhONQspF0rFhyKgp5koK7emXoHCKP1kpIPa12FNgM3zxO86aJWep8kF4lzc= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:30 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:30 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 26/27] scsi: sd: add mpath_numa_nodes dev attribute Date: Tue, 1 Sep 2026 10:45:25 +0000 Message-ID: <20260901104526.3850621-27-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7PR03CA0009.namprd03.prod.outlook.com (2603:10b6:510:339::33) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: e04dc813-fdd5-4931-8be1-08df0816484e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: xvNVNwxf7mYUZT8BoBrhzxvXmr5P8NmYrTmimrwyVX5dywBODjpkLEMKtHPbwDzYJO15YeNwnaFcGUANZfawCop8oAJVSVKRxuyl431JStCB+xXYZT2jk75sEgZpH7hPb0GhzKSFDv3qVBNB5CoRxkm/kIBOG4rMoVZW+WlYPrg/iXbe1BmXFO7T4hNqNpTNUjWF8Tw0P3W6XGCdI5F8vaHl8OyApKLtBBsWM3s6hqDTm5Cj2pys4/rafKoYUQIdMD5u2Euvwa88+cRnZPb8Uq4swo3hOboQ5qyijUlNqNrs/cJbFksLY/RiXYjGfcgidcEbi79d1Sfxm3w0pzugeGJ4eGgvtNuHUIXmWq8PTCDpF0KrzPG4Xi43MRB8HYhXzcO5zVagmhnzJkWy+DzsgNn4Ap/oACb1PXySClZVJSvY518L6uXzq4LNY+4nQaYaibxYwBZre71uzUiOJv8lNd7j6cXG6nUCXdey97wzKNdQ0Ht8U7QWwwQyooc2ICUtLlIZGOrMwA0xYNSpiEC9g9CLu79ycUzXCWKS4/ENCsQLVwVGcqmylQ6Fo65uqa9YmUBWvRWqV8s2dthnLxVyFhWjOt/0IYge4OS8mubKHDd54FlB3v0RXTAqIAcs5DBFptApaudrls07WEfvL0r2dvJOnLGd5I3oojCJ2XTXW78= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oOjrSE3iPfWSu3RGtaYAEfpMFULYhgv1J1udfsfLnjsX72iQHK4KlolX2ISB?= =?us-ascii?Q?K9VuFqtAeBomV85g74sSbTP1BRbsyx32ReAnwkHUuVxqh3yfW1UIdcRqWpjN?= =?us-ascii?Q?MWEdfRMPdZOhvH/zsYEwi/HuTtdFKi7W21yJcynV5RH6/HrT9mTBNHXJrhj2?= =?us-ascii?Q?VvY8Oc2929/0/CooOOORszU34zuwX5MoYeO9vpZ72b+4BhbnCqEfBtq5OydL?= =?us-ascii?Q?a9CWUQfLUdt5DHhFggfm96eT95j1lPkAbCgYyqZ73oCz2TgUefreREVUn55V?= =?us-ascii?Q?g9rynQBpjzpSsQsGJ8vLboCx5pSc9S32GXxmBmM0GHBzKDEuNHi7GV4DSjoG?= =?us-ascii?Q?Oyf/Qn7e4TVk0dUNt9ZSmxy5ICbzxU/a6ensRGUf3DWcp2w64T0979W7ZZfJ?= =?us-ascii?Q?cyAxO/aG4YrbLj2Tz064z0m3pnMXTzHUdO/AFTqxRWK8BeeQ4v5I81sLUS6Z?= =?us-ascii?Q?Dpd1EJv8yQpk/tbrcCgf+cFBKUJKnp7490HxPLY529TkoNjmyIFNfPZG/tUE?= =?us-ascii?Q?4mE56Ehu63Bndu3Zvv+PgLqrGstiKgT3/SUL+D0rlx7OsETFpceTFy+gDFIb?= =?us-ascii?Q?tdJGdhgABe9I3ETM1xzFOTmSZqVyANLpQiwdZAfDN/dd9mrLB41wdA55eEIo?= =?us-ascii?Q?ohMhQZOfciQtVipMNjt5tnXtQhf/QoFePlPPOsp/1bAWH8WsAA8e1hJZnFAf?= =?us-ascii?Q?svwFYHGtivhbQVUvBCySs7gH/UNU4+QtE7x5JpjQHF/Wsh5oLSrioUlAtWhz?= =?us-ascii?Q?A3Ew0VKxJCGbQOQ8dtQDhqGN9tBiE8VOAw4veV2gbKdqEumdY9qBEpAuvdMs?= =?us-ascii?Q?tfPix7IGyVFAdsh9AX53Wj8j/PjoKFcqb+uEYi/i4sJU4CpofNQHq5FVQz9d?= =?us-ascii?Q?b72+ZGJrmZ32Su5F1b0NaR8+6GwCPxB0zaez2L+vrkeKWtI4ll6GMaMFWOTG?= =?us-ascii?Q?UhcRKdRVpuLOcG2n1SU8g67wc0ioYj+/MXHtJ0X2A/Ffp2ZvP/Did4HTzXgX?= =?us-ascii?Q?esVglg5uIgY7/Drl6jotzEocKkycpIxNt3D1FKBBphO8vtXAYlGix8jObSlE?= =?us-ascii?Q?yhdj3FAF1hfhmlD0C3J0laWMR1awasLy279fumy8ke3BRYDL82EKQOA0gcia?= =?us-ascii?Q?HDwToe/lrpHJRd81xUPNOwb2lJGyikhmf2RAEVMfOAnnsBO6Aawh5N4WJoZj?= =?us-ascii?Q?YdaDtZPvtddGTCKUIzqMkAw0bJ8LrBJ5SZ+DtMtgO/+t25gYrZmKwnwgzZWB?= =?us-ascii?Q?pDJb6tJoXUgZameoyeKjHSFr1WVjs2epBrZC7pPvdEq7ASFUVcf9rjnLC7S8?= =?us-ascii?Q?rVnYcAsixuzMgT4fige1IMG3CAubenhAiePQiaaDPm1JZVcgciz3XtKKQ6a8?= =?us-ascii?Q?IO8JorBC6a3wBfLwDMXYMf8OmaAYUr/AdfBmYI4yHmikC3ik0YxwCVDOZH+b?= =?us-ascii?Q?HSLX45nhLfDKNRn6N+kvKDz1XL73zDwpXE5nqGJCQuk/gM0vSF+3qKIEYYl0?= =?us-ascii?Q?TzKOsicJ4Fxz/zI+hiB6xRCh/QIcbUF4cdI6eocdoIxTdERe06grQ5tyv4Cn?= =?us-ascii?Q?jXIcpX3CB+GsChs1GN3hG3mP+biLcKE/4x1pttltpzAMxLsiVzQPtS4eRa+W?= =?us-ascii?Q?WjOPpeDDLpQTD4DYTs7VHpLNzLo/DOS7NgL5ip+U8NoxHc2xJvhfZs5PRDkQ?= =?us-ascii?Q?5W3KtgQGgjqPVZ1Up2w1XB3vAUwaLgxcrlReSbodSJAddf04rdeGevh++gzL?= =?us-ascii?Q?Q1RWSiOJkozYNAmLitIzIzUnF38TDd0=3D?= X-Exchange-RoutingPolicyChecked: ymM/Onwq4g6RbyfCvH6/KsSIGuHRp1U/Kaway2Y6YP7WBigT0TSMSXjvKbyKVDmZQzxz+oWfmrIVMXRrBIS2/EQkV2AcFHssbUDjDTJhP9PSxEpb7aqni/6t0nqGuzCa1mgiCVaUchZUlFGD1WX3qEl0qvjRGRT9c4atVqVXugLOETLJhkmK8FhF55KdC1HAIwUycEcykTnh5zx3ChmsQGwaKGqnuP7FQTlwLEaKDfV6+Mq5Etx2YUZSiD9h8ujfoWMdcwDMKHmESZMY3Cqux/ZRwB3WaU0J+kBw2etjg2lvN7TVirtQWKmqsDcLm2UBGTMRRgfzdP9wBSkHsvCvBg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: GI/wks+CMxjjxoUqh3ricoFcx6QJ/G+rqZ89eZe2R2jPCDCKHLK8tpSjfYBVvVaxjqLUTYF9ovjB0Xv6w+3d6nI3mlp7w7TsST61i8aybHMOHEvSZdAP90M1khONtioW+jgLnujKckJhyBYW4jDtt+5WuDu/8ZVDZYrnApiMlhZEo9/dVWE30cVX8ctG8REmKomtbkkPYwN9OfIciZligIEnAqNHNe/WzxFR9g3VWChpWgqFzLAQN8B0XY62D66FHzh1fIqQwm01gL7y3M5bQx4D7mcw4fpcMzeoAQo0WhRfYkYEsDl8iFDwMQOTNeWcNNmAbTPsoHXLUzuu+lC2rm7I5uH3Whj8cATdAKkiE6cBGIDh+oQp7CD8WcebglIXkrmOv1fZtS/OcSYNYEOVoOD0ZKwQimiGFXanf4epR+cvT2gIav2KR0HSMF8Aja7IyYjmtvMu3MotoHPkJ4pcimvqrbr39QSaH04sNxX3tkrd53U4jbNUlf94vhNG1F5XNvhTZ4sVrbGOCogVndik7SraXIma+9l3Ciel7oHAEHZ0TroJ5ARIg3UAhB8/8nO1v2A+ALwKJJCC5XtWeE1w4aACUg+Fy+KMQq0IewxEobU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e04dc813-fdd5-4931-8be1-08df0816484e X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:30.7491 (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: CTuVBigepf0D4FP3H/B4vPrQqrcMh4QZPjhzuCzyel/JEj9jyWf9wV63N84WcNJ/XbibRIOOwAANucFfCMWVOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Authority-Analysis: v=2.4 cv=Vp0Txe2n c=1 sm=1 tr=0 ts=6a96ad0b cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=P2_R26dytZ8aPJic-48A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX4g4jO0eAlxhE IAizFG6PRT7QbnyvxYYf21J0px16kv3OZhR0mWwBcaei8xPiz+aTJv+xf6qM2Y0prQqG1MhgVQ8 B69118QKd0lrt3HVD5hg5eCMtPdf4QFgdiRth68rGJz98d+2fat6uUIPPXXpseFhNSOtUK2euEq CZr09dok1OYaXVH6cX2QYsO/YJ5qVO5DHqOuQtJNgWRxf3+3Ntjk7DhP6zZFxUpTMISI7/lElh+ zFAMkIBITlxQtkVzc+XBH0+yF7xMi9X6Pg4liVGCpwvOPwbZ62+Rc7hTFFQnvw6arGtuTgQi1Vw 2EtLiqopfhpmbrExu3I/iNnqN5rENGXSvfscL9+NkkPFmRfV6rR0hxcvEVBQdiX1yySWXUkuYbr AGPqidBjQ/r2oxmMn+5i2mRtGUxlMgQx+QfCtr0hL6t8LJnucq+RFEQJPe3H8fqXXylUWzezTRB zKLyGcWrLJoaZCPTLiA== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX95AGqEGs32qn I6zJ2SNo1sya7mVlFuaA9H6/QDihigF8IhoRm3/2NdKTyM53I3hhsSPrY/DBpzfXj9JASysehDQ wui7DiEMrNXugeyYBCdK5YYsM/bh42sMy010kzy95LccdlciBK5V X-Proofpoint-ORIG-GUID: UaOC3zOh6Xg9zLTr7ktUmLCUPpoDc_HL X-Proofpoint-GUID: UaOC3zOh6Xg9zLTr7ktUmLCUPpoDc_HL Content-Type: text/plain; charset="utf-8" From: John Garry Add an attribute to show multipath NUMA node per-path (scsi_disk). The following is an example of reading the file: $ cat /sys/devices/platform/host8/session1/target8:0:0/8:0:0:0/block/sdc:0/= numa_ mpath_numa_nodes 0-3 $ cat /sys/devices/platform/host9/session2/target9:0:0/9:0:0:0/block/sdc:1/= numa_ mpath_numa_nodes $ Signed-off-by: John Garry --- drivers/scsi/sd.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 8c79a0ab52575..e8227e00defe7 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4163,8 +4163,22 @@ static ssize_t sd_mpath_dev_show(struct device *dev, } static DEVICE_ATTR(mpath_dev, 0444, sd_mpath_dev_show, NULL); =20 +static ssize_t sd_mpath_numa_nodes_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct mpath_device *mpath_device =3D &scsi_mpath_dev->mpath_device; + + return mpath_numa_nodes_show(mpath_device, buf); +} +static DEVICE_ATTR(mpath_numa_nodes, 0444, sd_mpath_numa_nodes_show, NULL); + static struct attribute *sd_mpath_dev_attrs[] =3D { &dev_attr_mpath_dev.attr, + &dev_attr_mpath_numa_nodes.attr, NULL }; =20 --=20 2.43.7 From nobody Sat Sep 26 13:08:51 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53CA5481A82; Tue, 1 Sep 2026 10:47:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259621; cv=fail; b=ljupduD+Xz+EGWp4qJhz13I9k2vm/o9Ok/kdKNnLBdJ+ngYQYnrUuBmFSWX0Y9bqxj36BLNagX3uOWnw27eTAXhFnOY7Yq7MtxDung+/R+KuD4cr97JDeRRVcwRVrG3GkH/8PYo/lvdNQ4W6TvyST+cMqe7bAUFb9ca/aqISRs0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788259621; c=relaxed/simple; bh=K1qNmY7yhnWQ2n7OukKAYSZ5uD0PIAoq0KACcunw584=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=miT9rCPcIf+2ON3v5YDr0Ia82Ggncfr1aeqGQDFFAZGaZ1iiKy9wmmy48wt5U+xwFD9jlk+Obm74jJNZFunowC9P0iL7zREHIWVjHiSo/ZN8wbJ8tianC07Shi3l3qa8JvQeuvaNp7PFt2eK+sKT/1Ey2cY1YfcCbzOXXUCx6Ws= 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=eqVzhc9+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=xInSwXj2; 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="eqVzhc9+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="xInSwXj2" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67VLBr3g2296254; Tue, 1 Sep 2026 10:46: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=YnucySFgtjsQLDGVN5u9WVeJ3/xS7LfvTirXwVmh7AA=; b= eqVzhc9+Uqz+J5YDMMzCGm9EF6JMr/VsQUKo4wjdZsTAPrP1IQfus4a0QJlhHafB NBg8INMSjTBREXh3Q/AxPDzgKOMB1pSoK2UHVT9lXiuOp4aPEnIJfyODlrpZMk8P ImIkpzeBOtKnBqqd2PUxisjHnCHvTIDVrxMT7TdK6gbOSwUTvt/fZ7PNHOhkFGwl gEQ/AwoofXRTai/yUf4C4HO0K1WmVSBwyWcT4cScXaNjpzWIF/yiE1i47dK4b4yv 6rqzhb5TCJGyrMfiy8OB1UXM9vpUouOId63LZJo8zcCsox1lvrwJ32OmzeX/yFFE U1SnyXQgF2AvCmBPKMYYXA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4gbp0xvdbp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Sep 2026 10:46:36 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 681AYt6M040129; Tue, 1 Sep 2026 10:46:35 GMT Received: from cy3pr05cu001.outbound.protection.outlook.com (mail-westcentralusazon11013051.outbound.protection.outlook.com [40.93.201.51]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4gbnve8nfq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 01 Sep 2026 10:46:35 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sp63mtcdwX0HfOQPTbbBQi+VCGcD3K7NPlLvaVClTcRbkEoMqrRWJrlJGsPyUvVosdEdyyVv/AqCzqQnzHInmo6Iq3G8ZY5c+4YD16L8tP6WP2Dao3QqMOdYb2sPc0fDaeF4nMxquI4w3P0H382CjCtAzVabrcLk7b3tnI+IyqHvEoZAguaXaXIa3nmeONpe0WrVp9BWdmFqRGjfjaEZDumFb7KFy4d4Iy7ZSLyXBXo/oKXd7VYz6NybxgrvSIUjNnBO8cIA7yeTre4mTB3Mqo/rzEu3/n9fGnki/cZWd3ZTRe/Ck1eDEUclWVkT4W8EAV1CEdyEjISPcUJmlUGm7w== 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=YnucySFgtjsQLDGVN5u9WVeJ3/xS7LfvTirXwVmh7AA=; b=PyeET9hqGtfEormsnNZm+Qtrm6VfefpsEZvAuHiX1X9T4np3lMq6ZUBFH+IMm2uInoB9MQGmx+pn7/3qoL03Js7wbibu+RbIiBuQcK45xzgLLYrJb7ugX7xmnofW5DT+XvBAIxlbkCPpTuAHjcIPySdmCpla9iq6zgQxLJJ4AL66kNwIU3FFLvNc33T+55fBNUGkyyLJFkMFGzgN18lH0G7hY9cMsUEoUSrN30GDNlMmL2qIka6Y0/Bb3mnM1xS3ilKPMvjAoXzoUBh5MPc8Vk+CjeEkn9nEwczbPO8y2wgscjTFwFzST8IcqCZdfZJS1oHBiLTj52ZxYpRd/AFPmQ== 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=YnucySFgtjsQLDGVN5u9WVeJ3/xS7LfvTirXwVmh7AA=; b=xInSwXj2o0CS+mTagDYTCOcwPTXxg4oEFw4xlKQGdse7SEGPxFECB4oXpDZHoni2Hbj1CvwIqHt0rLAaW1JujdN/Q0wF9BiOzUmr53JbQVe4F/Ac9DKMbN0GLDpJopsWrYBZGFwZx5wnnCvtGh7wbkFglNrp9GFLqouv9uQV/Bo= Received: from DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) by SA2PR10MB4732.namprd10.prod.outlook.com (2603:10b6:806:fa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 10:46:32 +0000 Received: from DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d]) by DM4PR10MB6229.namprd10.prod.outlook.com ([fe80::867:63e7:13fa:fa7d%6]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 10:46:32 +0000 From: John Garry To: james.bottomley@hansenpartnership.com, hare@suse.com, mkp@kernel.org Cc: jmeneghi@redhat.com, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, michael.christie@oracle.com, snitzer@kernel.org, bmarzins@redhat.com, dm-devel@lists.linux.dev, linux-kernel@vger.kernel.org, nilay@linux.ibm.com, john.garry@linux.dev, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me Subject: [PATCH v7 27/27] scsi: sd: add mpath_queue_depth dev attribute Date: Tue, 1 Sep 2026 10:45:26 +0000 Message-ID: <20260901104526.3850621-28-john.g.garry@oracle.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260901104526.3850621-1-john.g.garry@oracle.com> References: <20260901104526.3850621-1-john.g.garry@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P221CA0018.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:32a::17) To DM4PR10MB6229.namprd10.prod.outlook.com (2603:10b6:8:8c::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB6229:EE_|SA2PR10MB4732:EE_ X-MS-Office365-Filtering-Correlation-Id: 4ec94192-e4cd-4696-f576-08df08164982 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|7416014|376014|6133799003|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: IV7ySgNy91uMz4zTMUlTl/JH7KRaIhwwNVf+UVhh4Ucbi9Ugp5KAbq0PQc3FmFxmA120jZFJstf5Gjdvnx0E7Gvp138gpcA/y1FNsioVA16NkGlANL5piX4s1SkSlTutfe5Wpj5ZyKuecfp1JzF0AfK0b30dsABl/Z2jEju9pw8zAM7ZfXRFnrohFq4ZQclM987TknCdXbPD0unUEoaoOej/CEHliM8zjrzxmCn25d4RCwKjHiH/I7AA0iECgO8fvAuA2UQc2hvVhftJimk9AOq+itTUG+JZupTPkeWK+qOHHT/jFO1QHL4PWr7P9R9vJqItNJoKe2GRnI/0yCLMhgwUiYbo46Mz9REULsrUS6lEHpptwle/7dgxkYUvNjsSzjZJGB7wH4hRGEXpkWKLeVnadLBh72oo130n+CT9zkM2DYuAEtaNglp5/+jsceHO2O6zVpBMyDMNvCIHUDCaCfmTV8Jpv1BNHvpD7ziosGUfsRZr7ZCFKhQ5cnJzZvkvavJgvSEgRSc0ObXrjikvTqw+9VaWcPxCiASbzCtoOL1svUxLPPcK28mpKpMVjYtVV0c1bzwXNMIJLGz3sjCnod4uGR4PoHq5fbZm230C41SlQr0pbwphXAtgKeBeqgRle79kmlwOLliB6IouS4CKyFMiT2TnpOPZ9Lm+/4bZMNY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB6229.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(7416014)(376014)(6133799003)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IW3cG5VggSq30FDnGWeA6u8pjV204M3LhxFclBTt0raZRtE82yVN/vxFGRcJ?= =?us-ascii?Q?e5DRrdwCpKHbdsb/rpPcnTy2k0iYBUYsjCikq4duEVReIf4BdY2LwIAWC5k1?= =?us-ascii?Q?Fa1vHxG/bcAmK848E/GPZDMe51fAm7WZXFVRQ7bW/c6+rt1lE7u30Bare8/H?= =?us-ascii?Q?8dCAkXmbxftuhoKL+QLEIfbmneoaixHn4yxGK7lSNE5w5g2ALSkFbQxcxQZh?= =?us-ascii?Q?ylm3Xhxcqz6yDu6NX4ON0uUrXTu7XrApCnBG+0hALAjTcF4g23MjYoJv6yBF?= =?us-ascii?Q?2mEAGaii3W3ErdNyRthMVraQJCK4Qh+b+kGZPZn5+vRWWfdlfjr/y43twCI9?= =?us-ascii?Q?BE26XqLFnxZAZAdwYmIxib9BNFCg2NLSONZfQa7J4n2Ul719jz3t7gTBPGlX?= =?us-ascii?Q?WhZnEFZmSmwrpdmF/VccVPT4Z+iF9lGwXWHi/RPlTO04yoNRDPb8WBtcOXOp?= =?us-ascii?Q?A3EQDwVhu6qRiM4D8QVo8FJWJNiAZUN14s+W4LewC7RFsOsTeDaNG4Lg+QR6?= =?us-ascii?Q?1t6khPveqWrz6nF2nk4AYiV4uRfGdW2bCS7E+qP1SIvL6NVFep2wrtOAzPMY?= =?us-ascii?Q?+YmYfo3brjFBUSYLTUt/lyU6CAPY44gVTKoVyuaMH8sECjuvD4N/3rv1k4ph?= =?us-ascii?Q?OfCgYEh/i3k3Ek1RXWxZOXx9NIEHcDZxTFyDoeXmFBKqwzmiGyQ0u8l4FdXp?= =?us-ascii?Q?bWuV4M8aBwvMh9vOpvGlzh1NSmqH7iirBWV4xBFJLqOZlnfsOVJPTzQXZAvK?= =?us-ascii?Q?4T86IIeGJprhR9GDCp6PJmVFDJZ1MWh+KK95gdNxxD2WP7fKj7rG7pg9f6Fp?= =?us-ascii?Q?YxgZjNStc0piDbalpg4vdhSp/n9sx8MwxxUFG7FCj5hhSx+kgW25VAWDfEiY?= =?us-ascii?Q?dPH7dgHN7z7CY7kndtmH/aZcGk8w7yHXcn//cU63kbgk0C319f5u9THmT+fD?= =?us-ascii?Q?UsGw8zgimwVV/ByjwWrOAt03ifE9ebZhjfoyHTi9pjhstdvjrIwNiOzTRIEl?= =?us-ascii?Q?ZvV656mr0y0TkP0bLNva8yZAZDAA1UtiBaqdzGS+N63VxA/MSpfUfyQV82Wd?= =?us-ascii?Q?UDM/vUij8Xvaf0hEcUg65EqVzs5eyynR/tKnJkGQ6YZHb+VZ0UGftBZ2UiO+?= =?us-ascii?Q?RZAa8mefalURxiA+sn0mXzmQNrb1LGvRlmBN1LWX+7gv2HN/CkWpvv8khRAY?= =?us-ascii?Q?gmErUe88lQQkGii1NZfdgAUtkcdHSJBGv7KbcSBZUX3lZJFeEEWI4atS7J9W?= =?us-ascii?Q?OtDu84RBXR/VI3o+Cjv0DHTFdfzk5ZI1ZLICq/kVbP+xwrxnuM/JQZEppJLW?= =?us-ascii?Q?n6QiSpG5KTjJIHYthtDRiKvfACPhC2Dr4DvrNpIJUrf6dWkCPQwWlD3FRhcc?= =?us-ascii?Q?wCdztBJ7KrUGUxh9QzR8ZwgFbtMuhdCRU57HvE8yyCkvPmnPaKKXZQSOGUUj?= =?us-ascii?Q?EgJU1Nyw1Gb6n85b3AzNce5RVQW5OodBVxdKNuTS3TNUXWYDcr73i3QErRtA?= =?us-ascii?Q?tUtualaAGWbvyCqPrbQ4IxBgIQMMsk/j6eFJewiQMsHglIz3uQVUT3X7XNRB?= =?us-ascii?Q?Riv8S2c6GDkgpWFZgsyFkV0J1E0tvKh39l8Ssop94++8FHuoJLXiuOdhJpCX?= =?us-ascii?Q?o1EYQHiEKrVTFqO4wlpZWk7HRhiX4Z6BOy7mlhsP0h/NLutC3AG8LPdzrkmL?= =?us-ascii?Q?i93TxhAXgnn71+u+YLW2LYaGkeBLHebegt/rwi6drZxtcv5VEJn22wJQ2lqM?= =?us-ascii?Q?IE0ahKoGEvHPOi8FLmHPdKw3+3k+Stw=3D?= X-Exchange-RoutingPolicyChecked: mTXwNwiRncF3EhIBEABv0V+IwU9mKp58IlK//XAA01kFEaBuV5T4IEERXVcG6gAOmCqEQSlRaHiT/mb4Oaf86uwzcxe5LRdxyRjbqflaLL3v3+xPX0mwxiRX1ymRwz6iIHx9jkF0p7zjOGHMAaaftw9RmmzEiIILcMOq05RFMYzfupku/v0FqCfkWIAYWLgk0a/U0gWGgMQSHwekYaV35rHDiqYQquFjMUqOoFJmXmlUxyDFiG5BqMBUesmFTrYt1E1wswyyJjO89bXXLrWiMUvjLVkzgpTlOZELESD6XL9prNO/advJVPTBhCXb85sn5MqU2pzD+3yx+6ZGLK+knQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: TK0KLEYwXn8NqP6eostLxoeOEGuZl9AUlzC4xP5ysdilIORbfju2/kZtek5qXF8ksx43zvP41mYQztepkK9++jei37xcYQ5lNe9C8wNzkBjFxg1utHrRXxadtr0xk4gAdqH1sOlsgMlev372E6YicoDvrkDa5WLXYzSQj5bMsVopjeF3qFTOEVJrzndFhCcYHEA3vIWKWChVwIMxy8/VsRQK5dBT9hw1ZNqzEA+ZCCtQ71bo4Cb0LIybEhc5qXB1DNQudn+eqX7IJGAcpujbo8FfzYVWYfD36eeoa91lsYtivNFYX/b+7f7fX/y4/SVy3O/LaJhEDQhCRBCcaLfKgh74aHJXD6gmdYkwCEUwyEh2r4S9v30PqkUpujslSH1PXSzUIpB+HZzoIdj50UVhbo8Jbn0emH6XzAsFmo+MK/jxtBbROnXhfHLxcc5MgmsDFVh/Kf5tvrFk/ciGhfdqZhqfs3aD7uFDs3PQb8oXwnVsiMEY4xf40tw4hmyBK6LnZpoygWGCrSkG5FF1NhZ3A0bcK0JIpqBVXOAqmZnNYcKV5plsU3Q/Q5E4pzIb0hauZqqPhJIoF+TneONcyfjxrz54/O8O/+M9WVaBI4LAySM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ec94192-e4cd-4696-f576-08df08164982 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB6229.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 10:46:32.6666 (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: bSVfhVH6ul6UQDItZJkY5t54iM9kMRnCiSLy05sv7JYn+s8KA3ad82u80wVyX3TW/cPY1j9Dxzwq+gTcEZ9qrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4732 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-01_03,2026-08-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2609010094 X-Proofpoint-ORIG-GUID: axVMLX_dnsatlOBQsdDiH2S2qA2OyBsh X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX4cZ3n8UHpiB8 njyfKqrzbQkh70HU06/0oyQ3nJbUkTBLjY5adrSX5Sf5RVdjzvbtt6G/9MXI5d1tSWeLoGsFIBZ xtpJtV9YvOlOZKhF/q+SHKSk4NbcUWHHHOp4yECUW5a1c2MaxQ3+7jsPb/SwXvGW4JOzc44nuzZ uiI0sozQW3lnp8+UD5CEfbnmLtADf3Nm+0pBoORfArvSr5rCnwhhtyeomjjVbHh3RPxS8KFFFdC jInZxnYW3ODk7aKN610e4pRNFDnGIGafratbwpaBioOqCzkPn6sGRITIqPGvZ1TC7zm6b82OmYl cy41hoQksxdK1ujPp8JpJ4F25L134C31s4k1XiHi7V7EZQmyvonRbRVNJPF3sBcD0jBQd8qtgGx ADAXfo3xLzUhlUoNCxZv7mkZLw+NLbE4CffMadZMaJ88rmhrhcNTIOZobmEAJGzzITSH28NVMeG zw84kDDI03j9W/Xj0mA== X-Authority-Analysis: v=2.4 cv=Ebb4hvmC c=1 sm=1 tr=0 ts=6a96ad0c cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=VdqzKS8jKosA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=RD47p0oAkeU5bO7t-o6f:22 a=bA5FzAUjrTEoIiOIIUIA:9 X-Proofpoint-GUID: axVMLX_dnsatlOBQsdDiH2S2qA2OyBsh X-Proofpoint-Spam-Info: AW1haW4tMjYwOTAxMDA5NSBTYWx0ZWRfX9+Ro49KAPitJ LcV4vcOWxv0Y2nd/kQJOJT+oJlzbVwhWT+8yKxFbhMVnlq3G4etdwp19orNONeHLS1DdXhiYXo+ Vkp5rPO8kN6CJ4zLIkBoNI6V/Mq8yshGS+g/jDw6Q1J+5OiRwvx/ Content-Type: text/plain; charset="utf-8" From: John Garry Add a queue_depth file so that the multipath dynamic queue depth can be looked up from per-path gendisk (scsi_disk) directory. Signed-off-by: John Garry --- drivers/scsi/sd.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index e8227e00defe7..7e1cdb05906f7 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4176,9 +4176,28 @@ static ssize_t sd_mpath_numa_nodes_show(struct devic= e *dev, } static DEVICE_ATTR(mpath_numa_nodes, 0444, sd_mpath_numa_nodes_show, NULL); =20 +static ssize_t sd_mpath_queue_depth_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct gendisk *gd =3D dev_to_disk(dev); + struct scsi_disk *sdkp =3D gd->private_data; + struct scsi_device *sdev =3D sdkp->device; + struct scsi_mpath_device *scsi_mpath_dev =3D sdev->scsi_mpath_dev; + struct scsi_mpath_head *scsi_mpath_head =3D + scsi_mpath_dev->scsi_mpath_head; + struct Scsi_Host *shost =3D sdev->host; + + if (!mpath_qd_iopolicy(&scsi_mpath_head->iopolicy)) + return 0; + + return sysfs_emit(buf, "%d\n", atomic_read(&shost->mpath_nr_active)); +} +static DEVICE_ATTR(mpath_queue_depth, 0444, sd_mpath_queue_depth_show, NUL= L); + static struct attribute *sd_mpath_dev_attrs[] =3D { &dev_attr_mpath_dev.attr, &dev_attr_mpath_numa_nodes.attr, + &dev_attr_mpath_queue_depth.attr, NULL }; =20 --=20 2.43.7