[libvirt] [PATCH 08/10] qemu: hotplug: Use storage chain helpers in qemuDomainRemoveDiskDevice

Peter Krempa pkrempa at redhat.com
Mon Jun 24 15:38:53 UTC 2019


Use the new helpers for removing the backing chain in case when
-blockdev is used. For -drive this function has a local implementation.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_hotplug.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 413b81c0c7..1b1d2ba5ce 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -4381,7 +4381,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
                            virDomainDiskDefPtr disk)
 {
     qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
-    qemuHotplugDiskSourceDataPtr diskbackend = NULL;
+    VIR_AUTOPTR(qemuBlockStorageSourceChainData) diskBackend = NULL;
     virDomainDeviceDef dev;
     size_t i;
     qemuDomainObjPrivatePtr priv = vm->privateData;
@@ -4392,13 +4392,21 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     VIR_DEBUG("Removing disk %s from domain %p %s",
               disk->info.alias, vm, vm->def->name);

-    if (!(diskbackend = qemuHotplugDiskSourceRemovePrepare(disk, disk->src,
-                                                           priv->qemuCaps)))
-        return -1;

     if (blockdev) {
         if (VIR_STRDUP(corAlias, diskPriv->nodeCopyOnRead) < 0)
             goto cleanup;
+
+        if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareBlockdev(disk->src)))
+            goto cleanup;
+    } else {
+        char *driveAlias;
+
+        if (!(driveAlias = qemuAliasDiskDriveFromDisk(disk)))
+            goto cleanup;
+
+        if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareDrive(disk->src, driveAlias)))
+            goto cleanup;
     }

     for (i = 0; i < vm->def->ndisks; i++) {
@@ -4413,7 +4421,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     if (corAlias)
         ignore_value(qemuMonitorDelObject(priv->mon, corAlias));

-    qemuHotplugDiskSourceRemove(priv->mon, diskbackend);
+    qemuBlockStorageSourceChainDetach(priv->mon, diskBackend);

     if (qemuDomainObjExitMonitor(driver, vm) < 0)
         goto cleanup;
@@ -4435,7 +4443,6 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     ret = 0;

  cleanup:
-    qemuHotplugDiskSourceDataFree(diskbackend);
     virDomainDiskDefFree(disk);
     return ret;
 }
-- 
2.21.0




More information about the libvir-list mailing list