On Tue, May 10, 2022 at 17:21:16 +0200, Jiri Denemark wrote:
To make the code flow a bit more sensible.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_migration.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 99b1d4b88b..dd18a4ad63 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -5819,29 +5819,27 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
}
if (qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3) < 0)
- goto endjob;
+ goto cleanup;
virCloseCallbacksUnset(driver->closeCallbacks, vm,
qemuMigrationSrcCleanup);
- ret = qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, cookiein,
cookieinlen,
- cookieout, cookieoutlen,
- flags, resource, NULL, graphicsuri,
- nmigrate_disks, migrate_disks, migParams,
nbdURI);
-
- if (ret < 0) {
- qemuMigrationSrcRestoreDomainState(driver, vm);
- goto endjob;
- }
-
- ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
+ if (qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, cookiein,
cookieinlen,
+ cookieout, cookieoutlen,
+ flags, resource, NULL, graphicsuri,
+ nmigrate_disks, migrate_disks, migParams, nbdURI)
< 0)
+ goto cleanup;
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
qemuMigrationSrcCleanup) < 0)
- goto endjob;
+ goto cleanup;
So this failure now becomes an error from previously being technically
ignored, and ...
- endjob:
+ ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
+ ret = 0;
+
+ cleanup:
if (ret < 0 && !virDomainObjIsFailedPostcopy(vm)) {
+ qemuMigrationSrcRestoreDomainState(driver, vm);
... this call will not be skipped in such case, thus restoring the VM,
but since we fail anyways the migration will be cancelled.
So I think this can be considered a "bugfix" for a extremely
unlikely/impossible bug.
qemuMigrationParamsReset(driver, vm,
VIR_ASYNC_JOB_MIGRATION_OUT,
jobPriv->migParams, priv->job.apiFlags);
qemuMigrationJobFinish(vm);
--
2.35.1
Reviewed-by: Peter Krempa <pkrempa(a)redhat.com>