]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: process: Call the domain config validator when starting a new VM
authorPeter Krempa <pkrempa@redhat.com>
Fri, 27 May 2016 11:54:26 +0000 (13:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 7 Jun 2016 11:02:20 +0000 (13:02 +0200)
To avoid duplicating all the checks when starting a fresh VM from a
possibly unchecked config, call the domain def validator.

src/qemu/qemu_process.c

index 3e339608174b4317d6525f93cddbc15e28bd8024..c1f71dd2127fab38ead64f36ce126a0e57a5bcb9 100644 (file)
@@ -4283,8 +4283,10 @@ qemuProcessStartWarnShmem(virDomainObjPtr vm)
 }
 
 static int
-qemuProcessStartValidateXML(virDomainObjPtr vm,
+qemuProcessStartValidateXML(virQEMUDriverPtr driver,
+                            virDomainObjPtr vm,
                             virQEMUCapsPtr qemuCaps,
+                            virCapsPtr caps,
                             unsigned int flags)
 {
     /* The bits we validate here are XML configs that we previously
@@ -4301,9 +4303,14 @@ qemuProcessStartValidateXML(virDomainObjPtr vm,
     /* checks below should not be executed when starting a qemu process for a
      * VM that was running before (migration, snapshots, save). It's more
      * important to start such VM than keep the configuration clean */
-    if ((flags & VIR_QEMU_PROCESS_START_NEW) &&
-        virDomainDefCheckDuplicateDiskInfo(vm->def) < 0)
-        return -1;
+    if ((flags & VIR_QEMU_PROCESS_START_NEW)) {
+        if (virDomainDefValidate(vm->def, caps, 0, driver->xmlopt) < 0)
+            return -1;
+
+        if (virDomainDefCheckDuplicateDiskInfo(vm->def) < 0)
+            return -1;
+    }
+
 
     if (vm->def->mem.min_guarantee) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -4331,6 +4338,7 @@ static int
 qemuProcessStartValidate(virQEMUDriverPtr driver,
                          virDomainObjPtr vm,
                          virQEMUCapsPtr qemuCaps,
+                         virCapsPtr caps,
                          unsigned int flags)
 {
     size_t i;
@@ -4358,7 +4366,7 @@ qemuProcessStartValidate(virQEMUDriverPtr driver,
 
     }
 
-    if (qemuProcessStartValidateXML(vm, qemuCaps, flags) < 0)
+    if (qemuProcessStartValidateXML(driver, vm, qemuCaps, caps, flags) < 0)
         return -1;
 
     VIR_DEBUG("Checking for any possible (non-fatal) issues");
@@ -4437,7 +4445,7 @@ qemuProcessInit(virQEMUDriverPtr driver,
                                                       vm->def->os.machine)))
         goto cleanup;
 
-    if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, flags) < 0)
+    if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, caps, flags) < 0)
         goto cleanup;
 
     /* Do this upfront, so any part of the startup process can add