]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuDomainRemoveDiskDevice: Move 'copy-on-read' handling to qemuBlockStorageSourceCha...
authorPeter Krempa <pkrempa@redhat.com>
Fri, 7 May 2021 12:54:31 +0000 (14:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 24 May 2021 18:38:08 +0000 (20:38 +0200)
Unify the handling of the copy-on-read filter by changing the handling
to use qemuBlockStorageSourceChainData.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_hotplug.c

index 57906df70f509e712a467a590bbbb300beb23c5b..038443cdc851eb1b8f9555cefb58bb7438bd9c7e 100644 (file)
@@ -4288,7 +4288,6 @@ qemuDomainRemoveDiskDevice(virQEMUDriver *driver,
     virDomainDeviceDef dev;
     size_t i;
     qemuDomainObjPrivate *priv = vm->privateData;
-    g_autofree char *corAlias = NULL;
     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
     int ret = -1;
 
@@ -4301,10 +4300,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriver *driver,
 
         if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareChardev(chardevAlias)))
             goto cleanup;
-    } else if (blockdev &&
-               !qemuDiskBusIsSD(disk->bus)) {
-        corAlias = g_strdup(diskPriv->nodeCopyOnRead);
-
+    } else if (blockdev && !qemuDiskBusIsSD(disk->bus)) {
         if (diskPriv->blockjob) {
             /* the block job keeps reference to the disk chain */
             diskPriv->blockjob->disk = NULL;
@@ -4314,6 +4310,13 @@ qemuDomainRemoveDiskDevice(virQEMUDriver *driver,
             if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareBlockdev(disk->src)))
                 goto cleanup;
         }
+
+        if (diskPriv->nodeCopyOnRead) {
+            if (!diskBackend)
+                diskBackend = g_new0(qemuBlockStorageSourceChainData, 1);
+            diskBackend->copyOnReadNodename = g_strdup(diskPriv->nodeCopyOnRead);
+            diskBackend->copyOnReadAttached = true;
+        }
     } else {
         char *driveAlias;
 
@@ -4333,9 +4336,6 @@ qemuDomainRemoveDiskDevice(virQEMUDriver *driver,
 
     qemuDomainObjEnterMonitor(driver, vm);
 
-    if (corAlias)
-        ignore_value(qemuMonitorBlockdevDel(priv->mon, corAlias));
-
     if (diskBackend)
         qemuBlockStorageSourceChainDetach(priv->mon, diskBackend);