diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 69a7053c058e16af7ff951df53900d4d7e95c2b8..e0b855054d13380606e50ccf903f4cbaa3b1abdb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12949,6 +12949,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver, bool persist = false; bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + virErrorPtr orig_err = NULL; if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -13040,6 +13041,17 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver, } cleanup: + /* recheck backing chains of all disks involved in the snapshot */ + orig_err = virSaveLastError(); + for (i = 0; i < snap->def->ndisks; i++) { + if (snap->def->disks[i].snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) + continue; + qemuDomainDetermineDiskChain(driver, vm, vm->def->disks[i], true); + } + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } if (ret == 0 || !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION)) { if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0 ||