]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: process: Move 'volume' translation to domain prepare stage
authorPeter Krempa <pkrempa@redhat.com>
Tue, 3 Oct 2017 10:38:23 +0000 (12:38 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 5 Oct 2017 07:45:10 +0000 (09:45 +0200)
Introduce a new function to prepare domain disks which will also do the
volume source to actual disk source translation.

The 'pretend' condition is not transferred to the new location since it
does not help in writing tests and also no tests abuse it.

src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_process.c

index 8aa082618315d50f785cb868d77aca8de813d3c6..bf2ce29bfc4eba2448f333d78a9a0c7315e2039b 100644 (file)
@@ -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;
 
index f3ffa62932ac618757dc43a50ded3cfac139428f..23285967fabeb28e491226f08a74352c171f9d90 100644 (file)
@@ -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);
 
index 3f70141e2f59dd24b5b278327ab34b58610b543d..f160933e245ac2d9379298f03b14dfb7b027cc93 100644 (file)
@@ -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");