]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: blockjob: Call qemuDomainSupportsBlockJobs only on online VMs
authorPeter Krempa <pkrempa@redhat.com>
Thu, 30 Apr 2015 14:01:18 +0000 (16:01 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 30 Apr 2015 14:46:42 +0000 (16:46 +0200)
Since the qemu capabilities are not initialized for offline VMs the
caller might get suboptimal error message:

$ virsh blockjob VM PATH --bandwidth 1
error: unsupported configuration: block jobs not supported with this QEMU binary

Move the checks after we make sure that the VM is alive.

src/qemu/qemu_driver.c

index 3695b26fac3642ee88aef557e003ecae8d03499f..d6e7570ea4c3f98bdc4e08639862af4b8929d10e 100644 (file)
@@ -16555,34 +16555,34 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
         goto cleanup;
     }
 
-    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
+    if (!virDomainObjIsActive(vm)) {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("domain is not running"));
+        goto endjob;
+    }
+
+    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+        goto endjob;
+
     if (!modern) {
         if (base) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("partial block pull not supported with this "
                              "QEMU binary"));
-            goto cleanup;
+            goto endjob;
         }
 
         if (bandwidth) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("setting bandwidth at start of block pull not "
                              "supported with this QEMU binary"));
-            goto cleanup;
+            goto endjob;
         }
     }
 
-    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
-        goto cleanup;
-
-    if (!virDomainObjIsActive(vm)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("domain is not running"));
-        goto endjob;
-    }
-
     if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
         goto endjob;
     disk = vm->def->disks[idx];
@@ -16682,9 +16682,6 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
     if (virDomainBlockJobAbortEnsureACL(dom->conn, vm->def) < 0)
         goto cleanup;
 
-    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
-        goto cleanup;
-
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
@@ -16694,6 +16691,9 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
         goto endjob;
     }
 
+    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+        goto endjob;
+
     if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
         goto endjob;
     disk = vm->def->disks[idx];
@@ -16896,9 +16896,6 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
     if (virDomainBlockJobSetSpeedEnsureACL(dom->conn, vm->def) < 0)
         goto cleanup;
 
-    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
-        goto cleanup;
-
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
@@ -16908,6 +16905,9 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
         goto endjob;
     }
 
+    if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+        goto endjob;
+
     if (!(device = qemuDiskPathToAlias(vm, path, NULL)))
         goto endjob;