From 5e1535771bba299aae4de2d810100fa7fedfeca8 Mon Sep 17 00:00:00 2001 From: Peter Xu 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 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 RH-Acked-by: Peter Xu > 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 Message-Id: <20210629181356.217312-3-peterx@redhat.com> Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Dr. David Alan Gilbert (cherry picked from commit b7f9afd48e7bc5c341e55348f2c2eed08314be7d) Fixes: b5eea99e ("migration: Add yank feature", 2021-01-13) Signed-off-by: Leonardo Bras Signed-off-by: Miroslav Rezanina --- 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