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;
}
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);
if (disk && disk->mirror)
disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT;
+ job->state = QEMU_BLOCKJOB_STATE_PIVOTING;
cleanup:
return ret;
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;
}
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));