From nobody Mon Sep 8 17:07:22 2025 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=pass; 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=pass (i=1 dmarc=pass fromdomain=cyberus-technology.de); dmarc=pass(p=none dis=none) header.from=cyberus-technology.de ARC-Seal: i=2; a=rsa-sha256; t=1756814944; cv=pass; d=zohomail.com; s=zohoarc; b=ghEr5u+W335VS/UACwuOBib/3UcDGoYYp1XZVmUT6f8zShAxmMlL7yT8lsww9wPxRT6uG8S9wSybYzYBHFS5RwUazSwTMiaepwtvwKotjeXMoUHrPMxtbOOKX0yytb+Ix8/oRdX3jvR+LhHRrziJMJdu2a/7JYdIifXosskmq40= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756814944; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=6HB8txqsOKX4ixVQ+Uib69QYKH1x5yec+bGSgsZ4fv0=; b=bowz2WvQKkwmM8v8H4bhGv8btO0OkM/e/GC2rpdUdgd1O8QUkMg2kfUWL4SiGwjETpI58YmY7BEvR4JL+44llZRwaHpzH6RmgCHE27nOvit+QAx1eBA00tqpPXVTpyXoWvf4hwBgAMl7yF2zEhG7RGL3zMsdybVD1Vsza+Zjcvk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=cyberus-technology.de); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1756814944436899.4807409235336; Tue, 2 Sep 2025 05:09:04 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id DA02944218; Tue, 2 Sep 2025 08:09:03 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 9999244547; Tue, 2 Sep 2025 07:56:53 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 78DCC4411C; Tue, 2 Sep 2025 07:55:55 -0400 (EDT) Received: from FR4P281CU032.outbound.protection.outlook.com (mail-germanywestcentralazon11022111.outbound.protection.outlook.com [40.107.149.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A06874411E for ; Tue, 2 Sep 2025 07:55:47 -0400 (EDT) Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) by FR5P281MB5644.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1ae::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Tue, 2 Sep 2025 11:55:41 +0000 Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401]) by BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401%3]) with mapi id 15.20.9073.026; Tue, 2 Sep 2025 11:55:41 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=ARC_SIGNED,ARC_VALID, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=D4keBdEIyUwlweU0NiOrDmoRRrvbT5q8Qd3/46iJzuKV10pw52ifOvB/yYFN5/tJfoEcHwoPjIExnT3hSswvGVI8TfVnIB5lXLYraDCgkP+akjYZBEkU53x0KU8yqDMjr5PeLXD0Oejvm2NNWeZ/JPSrAFblPdUWQxHtrNn6ZhxdQb7wu51NqbFaBZKHHmXJStr1sJaygtyHQJSLqBcz5GWFL3uZCnsbotVO9BtHeOprQgAvzA1aeGNEo04efFa15le6/vwX++rIvopp5QqffPGpUW/tpCkqA77e6FjucpyOdwVXZ6I+Q+uvTFm1aGslKcsMqzhGX8ors0WkXqauyg== 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=6HB8txqsOKX4ixVQ+Uib69QYKH1x5yec+bGSgsZ4fv0=; b=dep54kAFHeJxzooTOD6rSpO9iJ59wknGasS86nwu3nHq7GoTbfrCV67ynh4UPrudv194ZqFGSUhr+/+niCZxo8pPH6N49xXnEWx3ZNnLWtkJI8XgIpc10ogNEXwqWedu5g/fkljaUpSuy/j8Wu7szknFS5hAlyK3vIY8+gwL7e2W4DdjbwvU7DfRddpgHH+li0lljRhPctkQmpG4H2cYUSIK83bgRSsx96m3RQT3dRg9Bf8/NHz9ZL8JJ6ipTWuwMINrQr5mNuzNMYft6RPN/ytyUVOHt9zQ2fzz5KYaqiuVV79cJEioZ4/ldIgd66QQqCMaJD847NIxb3IH58kwEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cyberus-technology.de; dmarc=pass action=none header.from=cyberus-technology.de; dkim=pass header.d=cyberus-technology.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cyberus-technology.de; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6HB8txqsOKX4ixVQ+Uib69QYKH1x5yec+bGSgsZ4fv0=; b=AYMC0AjRZyxovFuo7maMNeKYcEXaOmjySoVtdUEIf84EuWNISErLiy1Me8k7JDFzpG8KI5qXBsNNfL1eKb5Pxj3fjoDwNvUUbY8muPPTJXTGdUXJtE7M+v9MUAmbbiagmefT4aI7VkCjBalHtmMBjtNXQ0sXwc5LOo+52UThchL+M/6F9iIZhddsxPzmDmMpYzX9FFvzdQqYTIoKDNg+H7ZBMTXe9U2YAKN0c4r/Q/3X7WbRZY2k3v7zPy6nlcVz7cdBNn/6mfe394t/UQUYUDlDI5oUPbkCrW9opD2ipARoVdfBKIKHfc676MdIQINteVs7ongN5OWDr7c/wMrC+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cyberus-technology.de; From: Stefan Kober To: devel@lists.libvirt.org Subject: [PATCH v2 12/13] ch: implement disk device hot removal Date: Tue, 2 Sep 2025 13:55:27 +0200 Message-ID: <20250902115528.557133-13-stefan.kober@cyberus-technology.de> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250902115528.557133-1-stefan.kober@cyberus-technology.de> References: <20250902115528.557133-1-stefan.kober@cyberus-technology.de> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR5P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f0::11) To BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BEZP281MB1973:EE_|FR5P281MB5644:EE_ X-MS-Office365-Filtering-Correlation-Id: 93d24bd6-add2-4083-e67e-08ddea17a3ba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?TTmnMSUWox9p4VvF1Qg7knXhJmzqu61udDgnK0p0ZzD92aWX0G7BXfNNnSg7?= =?us-ascii?Q?6epKolgyZH5mVjSLi6WjlsPp/2gwUHZks61deEhAxgp249w+nxsES7nj0a/C?= =?us-ascii?Q?/H7uOMAZFIyCVRTQ11b3oLRPgAtSUyu8JE/NZONBBTBsDPjFXgpYBdpsZnBS?= =?us-ascii?Q?c/GxrbNC7Jd+8qB0bEGQjmBVPCFagA9QXPcxueiU4KjyJtZfzWvv5lX2zd/1?= =?us-ascii?Q?GBBq8kDsGBNpBbrRgqFsNq8fr/Mn70fqCPB9th+MnCtUGqsWp2ITNOgN0WpQ?= =?us-ascii?Q?/hC2XkpEcBHO3/9uF6MykKaykPCqLtoRZi8rVfN6mNPr0Pu96l/VBaM546Om?= =?us-ascii?Q?+P9+RjT2VmuFkZhcbz2/G2mRgw/37YIqSFSLXUlutjm6SqMKFxIG/1Z7Uji8?= =?us-ascii?Q?uXn6Gt3QyEcABoFR1PZsOZPs/Gyqoz1I4Cs8zRQFds75Hh0t1o12VtR8cniv?= =?us-ascii?Q?5H8TE/wlPl6GNMbcognjFDe8KD0IxuIt8lYo9Ku9BzWFqbVc+BDW+hfcK9Ws?= =?us-ascii?Q?FFJm71IqCa+h37SVgfFuoWec+MYfLgx31wgKyi0FSAgNC/Er51vUZ72Rlt4r?= =?us-ascii?Q?S4tuSR9QlHC5AGnBu7qyYQvkZDPQhJc75hKeZO8zr/4N/d8SwLKXu0rF9L0e?= =?us-ascii?Q?xsSfK/CL7oIoRLyQ7iO1dvV5279g7sJTGosDzmdnoXBLOvoEbSo5Gkto0dr/?= =?us-ascii?Q?ySAceuGawqGC8W+YteUR/WmkG5KOEn8NpW8wcF8JgjFX6/0QOqBvTeFjjoX5?= =?us-ascii?Q?Ja+sSWED/f86Rkh4uzMGEe6+uC0Uv3W1BoVw5RDraVvtFWdpeLvoTDWTBHlJ?= =?us-ascii?Q?2z0xFMY3fIPgM9udesafx3+fFJu/nZYniWJvWXzrM4gMryMBHDIttS/dc9qL?= =?us-ascii?Q?HMuDPwD9yT7IOc8WlOryFdBFX5VbjK6lyvD8Nut0WPZEoH90bRORBzuOTCnH?= =?us-ascii?Q?knJj4ctGDTF6RYBXikrGpKv/sb8/dgL15GdUoa6+U4Q5Kxtlhj7A/KduYkR/?= =?us-ascii?Q?X7zO+2GpZNa5w2DC6MIJL3tNnsn8K9Fv/vr6Z96ZycsoYtjCiL+MxYv0ulJz?= =?us-ascii?Q?XdQ47B4Yqygg3wrD8iVpupS8+1VMH/HCHvZVnD/BaP6/B/f2KYXQqDKqU+LU?= =?us-ascii?Q?QPemtjx/7fYIiiRrT61lxeuxQ38iuRn8h5aLbp5T/VqXDxwLHLr8T3jdLhdF?= =?us-ascii?Q?yWq/6u7EhoAGz2CZ97zwnThIIEh6wii7g8IzhNCM6qb1AucOhyD6Y+vFw8zF?= =?us-ascii?Q?5Z2F5AMDyf8yxetxoJ6WBnOZZYy++Mw1sLqa3Q+4KojItilRCTyQ4cabj00y?= =?us-ascii?Q?BNqz5m08jz+kB13bt4lWSRfEWUD2NthxgNYz8deiNzoTj+B504wg8dc3u5UC?= =?us-ascii?Q?jGW5zii51j7eqK811P+ahHwxE5MdlthpYuo6Ma+nr6s8ggMzhIGH0oXedPc4?= =?us-ascii?Q?a/W7l/WXCRQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IZVSwLxMlSeaLs9xgHXbAN9q26sxks1ZwszMUuw+wQ8grQjm3uANE9KbrQOc?= =?us-ascii?Q?JaNXWLFOXlaq33b7KCkeKk2h6Gv5m/Cp2nQR6+xt1RVaEe2aoxJMKkPQwYlh?= =?us-ascii?Q?i33GZ+sXAY2C43y9WjqBAGcz7RgUnu0YgFohlTvdXTIVraRdgjsu/eVGM/gE?= =?us-ascii?Q?RrmA69hIB2Alz3klWYXuzxQto7MQpcwzwq111proaTaF70OhQO/S9/mqjIYW?= =?us-ascii?Q?+IV0hJc4Ej0C+eo1Fb0BqBGYoVIfv+XRcWQyO5bYW9R/gUtWK6WlG2B8Idam?= =?us-ascii?Q?4taAnX2c4VsMnMxkf4qpWqpakmGvqaZMP5tNM4V/dXk4x3tflN+9yFDbJym1?= =?us-ascii?Q?UwdIr80zS+jMO6l8j2y2dvRPpYqmJOkgwliFGdb35JdeJU3SAgzm4FTbs4E8?= =?us-ascii?Q?o3gCz+J3Or/bdkpAwkgG0xPlvTjW0WQzGSJaJ7wdkG/KGJk6sCLM34/fAJoM?= =?us-ascii?Q?9eBmWZ6riHGDCZ2CvM34FzO6aGsCll24eemJSxfJd+Ez5+x+4gPPhBl4LFOH?= =?us-ascii?Q?y+YjDvWjgDdQxiwE4Bi3icRc5jMFX1MK7R7idHCxHLYVRUi0DMJP8EUH8C78?= =?us-ascii?Q?DLvI8QgwYJ1NoxcThekBYd4AS7SArVHjwdFde9M6ELD4l0jSquyk9Jcp71YA?= =?us-ascii?Q?UaeNYgHEglkp6G526BlOkiM+wWH6s5ueOTWp7gM56DblbgacBsCRO9V7PaUZ?= =?us-ascii?Q?aAZge/nbxjlYaJ4AbgsSw1cWcQSksltO6GcclEkXsgA0hx9oKi8NHleTnj5+?= =?us-ascii?Q?iUZCzXsUMXDFchMbzrA89p1A3qzKgoLPwYqnlPq2LzmsxJcKYpdwKd8iFcOE?= =?us-ascii?Q?s1SWmQX4pItITAzsy0bATtW+d+ZTT+hs4Q747zJlXKtdIiuw29wiQFMcHKDz?= =?us-ascii?Q?3TIf8+FjmKfk7AueyFT2YKtkiXNmsIUZy/Pslxa5+S3N+/3BzVK3j3XBZudN?= =?us-ascii?Q?8iBm8abUoJKxa55BtwZ403O0VS8bxdkDnrzf7UGj7bDqJFMkjIu4LbjwKW5S?= =?us-ascii?Q?HSOzwLl8DQSkgxr3/zSYfwX7jO8xbh3k1SyzBCMEDb4Pgtf1pfUjvEHpFObl?= =?us-ascii?Q?Ds1trZ7cZIaGyUBd/wpE2229SlplQw1vweF+FsVnCVtbJ77PvixDI1XtHp6f?= =?us-ascii?Q?ZIy6xkwDmZvfV3Q9XbC9ys+K7ksx1F0j4k0doIfWPxkAaX6syLj1m2T5sV7E?= =?us-ascii?Q?ripwIKEFtFZKYLfhsu7tVkMoTvCKMFivFSRgpDyAfH2hAunm0iJNsXkyeJq7?= =?us-ascii?Q?itfz3vCKGmiYhsPViV+FSsVYLxxd5lfnc8Zr/N/x2nCNgmwmuYKpZhqL2AQ/?= =?us-ascii?Q?Pqo2j9ZA5KStb/bmapxPxwEiQ+9bwlgpb+ZlsRlT4FZYbHI5sae7VpMjE21I?= =?us-ascii?Q?DzjbkdajalQeNs/MpO+qNps3CDyQIwWo5uUmadaTXRCQTXMA4U+2HWPXfDBV?= =?us-ascii?Q?QBA6JVNqnqee+xosAkRtUwYVZleYMPZK8XuXDAQzFts2xIU8yPgxLsWzksiA?= =?us-ascii?Q?soJeQTjhuGMDnoDfjBKCwjzjORB2DLyZ2pJIW8cLSYV4+MqzhfhcU3yPHUZ5?= =?us-ascii?Q?gE4VQWVPlJkixOuOIRp3+WAXIegA2RbTjLFdHHBkmQjI4I6TbbEBpfUIarA+?= =?us-ascii?Q?ZBKqDeQLOelbRhFmiDZYOuP0e1AM5jfxJ1JokrhexElh?= X-OriginatorOrg: cyberus-technology.de X-MS-Exchange-CrossTenant-Network-Message-Id: 93d24bd6-add2-4083-e67e-08ddea17a3ba X-MS-Exchange-CrossTenant-AuthSource: BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2025 11:55:41.0137 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f4e0f4e0-9d68-4bd6-a95b-0cba36dbac2e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aalBS54RxVFbPRHMQddx7R5QI8sD/xzJEDuvcDz6szPwVsiErrtNiH1ooOcwxOhqxMFrqSTd6x3V1nq/Jxgufk1uHkAfMJEweoxZg72Z3Cv+JhL6grEQClp207zsnNt8 X-MS-Exchange-Transport-CrossTenantHeadersStamped: FR5P281MB5644 Message-ID-Hash: 2JMKC7I5G4YAZFVXUJWMWZAFBDLUX7UU X-Message-ID-Hash: 2JMKC7I5G4YAZFVXUJWMWZAFBDLUX7UU X-MailFrom: stefan.kober@cyberus-technology.de X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Stefan Kober X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @cyberus-technology.de) X-ZM-MESSAGEID: 1756814953705124101 Content-Type: text/plain; charset="utf-8" On-behalf-of: SAP stefan.kober@sap.com Signed-off-by: Stefan Kober --- src/ch/ch_driver.c | 8 +- src/ch/ch_hotplug.c | 175 ++++++++++++++++++++++++++++++++++++++++++++ src/ch/ch_hotplug.h | 6 ++ src/ch/ch_monitor.c | 2 +- 4 files changed, 189 insertions(+), 2 deletions(-) diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c index 764efb87e9..760fccba82 100644 --- a/src/ch/ch_driver.c +++ b/src/ch/ch_driver.c @@ -2389,9 +2389,10 @@ chDomainAttachDevice(virDomainPtr dom, =20 static int chDomainDetachDeviceFlags(virDomainPtr dom, - const char *xml G_GNUC_UNUSED, + const char *xml, unsigned int flags) { + virCHDriver *driver =3D dom->conn->privateData; virDomainObj *vm =3D NULL; int ret =3D -1; =20 @@ -2407,6 +2408,11 @@ chDomainDetachDeviceFlags(virDomainPtr dom, if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) goto endjob; =20 + if (chDomainDetachDeviceLiveAndUpdateConfig(driver, vm, xml, flags) < = 0) + goto endjob; + + ret =3D 0; + endjob: virDomainObjEndJob(vm); =20 diff --git a/src/ch/ch_hotplug.c b/src/ch/ch_hotplug.c index 524355b93c..95fe1f0f6f 100644 --- a/src/ch/ch_hotplug.c +++ b/src/ch/ch_hotplug.c @@ -156,3 +156,178 @@ chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj = *vm, =20 return 0; } + +static int +chFindDiskId(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; +} + + +/** + * chDomainFindDisk + * + * Helper function to find a disk device definition of a domain. + * + * Searches through the disk devices of a domain by comparing to 'match' a= nd + * returns any match via the 'detach' out parameter. + */ +static int +chDomainFindDisk(virDomainObj *vm, + virDomainDiskDef *match, + virDomainDiskDef **detach) +{ + virDomainDiskDef *disk; + int idx; + + if ((idx =3D chFindDiskId(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]; + + return 0; +} + +static int +chDomainDetachDeviceLive(virDomainObj *vm, + virDomainDeviceDef *match) +{ + virDomainDeviceDef detach =3D { .type =3D match->type }; + virDomainDeviceInfo *info =3D NULL; + virCHDomainObjPrivate *priv =3D vm->privateData; + int idx =3D 0; + + switch (match->type) { + case VIR_DOMAIN_DEVICE_DISK: + if (chDomainFindDisk(vm, match->data.disk, + &detach.data.disk) < 0) { + return -1; + } + break; + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_FS: + case VIR_DOMAIN_DEVICE_NET: + case VIR_DOMAIN_DEVICE_INPUT: + case VIR_DOMAIN_DEVICE_SOUND: + case VIR_DOMAIN_DEVICE_VIDEO: + case VIR_DOMAIN_DEVICE_HOSTDEV: + case VIR_DOMAIN_DEVICE_WATCHDOG: + case VIR_DOMAIN_DEVICE_CONTROLLER: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_REDIRDEV: + case VIR_DOMAIN_DEVICE_SMARTCARD: + case VIR_DOMAIN_DEVICE_CHR: + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_RNG: + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_MEMORY: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_VSOCK: + case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_CRYPTO: + case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_LAST: + case VIR_DOMAIN_DEVICE_NONE: + default: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("live detach of device '%1$s' is not supported"), + virDomainDeviceTypeToString(match->type)); + return -1; + } + + /* "detach" now points to the actual device we want to detach */ + + if (!(info =3D virDomainDeviceGetInfo(&detach))) { + /* + * This should never happen, since all of the device types in + * the switch cases that end with a "break" instead of a + * return have a virDeviceInfo in them. + */ + virReportError(VIR_ERR_INTERNAL_ERROR, + _("device of type '%1$s' has no device info"), + virDomainDeviceTypeToString(detach.type)); + return -1; + } + + /* Make generic validation checks common to all device types */ + + if (!info->alias) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Cannot detach %1$s device with no alias"), + virDomainDeviceTypeToString(detach.type)); + return -1; + } + + if (virCHMonitorRemoveDevice(priv->monitor, info->alias) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Invalid response from CH. Disk removal failed.")= ); + return -1; + } + + if (match->type =3D=3D VIR_DOMAIN_DEVICE_DISK) { + idx =3D chFindDiskId(vm->def, match->data.disk->dst); + if (idx >=3D 0) { + virDomainDiskRemove(vm->def, idx); + } + } + + return 0; +} + +int +chDomainDetachDeviceLiveAndUpdateConfig(virCHDriver *driver, + virDomainObj *vm, + const char *xml, + unsigned int flags) +{ + g_autoptr(virCHDriverConfig) cfg =3D NULL; + g_autoptr(virDomainDeviceDef) dev_config =3D NULL; + g_autoptr(virDomainDeviceDef) dev_live =3D NULL; + unsigned int parse_flags =3D VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE; + g_autoptr(virDomainDef) vmdef =3D NULL; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + cfg =3D virCHDriverGetConfig(driver); + + if ((flags & VIR_DOMAIN_AFFECT_CONFIG) && + !(flags & VIR_DOMAIN_AFFECT_LIVE)) + parse_flags |=3D VIR_DOMAIN_DEF_PARSE_INACTIVE; + + if (flags & VIR_DOMAIN_AFFECT_CONFIG) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("Persistent domain state changes are not supporte= d")); + return -1; + } + + if (flags & VIR_DOMAIN_AFFECT_LIVE) { + if (!(dev_live =3D virDomainDeviceDefParse(xml, vm->def, driver->x= mlopt, + NULL, parse_flags))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not parse domain definition")); + return -1; + } + + if (chDomainDetachDeviceLive(vm, dev_live) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could detach device")); + return -1; + } + } + + return 0; +} diff --git a/src/ch/ch_hotplug.h b/src/ch/ch_hotplug.h index 04915ba5de..4a9b9b3b3e 100644 --- a/src/ch/ch_hotplug.h +++ b/src/ch/ch_hotplug.h @@ -25,3 +25,9 @@ chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm, virCHDriver *driver, const char *xml, unsigned int flags); + +int +chDomainDetachDeviceLiveAndUpdateConfig(virCHDriver *driver, + virDomainObj *vm, + const char *xml, + unsigned int flags); diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index ee629f61fb..2da71e962b 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -604,7 +604,7 @@ int virCHMonitorRemoveDevice(virCHMonitor *mon, if (virCHMonitorBuildKeyValueStringJson(&payload, "id", device_id) != =3D 0) return -1; =20 - VIR_DEBUG("Remove device %s", device_id); + VIR_DEBUG("Remove device with id: %s", device_id); =20 return virCHMonitorPut(mon, URL_VM_REMOVE_DEVICE, payload, NULL, NULL); } --=20 2.50.1