Checking of disk presence accesses storage on the host so it should be
done from the host setup function. Move the code to new function called
qemuProcessPrepareHostStorage and remove qemuDomainCheckDiskPresence.
---
src/qemu/qemu_domain.c | 41 -----------------------------------------
src/qemu/qemu_process.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 42 insertions(+), 45 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index d3d5dbac6..a8c718f62 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5681,47 +5681,6 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
}
-int
-qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
- virDomainObjPtr vm,
- unsigned int flags)
-{
- size_t i;
- bool pretend = flags & VIR_QEMU_PROCESS_START_PRETEND;
- bool cold_boot = flags & VIR_QEMU_PROCESS_START_COLD;
-
- VIR_DEBUG("Checking for disk presence");
- for (i = vm->def->ndisks; i > 0; i--) {
- size_t idx = i - 1;
- virDomainDiskDefPtr disk = vm->def->disks[idx];
- virStorageFileFormat format = virDomainDiskGetFormat(disk);
-
- if (pretend)
- continue;
-
- if (virStorageSourceIsEmpty(disk->src))
- continue;
-
- /* There is no need to check the backing chain for disks
- * without backing support, the fact that the file exists is
- * more than enough */
- if (virStorageSourceIsLocalStorage(disk->src) &&
- format > VIR_STORAGE_FILE_NONE &&
- format < VIR_STORAGE_FILE_BACKING &&
- virFileExists(virDomainDiskGetSource(disk)))
- continue;
-
- if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0)
- continue;
-
- if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0)
- continue;
-
- return -1;
- }
-
- return 0;
-}
/*
* The vm must be locked when any of the following cleanup functions is
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 84792c2a7..6bebfe4f4 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5385,10 +5385,6 @@ qemuProcessPrepareDomain(virConnectPtr conn,
if (qemuProcessPrepareDomainStorage(conn, driver, vm, cfg, flags) < 0)
goto cleanup;
- /* Drop possibly missing disks from the definition. */
- if (qemuDomainCheckDiskPresence(driver, vm, flags) < 0)
- goto cleanup;
-
VIR_DEBUG("Create domain masterKey");
if (qemuDomainMasterKeyCreate(vm) < 0)
goto cleanup;
@@ -5435,6 +5431,44 @@ qemuProcessPrepareDomain(virConnectPtr conn,
}
+static int
+qemuProcessPrepareHostStorage(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];
+ virStorageFileFormat format = virDomainDiskGetFormat(disk);
+
+ if (virStorageSourceIsEmpty(disk->src))
+ continue;
+
+ /* There is no need to check the backing chain for disks
+ * without backing support, the fact that the file exists is
+ * more than enough */
+ if (virStorageSourceIsLocalStorage(disk->src) &&
+ format > VIR_STORAGE_FILE_NONE &&
+ format < VIR_STORAGE_FILE_BACKING &&
+ virFileExists(virDomainDiskGetSource(disk)))
+ continue;
+
+ if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0)
+ continue;
+
+ if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0)
+ continue;
+
+ return -1;
+ }
+
+ return 0;
+}
+
+
/**
* qemuProcessPrepareHost:
* @driver: qemu driver
@@ -5527,6 +5561,10 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver,
if (qemuDomainWriteMasterKeyFile(driver, vm) < 0)
goto cleanup;
+ VIR_DEBUG("Preparing disks (host)");
+ if (qemuProcessPrepareHostStorage(driver, vm, flags) < 0)
+ goto cleanup;
+
ret = 0;
cleanup:
virObjectUnref(cfg);
--
2.14.1