From nobody Sun Feb 8 13:16:20 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727997269972868.0046471052309; Thu, 3 Oct 2024 16:14:29 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id F088E154A; Thu, 3 Oct 2024 19:14:28 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id AD63D14DA; Thu, 3 Oct 2024 19:14:01 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1F8EA144D; Thu, 3 Oct 2024 19:13:57 -0400 (EDT) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E59081582 for ; Thu, 3 Oct 2024 19:13:47 -0400 (EDT) Received: from pps.filterd (m0127840.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 493HxRdf023040 for ; Thu, 3 Oct 2024 16:13:47 -0700 Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazlp17011024.outbound.protection.outlook.com [40.93.13.24]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 42205f8na2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 03 Oct 2024 16:13:46 -0700 (PDT) Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by DM6PR02MB6731.namprd02.prod.outlook.com (2603:10b6:5:222::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8026.18; Thu, 3 Oct 2024 23:13:44 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%5]) with mapi id 15.20.8026.017; Thu, 3 Oct 2024 23:13:44 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=QfRKhZhUeWjt/QZ5/ZBXqDkC5w4kts/eZTtCbohuY nU=; b=Oaz6bwHcKbYGeJHQuWoffeMQ54bcD6hzsurlJOCn5KtiNRtt34s4YNpgW b6ghp2JDfiCKvLi9rFpBkywFgISwTKJeJoGdAh9WBO4WQPV3BKsc2VmOCLBzrRlD PKd2sPwkl0DiiO35TPNyAokSODyb4V/pVw9DWGmlrO4uUAY+EEkc9Yr/FHZ2yw+e OT/e/7mEW6k+BwXXGgJEy2LDFo3TbPcgaefHqsL7rlapBTqW927a1sYrb7GrcyWh FDpJ/0o6nQ83mKA2EfPBl1TUIIM9h8QRO1IzPgR/WRvYGXRXu3wMussyQDb4/0z3 iPLr1QTXaGgqngymb04jil54IOvIw== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lDeiXeiavWciVTunArqoDsPAP0hk5Rd/TjCZkI1kxwDUIj0ledBnnWyGupV3HjV7bxk4a33vGSsDgsyvqNEZuhaSB8gnAP/tO3hLWOKz5Wptn4v8HunRvOEnXcQjQJH4E+H0SefYpVX3PagzP5axpvUUUgQgWzgy9ny5qj5DFI0mL+N4v10WfgGElXm/I3mS0ECYQD7byIJlsUmKAID8zOJSsn0Rj+pSGN4WqMCCW4YcBj9Nr7nnsez8q3OWSxcJpLcA+9vAJV34Ykfuh14xYynnqdTkHQb9JxuBCxD6xCslzVNHC+HX5Im6Dan+m9pGqt8gCUXbbXxjMaSdt7y+vg== 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=QfRKhZhUeWjt/QZ5/ZBXqDkC5w4kts/eZTtCbohuYnU=; b=J7v6qhJajZX1TH5OF9NKFG7NmLJ7OmQvEaz6m+L8dfqvOP/CKDIps9nFhK7bHLQJficy9zKEK2qU6QPixKkBroeILVQKJH+fscFGLBxkN0WbfuEBR+0xNfTPvYrvFtgcdQnk7Jr12e18gpTTvAg5DeWrSv3JD/T7YadIR7565HpjYg7FpxDHpvm7aGEYPYHJWzP55wDS68lW28pdeo4Mb3ko4HNh8/+eieqWMFpEx1pMHYU+pWAO7lg0g5fbF/qNh4gFwL/EPdyoudBwjm9UzpaojISRgquMeFsOLd8u9PV192T4Ag371AtqSnna3UyeGXdMvP089YqHq630VFxZhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QfRKhZhUeWjt/QZ5/ZBXqDkC5w4kts/eZTtCbohuYnU=; b=TPpDlSvvpuFsr6ayl3pC6+e0AOZd0h315EZEbN6rU9TvLWgDvV8QPsMRXF4xRTGx4Q7Oe34LQBPn8mVTxsWE5xh0751+g9xLbiLR6OkM7HH5purwn77APbowJmr9wdX6xhpkrc53uGVTSoG/C/Dc9aP6J80/VBD/TI4XIDGt9bdEoGxVrZkyB+hAM6zARKWJz0TM/AQhi4diDgqDeEyg31TjesiT0wyG3V2yKFB4LemncWG+hCKq/zeVk7NI2igcjXni7eYWBCcUeuJ2KDHqRR76dQ6qTChssaMdrXXYoohZUfEMn+nq2HU5HELPB2usOsH+ukwFlz3Oe4YMkR8xFw== To: devel@lists.libvirt.org Subject: [PATCH 1/2] test_driver: provide basic disk hotplug support Date: Fri, 4 Oct 2024 00:13:06 +0100 Message-Id: <20241003231307.1762825-2-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241003231307.1762825-1-john.levon@nutanix.com> References: <20241003231307.1762825-1-john.levon@nutanix.com> X-ClientProxiedBy: AS4P190CA0066.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:656::9) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|DM6PR02MB6731:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f1bfedb-e998-4a12-8808-08dce401073f x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HxBm9Ao9YTxWDlD90c+6JhSE/qezFVPczfkXOyY2RGPURBV8tRgGhYkGTcqv?= =?us-ascii?Q?+0CMUX3EdHwwKq0u33DBkUzLR1NmdqoMqmDKqyW4MlRoYL0wuQX61nxgEy9f?= =?us-ascii?Q?XNBWhB+3J2utg0QzBTwCUe004ND2i7BHENZ2yDeGV82ouK8cM3PKhUhhatia?= =?us-ascii?Q?2btIpPI+4XcSMnqaiOt6HLMt6fB1E2bcpmYovYHKU9MnwkoT/7UXkGTTEAw0?= =?us-ascii?Q?ow9JOeGgaQ7UK1+aHRhk39xPgVpbLaGA895UT99TL9pS+cmenlL46Rx0gK6Q?= =?us-ascii?Q?27HE+3Q7mHgrvrQj9/6olOoT/9SjJSZk2zMa0idQDMJtZSDHVVmHpAv1FgAU?= =?us-ascii?Q?wa52t61VD2/JsQBTaAmnGRJen/Emr+OHtKP3kG8++I6Z0G9zNv6gVECTQ69I?= =?us-ascii?Q?3vplh1eVB9AEla9TgzzcJ7xkYsaz/k4+zz2LhFox6HBN0aZu2f2O5cpDHy1g?= =?us-ascii?Q?sP3xVeS9UC9xqaT9SGnX4US1xVUceDBFdpcrWjT5BgxQSIeCJMnsEsYcegcp?= =?us-ascii?Q?IylbmaSw3tkJetvoFZac96iZi3QXGjo4JEIb2OD5nyfDF5KzPmEmLOMI3ylc?= =?us-ascii?Q?V/vdd0LGHin69VR0TK12hAuUxUbyTXA/uQ9rCqz5qGJwMY1EMVVysI9g2z7C?= =?us-ascii?Q?HcN0B6/pJBqWHOdbLgzHGs+X6OE1VyQt/kH8qwSR0PwCiehjsrhQwxJ+hjVt?= =?us-ascii?Q?261IUHi8q9gdOtGe9fBjavO88VB7+oWfHIwBESjvgmi8prjeQG3QKzf+kQbP?= =?us-ascii?Q?zsegmGKlWl5i/ap0wnvev7Ny/As6KvRVM67WzhEJ2z+jAtQSmfOERrOvocnv?= =?us-ascii?Q?9lSXcXVy+6ogg12MqbMR3E5zS+mVMZl0EM6WSbDKlo02fJIR2aibs2bYYqbg?= =?us-ascii?Q?ePQMh/61X70SeNY44rnyVS56O/rmthvMSqAezUjc0/KiK6QjSGfu0GWg9QiL?= =?us-ascii?Q?oGrY3j9cEH607NGdU3cX9pnW7U+kGM87FaoVZvY4+hIw73E+IdkzmCS9pQma?= =?us-ascii?Q?scU/G4AIvNSxB+eGLhmFtGoXQJq7t8lxUwNaie3aEHXcoZWXxJFaMq1LEf/5?= =?us-ascii?Q?o+tVbv9YVVtGLK7InOwIjDZNogX7hNVM0q3+e9dz4pBkb2oU3TGE0cjySlz0?= =?us-ascii?Q?mNHRUd6fZwLjjs/agf+NAcnIv5LZfftEekH4Wu12+Bo69VCNoIm+uBr6T7ux?= =?us-ascii?Q?+1Lkt1VoDJ/VGps1pkq6902sw2/i9Kna3pxh1ucBoO6VkaAfNlCXQYXE+5Bi?= =?us-ascii?Q?e2D47ZtlZlgwXrb7sL1Sh1JWT7MyeqaEm97/WFrPJw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR02MB6760.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lShpxaa0e7EEXLre4U1AHiGH4SeucjeZ5MJV3qNN3REGNurMcnRprLntgPnF?= =?us-ascii?Q?BYj7RoAQhxoeY9/JqzLWcMU6b5lVpGFpWd/EKR2JDJWp0QyukJSOVZt6I3jt?= =?us-ascii?Q?1Esspl1V+P1qG+FiGT9Pw3wqykuFLSLrbQ5/xCXjhBgYKdCtTGO8Zz6Hvqxu?= =?us-ascii?Q?KWQH9+QoGWElYSce/6ktlMPy/8umXO9JdwnqZ8g7ne0bM6QGU+16Kz2O/Msu?= =?us-ascii?Q?518Jg/C3QvkaMSsVFzJivhefqbQheoT/RMhnvDJ3MnrC6W+ayLHfkTp5szI4?= =?us-ascii?Q?myj3BhUXXgyIRh3LU6kh2vbCZJH7bj+xylZh5cYH7GMKYZS0hFHsaalDnPR6?= =?us-ascii?Q?m4VdPp6HCYH/OABxK2f9+/yLaw7sgpTGwRSwOauFfjInAEK6NT5goec5Jz3J?= =?us-ascii?Q?LL0yyyVEGvRZwN5c8nSAX1D063X9+Oi1+8TMFOlHRDg2dCMQ8T7KoLw63Hru?= =?us-ascii?Q?dBHbSU9t7/Dq0x2vduevQp7nYKoKLPQ+gs9jV72vErRtAJaJfkTlfX13/uQ9?= =?us-ascii?Q?g9ZPzqkidk0JLgBWdmKNhUZ3+BzQr7vm+FM8sf6z0TTrQ8VelgN6Pkh7F6zz?= =?us-ascii?Q?anQYGT3jUZxGmeunMzo3zhXb5QZCx2nkZKSiqPwh8M9KOq6vBxHoY1trpi9D?= =?us-ascii?Q?GKipCw8RAU+59U6/cxcrMCl4FuhJXtDsp4GzKpIOia45v0okMG7/K8aAu0Yq?= =?us-ascii?Q?LgM7C1U453YES1+qbNVtC8CO54F6JWLYrXz2j3edhimWgGY+vTebMm2AVGWa?= =?us-ascii?Q?3cL09V+zMNF6oE/evflUL11lnJOS6lD8yyJn8pJJ3rmXuLNEtNDQimgj3l7d?= =?us-ascii?Q?4El5ng+hdLHn8SyacEEVYLcMRJK+28lvUagHHK+HyF81ik5+jGqeXjUHcm5b?= =?us-ascii?Q?Wu/8f5Bc3X3DHoRWy3pQykzAm9Zr6iin299tqBye2cQR3aCzZolhu7A/qSBu?= =?us-ascii?Q?KcAXjB2Ae9yzpO29JgwwaQ22ZX1pfX10Usxgha9LP1+3+rp5FbqRstK/iJ2D?= =?us-ascii?Q?q5p/ZPyqm+A0VPpnN8AaVdIltzJl5n5SH/8c4qtufp4BEe9QPYKZJkTOYjpx?= =?us-ascii?Q?t2ah6HTTJMT4Q2ai2CKE+wQ+PoqCMxctjBOFgOvKvL+ntr9o+KrogXYgzXGf?= =?us-ascii?Q?8/FEvMi60zIJaeQuA+xaVBICdk+lldVnYFvAybYUpRwoQbcFzhqtCseBfggA?= =?us-ascii?Q?MfS+LsLt+Rg6FAEAHisF8Oll5CKCXyldKsPXVm9utGGkul3LLOAzPDzHscc1?= =?us-ascii?Q?ozBWvxFidb8MUkFrYg8PWDZ6fC+mDOenDrBy+jibBUsNBVUam0r/0kK03KGa?= =?us-ascii?Q?PqpkVAlqGkVj4eFs3OM1NTk6f2/Ie7aVci7sNvKBQbUSYsoutjL1bJr9yXte?= =?us-ascii?Q?cFZQ8zvpW2iurC5vjiim7j1lV+Rsm3xjDEMFQUJw+TGyzoDe3Zqi6+ZGhH53?= =?us-ascii?Q?R9olVAd9AujpTSM/3Q3AN/RriXa4fOvez9jiRMy9AYaUyTDSPTYGogbl0n+y?= =?us-ascii?Q?FCS3V7lKPykN7tlRk9zb578MNyIR+NKx89o3CAAEgqRzU/iYAJHRi/w6LaqX?= =?us-ascii?Q?YHu0S6uyWOec86dRaDQBH/0T9pEoP5ywwcScJrdm?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f1bfedb-e998-4a12-8808-08dce401073f X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2024 23:13:44.8513 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lYVPwmlwln2LmPbBHFZfAtIWLrNEijfaJZZgrcTU2Ce7M4SD+wtFVSu5l1Aemp7XxClWjPPOsrCw8RwFDsgbgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB6731 X-Authority-Analysis: v=2.4 cv=RKHhHJi+ c=1 sm=1 tr=0 ts=66ff252a cx=c_pps a=pibkrh05mLzxjy7FsoIMmA==:117 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=DAUX931o1VcA:10 a=0034W8JfsZAA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=Xf1eM__cp05pPCFU7fAA:9 a=14NRyaPF5x3gF6G45PvQ:22 X-Proofpoint-GUID: o2XGjKRRNvyhDaQEYOnt2cdFPoJYIvOZ X-Proofpoint-ORIG-GUID: o2XGjKRRNvyhDaQEYOnt2cdFPoJYIvOZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-03_19,2024-10-03_01,2024-09-30_01 X-Proofpoint-Spam-Reason: safe Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VCSIMHQWQ6QGCG2UHYUECKXDBXO5PFP4 X-Message-ID-Hash: VCSIMHQWQ6QGCG2UHYUECKXDBXO5PFP4 X-MailFrom: john.levon@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: John Levon X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: John Levon via Devel Reply-To: John Levon X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZM-MESSAGEID: 1727997270155116600 Content-Type: text/plain; charset="utf-8" Add some basic plumbing, based on the qemu driver. Signed-off-by: John Levon --- src/test/test_driver.c | 162 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 1 deletion(-) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 03afe8af8d..b7e36e8451 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10223,6 +10223,158 @@ testDomainAttachHostDevice(testDriver *driver, } =20 =20 +/** + * @def: Domain definition + * @info: Domain device info + * + * Using the device info, find the controller related to the + * device by index and use that controller to return the model. + * + * Returns the model if found, -1 if not with an error message set + */ +static int +testDomainFindSCSIControllerModel(const virDomainDef *def, + virDomainDeviceInfo *info) +{ + virDomainControllerDef *cont; + + if (!(cont =3D virDomainDeviceFindSCSIController(def, &info->addr.driv= e))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unable to find a SCSI controller for idx=3D%1$d"= ), + info->addr.drive.controller); + return -1; + } + + return cont->model; +} + + +static int +testAssignDeviceDiskAlias(virDomainDef *def, + virDomainDiskDef *disk) +{ + const char *prefix =3D virDomainDiskBusTypeToString(disk->bus); + int controllerModel =3D -1; + + if (!disk->info.alias) { + if (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { + controllerModel =3D testDomainFindSCSIControllerModel(def, + &disk-= >info); + if (controllerModel < 0) + return -1; + } + + if (disk->bus !=3D VIR_DOMAIN_DISK_BUS_SCSI || + controllerModel =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LS= ILOGIC) { + disk->info.alias =3D g_strdup_printf("%s%d-%d-%d", prefix, + disk->info.addr.drive.c= ontroller, + disk->info.addr.drive.b= us, + disk->info.addr.drive.u= nit); + } else { + disk->info.alias =3D g_strdup_printf("%s%d-%d-%d-%d", pref= ix, + disk->info.addr.drive.c= ontroller, + disk->info.addr.drive.b= us, + disk->info.addr.drive.t= arget, + disk->info.addr.drive.u= nit); + } + } else { + int idx =3D virDiskNameToIndex(disk->dst); + disk->info.alias =3D g_strdup_printf("%s-disk%d", prefix, idx); + } + } + + return 0; +} + + +static int +testDomainAttachDeviceDiskLiveInternal(testDriver *driver G_GNUC_UNUSED, + virDomainObj *vm, + virDomainDeviceDef *dev) +{ + size_t i; + virDomainDiskDef *disk =3D dev->data.disk; + int ret =3D -1; + + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("floppy device hotplug isn't supported")); + return -1; + } + + if (virDomainDiskTranslateSourcePool(disk) < 0) + goto cleanup; + + for (i =3D 0; i < vm->def->ndisks; i++) { + if (virDomainDiskDefCheckDuplicateInfo(vm->def->disks[i], disk) < = 0) + goto cleanup; + } + + switch (disk->bus) { + case VIR_DOMAIN_DISK_BUS_USB: + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_LUN) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk device=3D'lun' is not supported for usb= bus")); + goto cleanup; + } + + break; + + case VIR_DOMAIN_DISK_BUS_VIRTIO: + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("cdrom device with virtio bus isn't supported= ")); + goto cleanup; + } + break; + + case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_IDE: + case VIR_DOMAIN_DISK_BUS_FDC: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_SATA: + case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_LAST: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("disk bus '%1$s' cannot be hotplugged."), + virDomainDiskBusTypeToString(disk->bus)); + goto cleanup; + } + + if (testAssignDeviceDiskAlias(vm->def, disk) < 0) + goto cleanup; + + virDomainDiskInsert(vm->def, disk); + + ret =3D 0; + + cleanup: + return ret; +} + + +/** + * testDomainAttachDeviceDiskLive: + * @driver: test driver struct + * @vm: domain object + * @dev: device to attach (expected type is DISK) + * + * Attach a new disk or in case of cdroms/floppies change the media in the= drive. + * This function handles all the necessary steps to attach a new storage s= ource + * to the VM. + */ +static int +testDomainAttachDeviceDiskLive(testDriver *driver, + virDomainObj *vm, + virDomainDeviceDef *dev) +{ + return testDomainAttachDeviceDiskLiveInternal(driver, vm, dev); +} + + static int testDomainAttachDeviceLive(virDomainObj *vm, virDomainDeviceDef *dev, @@ -10251,8 +10403,16 @@ testDomainAttachDeviceLive(virDomainObj *vm, } break; =20 - case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_DISK: + testDomainObjCheckDiskTaint(vm, dev->data.disk); + ret =3D testDomainAttachDeviceDiskLive(driver, vm, dev); + if (!ret) { + alias =3D dev->data.disk->info.alias; + dev->data.disk =3D NULL; + } + break; + + case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: --=20 2.34.1 From nobody Sun Feb 8 13:16:20 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727997294913604.4487892890144; Thu, 3 Oct 2024 16:14:54 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id C6A1A1511; Thu, 3 Oct 2024 19:14:53 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BF13C14E0; Thu, 3 Oct 2024 19:14:04 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 31315147F; Thu, 3 Oct 2024 19:13:59 -0400 (EDT) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 7BD8915F8 for ; Thu, 3 Oct 2024 19:13:49 -0400 (EDT) Received: from pps.filterd (m0127840.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 493HxRpm023037 for ; Thu, 3 Oct 2024 16:13:48 -0700 Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazlp17011029.outbound.protection.outlook.com [40.93.13.29]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 42205f8na3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 03 Oct 2024 16:13:48 -0700 (PDT) Received: from CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) by DM6PR02MB6731.namprd02.prod.outlook.com (2603:10b6:5:222::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8026.18; Thu, 3 Oct 2024 23:13:46 +0000 Received: from CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51]) by CH2PR02MB6760.namprd02.prod.outlook.com ([fe80::fd77:ea65:a159:ef51%5]) with mapi id 15.20.8026.017; Thu, 3 Oct 2024 23:13:46 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=dWGpARmYAuL7DW+tudeoG5Zrf9vd0dadn0UFFLGsy XA=; b=S3hlQP3aE/vcX4UOgRuflgnGqcBG3Gy9WB9qYI/RpB5j9FXXl8qVAC7P3 Dn+idv+ZXVZkIZWVf1buo775lJaIaVB2Bw56jyBdqQSuM5VESGrDXUBmTv1cjhm6 B23LNDjpXzAHKz57b374qIV3Rc9nK4PKLgoEPw5Mtqf1TWwBQVVMnF0Id4ipVJuS 5LwwLkkVqrxVAmVdOlUo9vn1C00fSvZZWP86pBf5AKcsMJad3hk9xFbd/qeewAZx EH30SD/1GXaYZ/fF20YQ5opaXKSPdj4DjHT2PqxzuAejWHOJVZ040gTx+jARWqo6 8nlonZhpScXXyfXOhbSqGw3PVDq2Q== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w+iJU35ShqCDyf58rStIiPbCVa/yiCwZUGz/1fFJhPP2lwCvS4ym4mlMj+QS44Vjg+etWSszA9bFJujPR0DOx5uCNIKmNl/kOH3wZiSciPGwpjOaDOsA+SxlARPzIg5RT+J9vQ18AX7+SIS9z0/oqk1iMC9EcTJGDw5auvHKo7zJM9XYn2MM/iQjbwTYWvaA1vHLkFzpk8/IhOPQ8v6aOC0ahkJxglYX9pYQseC49Ygk8TqkzNaVblue2HOhQSi1zz4P1C/j8IgepwqITMFN4KSLexfgHOVr8RcuoT9Xwgowh1K8vw8+/3d5S/Swf/DaLRolfyQVfr8XzfjTmOZJZg== 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=dWGpARmYAuL7DW+tudeoG5Zrf9vd0dadn0UFFLGsyXA=; b=Ob3ORpXG3X5W9UC6JRBQyM96OaJPZWlklya7oJHXZZLMOevZ0U9BFLkkjOFVrIF6kA9+e493RspTyOwXdic2/zCcVxRgtM4baLlAbb0o3Bt0WqRrVUEKZ7FdY9NvkMw85ElcWuyYZPEKsRCKBqQjO4RlI4sJ6hLOwTOITdnK4tPlVd8Flkci3NnfLFOLI4sxJENyFtuefUf2d/SsT8mZXaa2hQsshUHgDRdAyRwBlMU7jaZpSpizbM5BZssuJeo1HGbrWDnbDyuW4BC/TzCToB8jZsOWYToOsV1NkgD7gf/YhwbBY80d9WFtb0n2zmWm01py5zW6QcF8uTAJb9e/fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dWGpARmYAuL7DW+tudeoG5Zrf9vd0dadn0UFFLGsyXA=; b=w4On20t5cf/gCGgGPhQLM3NFQMVPqAfBcYYMkoRrh+4n7pEY2hSs7DyzWq57qrzU1OhNXiQqOPe8//MmiEeB1ntzrdjmyTSPKvopwNQUwQNd8Ve6IfpCx9hl44a4E20dGUR75J4L/c797TQeRxLJGMA7C0W7m7PSapr3mffksvpLyhLONR2bzXM7p7QHj3jQXQuqvvl/Etfkk7RqeoRh3Qnx9fowfcU4o6iscsEcxWXUP+WOm/hWTrWxusU6WWB0PzuwSZkWTUtZ83mjwb5efZvmoho/BqLl7n2kPLr3bzNiwrPy+OLg5LjA/WxMk7mv70J9waijPqcmiZlMRpyYKw== To: devel@lists.libvirt.org Subject: [PATCH 2/2] test_driver: provide basic disk hotunplug support Date: Fri, 4 Oct 2024 00:13:07 +0100 Message-Id: <20241003231307.1762825-3-john.levon@nutanix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241003231307.1762825-1-john.levon@nutanix.com> References: <20241003231307.1762825-1-john.levon@nutanix.com> X-ClientProxiedBy: AS4P190CA0066.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:656::9) To CH2PR02MB6760.namprd02.prod.outlook.com (2603:10b6:610:7f::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR02MB6760:EE_|DM6PR02MB6731:EE_ X-MS-Office365-Filtering-Correlation-Id: d37ddf6e-8b79-4666-433e-08dce401081c x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cv6njhKa8gQCFyEegtZ3v+6Y3C36jAhnbj4n1s/IA2H3tDGh0N77Kp9/c3EY?= =?us-ascii?Q?wIPmjs+CUYLZS/shi64o905SJ72R6x/uXLprHRbTdZdnyVdlV00iM9kOMY2x?= =?us-ascii?Q?BRyWCtFlciZ+OwxD2Sjs14ASBvoCz8ktaUJyDAR7tUFu8IVgWjyra+XpvFfr?= =?us-ascii?Q?a1NC/xOQycnAZXjclESMk8iC9AxsRoS918kDipdgDAJxxajSWVMrWLszlybt?= =?us-ascii?Q?5y6bSbk2W9rsCAVlWQzd+K+Mr+uoKVPgm8fllNa746M4XoV1i/gA30K7vwRo?= =?us-ascii?Q?qG2RA391PRnwhBcIQo/d/hoqQe6RwQTh+/eBj589f6E+QswVNtIXIdPTI827?= =?us-ascii?Q?PJdGXbbvstAnDbKvoY8dBzSLuxUYBiwit17NXIPFRSuvpyYo9ZhoB7JLuQzf?= =?us-ascii?Q?V0/yePIuBphGxGcB+safFUWUJFJbYcLCgjnBaW5nVw6LI/OEDQJOE5FFqEED?= =?us-ascii?Q?eVuukahvIbxvItnVgBSLlu50wuxuE1qCCuQz/o2MG+IP9dMN0dd/xhMdv6ZS?= =?us-ascii?Q?zPm9KkgmzR7KPt2y504+v22SDDJ6OXXT0Z/CSY+DCO7VGQhi6atjq1Z3hrPa?= =?us-ascii?Q?zRqPtHHEA/21Ik5F7RqMwvi7/EQYdNhLwkv8/WqgBUWCvsntq8pMPPJgCm+L?= =?us-ascii?Q?YyHpv25e77YB5UFw9i7M3bluOfYzsAGOqPd59HJGvvaYaEDRzGfLbZWoNMv8?= =?us-ascii?Q?j0FX/iUWbq0DNPFA9wtKqSUMxLL6F4YDCODlSIGk6qHoAsWHWPnARAO36aU2?= =?us-ascii?Q?jDeAHbWCTqgdVjiJd+0Pt1FGhkfmNgZSviG9XJx9po0rQ1Rv4yQcODQ1FfAv?= =?us-ascii?Q?mTk+ysQyMB1GJUTyO7gxv81IQotG91BMHVPWcXB/z53L1Byfet8oajvORTIT?= =?us-ascii?Q?CNPfJRHje2Thyi+dnzm5V2aoDx0dufyZ5k44Mq+aaCdyMH6MNSeyk/ju8DVy?= =?us-ascii?Q?7VvR9Sp8QvkTLuLlgroJAwVQDlRN9LZX1olzh/hU3RgKsDud4FX6Vyzj6G4Y?= =?us-ascii?Q?qj8iKWPU8GPSb+5blkSbbLGbhP/ytyNXU01Be1/Nwcju/kT/gFbytGEIPiwp?= =?us-ascii?Q?p0BBSsMi0cUOT9ZA3JYitUyaiYSm9fC9JOv6vuwW97C0496iA93pUZUHkAkp?= =?us-ascii?Q?CWHlwmqAeIiAaS8gSvj+BOKyw/7hAr0mN6SM04pWCG9L/3of+WgQUyA7hcgL?= =?us-ascii?Q?93A3FC8/E+G36euJoQEnyQ9GF1jGcbX1QhpN45y+g/UR56d/Zq8vGm2NwW8E?= =?us-ascii?Q?S23BTSeHLmhzS33X9Rv0L+W97R2CBwRLGUTguSPVWQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR02MB6760.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DmVkak0M4ssfS26jm9tpy3/bCGeq5MAoHhRg1TMN1GZ5XcdemZ+1IMiAODAt?= =?us-ascii?Q?2EJwH5F8pZvWXJL84PVgch5zKJEQlZsykGZzSLCNEvnUyKgs/Nk4/yZenEB9?= =?us-ascii?Q?BHwJzJuQXXS941viymCzTOdbXyqB1rSgciC24vvgeKoAWMGo1WG7i1qSF9GF?= =?us-ascii?Q?ade7PPbt7/aTgOCLFFcnH0X2659/QeEyrnkzfANpiVgiOYnz7oYtI/gXe+G2?= =?us-ascii?Q?Ok+F+G/MCAvEBswSJLyOIP808bMuBhaj2Mn5C7yD3w1eoC7BGeSnanD3aaLX?= =?us-ascii?Q?lIr17MC9U4Z8oy1qjYWepwvferRIFnTi3hEdm7GNzOe30BXQooMuoA5q/lvG?= =?us-ascii?Q?dlEEuCiy9eVqm45ZowkEZcgGH1M+kY1kJv9Gd96FmCMNytvMzc4KUR5hVRMk?= =?us-ascii?Q?0IEzgBO3DPGJ/lGC3ckjUJYAe+OksGkv7dOiuLEAD5iv1GXSdvcVB76jtH+7?= =?us-ascii?Q?1VOMGlOuNIwD9EkQCM2vgvYqVeMARgZ49hX6AXAmXGXqfj80qqP0PicnMYDt?= =?us-ascii?Q?nRayuK8bbp6o1XHcJDv0hB4c785bzTyxF8QnduxGRw3A8fSBmyScfptDifHP?= =?us-ascii?Q?bwS+4O+tKV0JnAq8oo2Xs/YpcQkX3KGIYln1IW9gxU0caGML2jsg1HPYee2V?= =?us-ascii?Q?pj9M07dj/O/7ZobamKfrBaQdxXB5m8igyvcuqP1UTmNKgSGhDjrCCNy2SX/v?= =?us-ascii?Q?HGFZmxmwt78cCQzhUdEgsqSzIhD3idW2sr0yGrkF7pLhs9nCmPKOSc5pq740?= =?us-ascii?Q?Kmrv5kNsB0fmmsSBVErWkXlt1pQaOhYbg8AQCe6hv2L2b4zhq/TY/x/enboV?= =?us-ascii?Q?HD5HWtcVtNV6R8Lw7bg+8Z5uVkNOdLxqvujQK/BeJv++kfpH0XpEZqZDoGw+?= =?us-ascii?Q?H1um81lYjiZtb9aG5gDP1lZ17ktEvOnShICrvURJc2CW86fgORNg/N+G43tY?= =?us-ascii?Q?szMR4QdbeOfcgq/GG2K3FD4yQf2j6uq7qArAh6iyy9zA5ic9Up9q037j3+yH?= =?us-ascii?Q?xs+nm4Ya82sIlE/gRFq5vFOs9sEt3Lq0P8TvK9WQD2sr4w0WNchJaaWnGKPo?= =?us-ascii?Q?iEJsZwxOgecdR5zBB7lkBrXNaF1nxsl9jYW7WgcwyRq+7SfEv9XcLlVPYfWu?= =?us-ascii?Q?dRfSJY2CQlccABwrE85+QJywQv/mSZrN1WAbpK1hiVuspIp7X5nFmTV0R2RB?= =?us-ascii?Q?w5Sm2Fx+jWU6y8yAcs7BzY+9GXhCH+XwsSIJsEElo4VT0UyWi5xtjyFOzRaa?= =?us-ascii?Q?DTvqrN95uYU7lIGINFP8Yuo1WmNki+kjvGBup4a49cqn8CWBiUu9/IIvtoJi?= =?us-ascii?Q?3BwlKlobBPvV9lhnJv88ZZ0gU6XqZd+XuY/gO2yPa9PFF8zpta8RcFR6U72Z?= =?us-ascii?Q?rcgMBDeXrE9U+TUOlF+lWOmPfotjUiwJ6p/L26NMV2W+zudDDctindF5fJIe?= =?us-ascii?Q?RqfINxmC/MyDio3sUCEr+g5LYs0rESp+CsYLQarhy7UkwPmWPradfgYmeRyy?= =?us-ascii?Q?x+NjZLlQYe9AODXNBa/SCJS3QTWjpvESHg57m43MJlqqIZKKs0JPyr5hq1H1?= =?us-ascii?Q?dNx3D5+gEiGR74xnH2IcaTWWLy3yFnS1l8JZEolO?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: d37ddf6e-8b79-4666-433e-08dce401081c X-MS-Exchange-CrossTenant-AuthSource: CH2PR02MB6760.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2024 23:13:46.3103 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gcPDAyR62Pxf56xOj/EoH8mIfsSUwbMuIIKSX6mhkyTgwGASiZWL7j8P109+MsXGQpCva73GDRI4pSmPq9eefQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB6731 X-Authority-Analysis: v=2.4 cv=RKHhHJi+ c=1 sm=1 tr=0 ts=66ff252c cx=c_pps a=SA2dW19TPv9rE6CiBNbh3A==:117 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=DAUX931o1VcA:10 a=0034W8JfsZAA:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=rtD7whcn2g4kf6IR_CUA:9 a=14NRyaPF5x3gF6G45PvQ:22 X-Proofpoint-GUID: f14VJBmcItcGJ8Y7evQJa0wayNGtWqva X-Proofpoint-ORIG-GUID: f14VJBmcItcGJ8Y7evQJa0wayNGtWqva X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-03_19,2024-10-03_01,2024-09-30_01 X-Proofpoint-Spam-Reason: safe Content-Transfer-Encoding: quoted-printable Message-ID-Hash: P5QL57K6ONWCPF3KI6BR2ODMURYFUEGB X-Message-ID-Hash: P5QL57K6ONWCPF3KI6BR2ODMURYFUEGB X-MailFrom: john.levon@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: John Levon X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: John Levon via Devel Reply-To: John Levon X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZM-MESSAGEID: 1727997296207116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: John Levon --- src/test/test_driver.c | 114 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index b7e36e8451..789b1a2222 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10741,6 +10741,85 @@ testDomainDetachPrepNet(virDomainObj *vm, } =20 =20 +static int +testFindDisk(virDomainDef *def, const char *dst) +{ + size_t i; + + for (i =3D 0; i < def->ndisks; i++) { + if (STREQ(def->disks[i]->dst, dst)) + return i; + } + + return -1; +} + +static int +testDomainDetachPrepDisk(virDomainObj *vm, + virDomainDiskDef *match, + virDomainDiskDef **detach) +{ + virDomainDiskDef *disk; + int idx; + + if ((idx =3D testFindDisk(vm->def, match->dst)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, + _("disk %1$s not found"), match->dst); + return -1; + } + *detach =3D disk =3D vm->def->disks[idx]; + + switch ((virDomainDiskDevice) disk->device) { + case VIR_DOMAIN_DISK_DEVICE_DISK: + case VIR_DOMAIN_DISK_DEVICE_LUN: + + switch (disk->bus) { + case VIR_DOMAIN_DISK_BUS_VIRTIO: + case VIR_DOMAIN_DISK_BUS_USB: + case VIR_DOMAIN_DISK_BUS_SCSI: + break; + + case VIR_DOMAIN_DISK_BUS_IDE: + case VIR_DOMAIN_DISK_BUS_FDC: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_SATA: + case VIR_DOMAIN_DISK_BUS_SD: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("This type of disk cannot be hot unplugged")); + return -1; + + case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_LAST: + default: + virReportEnumRangeError(virDomainDiskBus, disk->bus); + return -1; + } + break; + + case VIR_DOMAIN_DISK_DEVICE_CDROM: + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_USB || + disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { + break; + } + G_GNUC_FALLTHROUGH; + + case VIR_DOMAIN_DISK_DEVICE_FLOPPY: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("disk device type '%1$s' cannot be detached"), + virDomainDiskDeviceTypeToString(disk->device)); + return -1; + + case VIR_DOMAIN_DISK_DEVICE_LAST: + default: + virReportEnumRangeError(virDomainDiskDevice, disk->device); + return -1; + } + + return 0; +} + + static int testDomainRemoveHostDevice(testDriver *driver G_GNUC_UNUSED, virDomainObj *vm, @@ -10810,6 +10889,28 @@ testDomainRemoveNetDevice(testDriver *driver G_GNU= C_UNUSED, return 0; } =20 + +static int +testDomainRemoveDiskDevice(testDriver *driver G_GNUC_UNUSED, + virDomainObj *vm, + virDomainDiskDef *disk) +{ + size_t i; + + VIR_DEBUG("Removing disk %s from domain %p %s", + disk->info.alias, vm, vm->def->name); + + for (i =3D 0; i < vm->def->ndisks; i++) { + if (vm->def->disks[i] =3D=3D disk) { + virDomainDiskRemove(vm->def, i); + break; + } + } + + virDomainDiskDefFree(disk); + return 0; +} + static int testDomainRemoveDevice(testDriver *driver, virDomainObj *vm, @@ -10835,8 +10936,11 @@ testDomainRemoveDevice(testDriver *driver, if (testDomainRemoveHostDevice(driver, vm, dev->data.hostdev) < 0) return -1; break; - case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_DISK: + if (testDomainRemoveDiskDevice(driver, vm, dev->data.disk) < 0) + return -1; + break; + case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: @@ -10900,8 +11004,14 @@ testDomainDetachDeviceLive(testDriver *driver, } break; =20 - case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_DISK: + if (testDomainDetachPrepDisk(vm, match->data.disk, + &detach.data.disk) < 0) { + return -1; + } + break; + + case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: --=20 2.34.1