aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2025-02-13 14:59:23 -0300
committerFabiano Rosas <farosas@suse.de>2025-02-14 15:19:05 -0300
commit646119088f8a1d9925239e70b0a7b426bfb6e58a (patch)
treeef4a2aba334fc17ba55035e68ea717a3a9c5c09a
parent2b667a8c0f7ad423c9141b3a487898c50a6ff5e0 (diff)
downloadqemu-646119088f8a1d9925239e70b0a7b426bfb6e58a.zip
qemu-646119088f8a1d9925239e70b0a7b426bfb6e58a.tar.gz
qemu-646119088f8a1d9925239e70b0a7b426bfb6e58a.tar.bz2
migration: Reject qmp_migrate_cancel after postcopy
After postcopy has started, it's not possible to recover the source machine in case a migration error occurs because the destination has already been changing the state of the machine. For that same reason, it doesn't make sense to try to cancel the migration after postcopy has started. Reject the cancel command during postcopy. Reviewed-by: Peter Xu <peterx@redhat.com> Message-ID: <20250213175927.19642-6-farosas@suse.de> Signed-off-by: Fabiano Rosas <farosas@suse.de>
-rw-r--r--migration/migration.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/migration/migration.c b/migration/migration.c
index c39cede..48c9ad3 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2251,7 +2251,18 @@ static void qmp_migrate_finish(MigrationAddress *addr, bool resume_requested,
void qmp_migrate_cancel(Error **errp)
{
- migration_cancel(NULL);
+ /*
+ * After postcopy migration has started, the source machine is not
+ * recoverable in case of a migration error. This also means the
+ * cancel command cannot be used as cancel should allow the
+ * machine to continue operation.
+ */
+ if (migration_in_postcopy()) {
+ error_setg(errp, "Postcopy migration in progress, cannot cancel.");
+ return;
+ }
+
+ migration_cancel();
}
void qmp_migrate_continue(MigrationStatus state, Error **errp)