]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: hotplug: Use storage chain helpers in qemuDomainRemoveDiskDevice
authorPeter Krempa <pkrempa@redhat.com>
Fri, 5 Apr 2019 11:47:44 +0000 (13:47 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 26 Jun 2019 06:59:37 +0000 (08:59 +0200)
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@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_hotplug.c

index 11acec8329fab3fdd7e89f56bf975185c4c323c9..3b3278db5cd78231d52c8f13bab59df969804f34 100644 (file)
@@ -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;
 }