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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Peter Krempa 2021-05-07 14:54:31 +02:00
parent c63a3ba258
commit 9514f0fba0

View 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);