diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8aa082618315d50f785cb868d77aca8de813d3c6..bf2ce29bfc4eba2448f333d78a9a0c7315e2039b 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5682,8 +5682,7 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver, int -qemuDomainCheckDiskPresence(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { @@ -5697,13 +5696,6 @@ qemuDomainCheckDiskPresence(virConnectPtr conn, virDomainDiskDefPtr disk = vm->def->disks[idx]; virStorageFileFormat format = virDomainDiskGetFormat(disk); - if (virStorageTranslateDiskSourcePool(conn, vm->def->disks[idx]) < 0) { - if (pretend || - qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0) - return -1; - continue; - } - if (pretend) continue; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index f3ffa62932ac618757dc43a50ded3cfac139428f..23285967fabeb28e491226f08a74352c171f9d90 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -644,8 +644,7 @@ int qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver, size_t diskIndex, bool cold_boot); -int qemuDomainCheckDiskPresence(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3f70141e2f59dd24b5b278327ab34b58610b543d..f160933e245ac2d9379298f03b14dfb7b027cc93 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5284,6 +5284,32 @@ qemuProcessPrepareDomainNUMAPlacement(virDomainObjPtr vm, } +static int +qemuProcessPrepareDomainStorage(virConnectPtr conn, + virQEMUDriverPtr driver, + virDomainObjPtr vm, + unsigned int flags) +{ + size_t i; + bool cold_boot = flags & VIR_QEMU_PROCESS_START_COLD; + + for (i = vm->def->ndisks; i > 0; i--) { + size_t idx = i - 1; + virDomainDiskDefPtr disk = vm->def->disks[idx]; + + if (virStorageTranslateDiskSourcePool(conn, disk) < 0) { + if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0) + return -1; + + /* disk source was dropped */ + continue; + } + } + + return 0; +} + + /** * qemuProcessPrepareDomain: * @conn: connection object (for looking up storage volumes) @@ -5360,10 +5386,12 @@ qemuProcessPrepareDomain(virConnectPtr conn, if (qemuProcessSetupGraphics(driver, vm, flags) < 0) goto cleanup; - /* Drop possibly missing disks from the definition. This function - * also resolves source pool/volume into a path and it needs to - * happen after the def is copied and aliases are set. */ - if (qemuDomainCheckDiskPresence(conn, driver, vm, flags) < 0) + VIR_DEBUG("Setting up storage"); + if (qemuProcessPrepareDomainStorage(conn, driver, vm, flags) < 0) + goto cleanup; + + /* Drop possibly missing disks from the definition. */ + if (qemuDomainCheckDiskPresence(driver, vm, flags) < 0) goto cleanup; VIR_DEBUG("Create domain masterKey");