diff options
| author | Peter Xu | 2021-06-29 20:13:56 +0200 |
|---|---|---|
| committer | Dr. David Alan Gilbert | 2021-07-05 11:51:26 +0200 |
| commit | b7f9afd48e7bc5c341e55348f2c2eed08314be7d (patch) | |
| tree | 3efd460de27952ff08d6035d2c8690c23ca72418 /migration | |
| parent | migration: Move yank outside qemu_start_incoming_migration() (diff) | |
| download | qemu-b7f9afd48e7bc5c341e55348f2c2eed08314be7d.tar.gz qemu-b7f9afd48e7bc5c341e55348f2c2eed08314be7d.tar.xz qemu-b7f9afd48e7bc5c341e55348f2c2eed08314be7d.zip | |
migration: Allow reset of postcopy_recover_triggered when failed
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>
Diffstat (limited to 'migration')
| -rw-r--r-- | migration/migration.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/migration/migration.c b/migration/migration.c index 1bb03d1eca..fcca289ef7 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2097,6 +2097,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."); @@ -2115,6 +2122,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) |
