From: Peter Krempa Date: Fri, 7 May 2021 12:54:31 +0000 (+0200) Subject: qemuDomainRemoveDiskDevice: Move 'copy-on-read' handling to qemuBlockStorageSourceCha... X-Git-Tag: v7.4.0-rc1~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9514f0fba01d61d3642a6bce5bd59c7585673feb;p=thirdparty%2Flibvirt.git qemuDomainRemoveDiskDevice: Move 'copy-on-read' handling to qemuBlockStorageSourceChainData Unify the handling of the copy-on-read filter by changing the handling to use qemuBlockStorageSourceChainData. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko Reviewed-by: Pavel Hrdina --- diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 57906df70f..038443cdc8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -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);