Blob Blame History Raw
From 5e1535771bba299aae4de2d810100fa7fedfeca8 Mon Sep 17 00:00:00 2001
From: Peter Xu <peterx@redhat.com>
Date: Tue, 29 Jun 2021 14:13:56 -0400
Subject: [PATCH 02/39] migration: Allow reset of postcopy_recover_triggered
 when failed
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

RH-Author: Leonardo BrĂ¡s <leobras@redhat.com>
RH-MergeRequest: 25: migration: Move yank outside qemu_start_incoming_migration()
RH-Commit: [2/2] b766a7f36df4f889d74a2e8d518e1100e52ab726 (LeoBras/centos-qemu-kvm)
RH-Bugzilla: 1974683
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
RH-Acked-by: Peter Xu <Peter Xu <peterx@redhat.com>>

It's possible qemu_start_incoming_migration() failed at any point, when it
happens we should reset postcopy_recover_triggered to false so that the user
can still retry with a saner incoming port.

Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20210629181356.217312-3-peterx@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
(cherry picked from commit b7f9afd48e7bc5c341e55348f2c2eed08314be7d)
Fixes: b5eea99e ("migration: Add yank feature", 2021-01-13)
Signed-off-by: Leonardo Bras <leobras@redhat.com>
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
---
 migration/migration.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/migration/migration.c b/migration/migration.c
index f077640df2..9d185f0e28 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2109,6 +2109,13 @@ void qmp_migrate_recover(const char *uri, Error **errp)
 {
     MigrationIncomingState *mis = migration_incoming_get_current();
 
+    /*
+     * Don't even bother to use ERRP_GUARD() as it _must_ always be set by
+     * callers (no one should ignore a recover failure); if there is, it's a
+     * programming error.
+     */
+    assert(errp);
+
     if (mis->state != MIGRATION_STATUS_POSTCOPY_PAUSED) {
         error_setg(errp, "Migrate recover can only be run "
                    "when postcopy is paused.");
@@ -2127,6 +2134,12 @@ void qmp_migrate_recover(const char *uri, Error **errp)
      * to continue using that newly established channel.
      */
     qemu_start_incoming_migration(uri, errp);
+
+    /* Safe to dereference with the assert above */
+    if (*errp) {
+        /* Reset the flag so user could still retry */
+        qatomic_set(&mis->postcopy_recover_triggered, false);
+    }
 }
 
 void qmp_migrate_pause(Error **errp)
-- 
2.27.0