[libvirt PATCH v2 34/81] qemu: Handle migration job in qemuMigrationDstFinish

Jiri Denemark jdenemar at redhat.com
Wed Jun 1 12:49:34 UTC 2022


The function which started a migration phase should also finish it by
calling qemuMigrationJobFinish/qemuMigrationJobContinue so that the code
is easier to follow.

Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
---

Notes:
    Version 2:
    - rewritten without goto

 src/qemu/qemu_migration.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 195b0fd309..20209a0dc8 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -5985,7 +5985,8 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
                              unsigned long flags,
                              int retcode,
                              bool v3proto,
-                             unsigned long long timeReceived)
+                             unsigned long long timeReceived,
+                             bool *finishJob)
 {
     virErrorPtr orig_err = NULL;
     virDomainPtr dom = NULL;
@@ -6034,8 +6035,6 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
     qemuMigrationDstComplete(driver, vm, inPostCopy,
                              VIR_ASYNC_JOB_MIGRATION_IN);
 
-    qemuMigrationJobFinish(vm);
-
     return dom;
 
  error:
@@ -6061,12 +6060,10 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
     if (virDomainObjIsFailedPostcopy(vm)) {
         qemuProcessAutoDestroyRemove(driver, vm);
         qemuDomainCleanupAdd(vm, qemuProcessCleanupMigrationJob);
-        qemuMigrationJobContinue(vm);
+        *finishJob = false;
     } else {
         qemuMigrationParamsReset(driver, vm, VIR_ASYNC_JOB_MIGRATION_IN,
                                  jobPriv->migParams, priv->job.apiFlags);
-
-        qemuMigrationJobFinish(vm);
     }
 
     if (!virDomainObjIsActive(vm))
@@ -6131,17 +6128,20 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
                                                 cookiein, cookieinlen,
                                                 cookieout, cookieoutlen);
         }
-
         qemuMigrationJobFinish(vm);
-        goto cleanup;
-    }
+    } else {
+        bool finishJob = true;
 
-    dom = qemuMigrationDstFinishActive(driver, dconn, vm, cookie_flags,
-                                       cookiein, cookieinlen,
-                                       cookieout, cookieoutlen,
-                                       flags, retcode, v3proto, timeReceived);
-    if (!dom)
-        goto cleanup;
+        dom = qemuMigrationDstFinishActive(driver, dconn, vm, cookie_flags,
+                                           cookiein, cookieinlen,
+                                           cookieout, cookieoutlen,
+                                           flags, retcode, v3proto, timeReceived,
+                                           &finishJob);
+        if (finishJob)
+            qemuMigrationJobFinish(vm);
+        else
+            qemuMigrationJobContinue(vm);
+    }
 
  cleanup:
     virPortAllocatorRelease(port);
-- 
2.35.1



More information about the libvir-list mailing list