]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort
authorPeter Krempa <pkrempa@redhat.com>
Tue, 12 Feb 2019 13:50:24 +0000 (14:50 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 25 Jul 2019 11:21:32 +0000 (13:21 +0200)
Set the correct job states after the operation is requested in qemu.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_blockjob.c
src/qemu/qemu_driver.c

index fe0114bf2668e488534560cde9eeb333b18d35d9..575292ada2eb6011dc4c317e81fb8d2e97104a2b 100644 (file)
@@ -256,7 +256,9 @@ bool
 qemuBlockJobIsRunning(qemuBlockJobDataPtr job)
 {
     return job->state == QEMU_BLOCKJOB_STATE_RUNNING ||
-           job->state == QEMU_BLOCKJOB_STATE_READY;
+           job->state == QEMU_BLOCKJOB_STATE_READY ||
+           job->state == QEMU_BLOCKJOB_STATE_ABORTING ||
+           job->state == QEMU_BLOCKJOB_STATE_PIVOTING;
 }
 
 
@@ -671,6 +673,10 @@ qemuBlockJobEventProcessConcluded(qemuBlockJobDataPtr job,
     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
         goto cleanup;
 
+    if (job->newstate == QEMU_BLOCKJOB_STATE_COMPLETED &&
+        job->state == QEMU_BLOCKJOB_STATE_ABORTING)
+        job->newstate = QEMU_BLOCKJOB_STATE_CANCELLED;
+
     if (refreshed)
         qemuDomainSaveStatus(vm);
 
index 87a05b871875638e7f210679e06637509434328c..3a2c5f53349a56f9cf151cbc007759cf477d26d2 100644 (file)
@@ -17029,6 +17029,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
 
     if (disk && disk->mirror)
         disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT;
+    job->state = QEMU_BLOCKJOB_STATE_PIVOTING;
 
  cleanup:
     return ret;
@@ -17183,10 +17184,10 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
         goto endjob;
     }
 
-    if (disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_NONE &&
-        disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY) {
+    if (job->state == QEMU_BLOCKJOB_STATE_ABORTING ||
+        job->state == QEMU_BLOCKJOB_STATE_PIVOTING) {
         virReportError(VIR_ERR_OPERATION_INVALID,
-                       _("another job on disk '%s' is still being ended"),
+                       _("block job on disk '%s' is still being ended"),
                        disk->dst);
         goto endjob;
     }
@@ -17210,6 +17211,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
 
         if (disk->mirror)
             disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_ABORT;
+        job->state = QEMU_BLOCKJOB_STATE_ABORTING;
     }
 
     ignore_value(virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps));