From b05a48c0d2ec058c82e7ab9bba2b187863943264 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 24 Apr 2018 14:07:22 +0200 Subject: [PATCH] qemu: domain: Move out clearing of backing chain in qemuDomainDetermineDiskChain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some cases backing chain needs to be cleared prior to re-detection. Move this step out of qemuDomainDetermineDiskChain as only certain places need it and the function itself is able to skip to the end of the chain to perform detection. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_blockjob.c | 4 ++-- src/qemu/qemu_domain.c | 4 ---- src/qemu/qemu_domain.h | 1 - src/qemu/qemu_driver.c | 4 ++-- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_process.c | 7 +++++-- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index b08e047490..0f52996ade 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -175,8 +175,8 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; disk->src->id = 0; - ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, - true, true)); + virStorageSourceBackingStoreClear(disk->src); + ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); diskPriv->blockjob = false; break; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 9188302e53..a0ecb4c8ff 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8502,7 +8502,6 @@ int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - bool force_probe, bool report_broken) { virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); @@ -8518,9 +8517,6 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, goto cleanup; } - if (force_probe) - virStorageSourceBackingStoreClear(src); - /* There is no need to check the backing chain for disks without backing * support */ if (virStorageSourceIsLocalStorage(src) && diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index e748d78adb..1692fa9838 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -718,7 +718,6 @@ int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - bool force_probe, bool report_broken); bool qemuDomainDiskSourceDiffers(virDomainDiskDefPtr disk, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 99bb4913bd..a7279ecc64 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7850,7 +7850,7 @@ qemuDomainChangeDiskLive(virDomainObjPtr vm, if (virDomainDiskTranslateSourcePool(disk) < 0) goto cleanup; - if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) + if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0) goto cleanup; if (!(orig_disk = virDomainDiskFindByBusAndDst(vm->def, @@ -16873,7 +16873,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, oldsrc = disk->src; disk->src = disk->mirror; - if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) + if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0) goto cleanup; if (disk->mirror->format && diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index d3b7b45019..fe703ab4bd 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -924,7 +924,7 @@ qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver, if (qemuSetUnprivSGIO(dev) < 0) goto cleanup; - if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) + if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0) goto cleanup; switch ((virDomainDiskDevice) disk->device) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a4b1f97df5..bba157bed4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6019,7 +6019,9 @@ qemuProcessPrepareHostStorage(virQEMUDriverPtr driver, if (virStorageSourceIsEmpty(disk->src)) continue; - if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0) + virStorageSourceBackingStoreClear(disk->src); + + if (qemuDomainDetermineDiskChain(driver, vm, disk, true) >= 0) continue; if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0) @@ -7695,7 +7697,8 @@ qemuProcessReconnect(void *opaque) /* This should be the only place that calls * qemuDomainDetermineDiskChain with @report_broken == false * to guarantee best-effort domain reconnect */ - if (qemuDomainDetermineDiskChain(driver, obj, disk, true, false) < 0) + virStorageSourceBackingStoreClear(disk->src); + if (qemuDomainDetermineDiskChain(driver, obj, disk, false) < 0) goto error; } else { VIR_DEBUG("skipping backing chain detection for '%s'", disk->dst);