[libvirt] [PATCH 4/8] qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort

Peter Krempa posted 8 patches 6 years, 6 months ago
[libvirt] [PATCH 4/8] qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort
Posted by Peter Krempa 6 years, 6 months ago
Set the correct job states after the operation is requested in qemu.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_blockjob.c | 4 +++-
 src/qemu/qemu_driver.c   | 8 +++++---
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index fe0114bf26..0f08cf7967 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -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;
 }


diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index fa9e3c2bfc..39b5ea5e7e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17028,6 +17028,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;
@@ -17182,10 +17183,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;
     }
@@ -17209,6 +17210,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));
-- 
2.21.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 4/8] qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort
Posted by Peter Krempa 6 years, 6 months ago
On Thu, Jul 18, 2019 at 18:31:39 +0200, Peter Krempa wrote:
> Set the correct job states after the operation is requested in qemu.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  src/qemu/qemu_blockjob.c | 4 +++-
>  src/qemu/qemu_driver.c   | 8 +++++---
>  2 files changed, 8 insertions(+), 4 deletions(-)

later in my blockdev branch I found the following hunk which is needed
to correctly transition into the cancelled state when aborting the job
which I forgot to merge into this patch:

diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index 0f08cf7967..575292ada2 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -673,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);

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 4/8] qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort
Posted by Ján Tomko 6 years, 6 months ago
On Mon, Jul 22, 2019 at 06:24:43PM +0200, Peter Krempa wrote:
>On Thu, Jul 18, 2019 at 18:31:39 +0200, Peter Krempa wrote:
>> Set the correct job states after the operation is requested in qemu.
>>
>> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>> ---
>>  src/qemu/qemu_blockjob.c | 4 +++-
>>  src/qemu/qemu_driver.c   | 8 +++++---
>>  2 files changed, 8 insertions(+), 4 deletions(-)
>
>later in my blockdev branch I found the following hunk which is needed
>to correctly transition into the cancelled state when aborting the job
>which I forgot to merge into this patch:
>
>diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
>index 0f08cf7967..575292ada2 100644
>--- a/src/qemu/qemu_blockjob.c
>+++ b/src/qemu/qemu_blockjob.c
>@@ -673,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);
>


Reviewed-by: Ján Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list