From 700577965322672e5213a37f734ede04ad914678 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 12 Feb 2019 14:50:24 +0100 Subject: [PATCH] qemu: Use QEMU_BLOCKJOB_STATE_PIVOTING/ABORTING in qemuDomainBlockJobAbort MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Set the correct job states after the operation is requested in qemu. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_blockjob.c | 8 +++++++- src/qemu/qemu_driver.c | 8 +++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index fe0114bf26..575292ada2 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; } @@ -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); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 87a05b8718..3a2c5f5334 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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)); -- 2.47.2