On Thu, Oct 19, 2017 at 15:56:29 +0200, Jiri Denemark wrote:
Merge cancel and cancelPostCopy sections with the generic error
section,
where we can easily decide whether canceling the ongoing migration is
required.
...
@@ -3843,13 +3844,18 @@ qemuMigrationRun(virQEMUDriverPtr driver,
rc = qemuMigrationWaitForCompletion(driver, vm,
QEMU_ASYNC_JOB_MIGRATION_OUT,
dconn, waitFlags);
- if (rc == -2)
- goto cancel;
- else if (rc == -1)
+ if (rc == -2) {
goto error;
+ } else if (rc == -1) {
+ /* QEMU reported failed migration, nothing to cancel anymore */
+ cancel = false;
+ goto error;
+ }
- if (priv->job.current->status == QEMU_DOMAIN_JOB_STATUS_POSTCOPY)
- inPostCopy = true;
+ if (priv->job.current->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED) {
+ /* QEMU finished migration, nothing to cancel anymore */
+ cancel = false;
+ }
/* When migration completed, QEMU will have paused the CPUs for us.
* Wait for the STOP event to be processed or explicitly stop CPUs
Please, consider the following small patch squashed in:
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index bc57f757a..626b4e3ee 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -3855,11 +3855,6 @@ qemuMigrationRun(virQEMUDriverPtr driver,
goto error;
}
- if (priv->job.current->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED) {
- /* QEMU finished migration, nothing to cancel anymore */
- cancel = false;
- }
-
/* When migration completed, QEMU will have paused the CPUs for us.
* Wait for the STOP event to be processed or explicitly stop CPUs
* (for old QEMU which does not send events) to release the lock state.
@@ -3931,6 +3926,7 @@ qemuMigrationRun(virQEMUDriverPtr driver,
orig_err = virSaveLastError();
if (cancel &&
+ priv->job.current->status != QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED
&&
virDomainObjIsActive(vm) &&
qemuDomainObjEnterMonitorAsync(driver, vm,
QEMU_ASYNC_JOB_MIGRATION_OUT) == 0) {