diff options
| author | Juraj Marcin <jmarcin@redhat.com> | 2025-08-26 13:51:40 +0200 |
|---|---|---|
| committer | Peter Xu <peterx@redhat.com> | 2025-10-03 09:48:02 -0400 |
| commit | 725a9e5f7885a3c0d0cd82022d6eb5a758ac9d47 (patch) | |
| tree | 9bf96f13f78eb31a3d19fd78be3772d91f4e5f46 /migration/migration.c | |
| parent | 82f038d5961a8c8f896b499e31c638266e0291e9 (diff) | |
| download | focaccia-qemu-725a9e5f7885a3c0d0cd82022d6eb5a758ac9d47.tar.gz focaccia-qemu-725a9e5f7885a3c0d0cd82022d6eb5a758ac9d47.zip | |
migration: Fix state transition in postcopy_start() error handling
Commit 48814111366b ("migration: Always set DEVICE state") introduced
DEVICE state to postcopy, which moved the actual state transition that
leads to POSTCOPY_ACTIVE.
However, the error handling part of the postcopy_start() function still
expects the state POSTCOPY_ACTIVE, but depending on where an error
happens, now the state can be either ACTIVE, DEVICE or CANCELLING, but
never POSTCOPY_ACTIVE, as this transition now happens just before a
successful return from the function.
Instead, accept any state except CANCELLING when transitioning to FAILED
state.
Cc: qemu-stable@nongnu.org
Fixes: 48814111366b ("migration: Always set DEVICE state")
Signed-off-by: Juraj Marcin <jmarcin@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20250826115145.871272-1-jmarcin@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'migration/migration.c')
| -rw-r--r-- | migration/migration.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/migration/migration.c b/migration/migration.c index 3ff85098d5..edb8ff0d46 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2878,8 +2878,9 @@ static int postcopy_start(MigrationState *ms, Error **errp) fail_closefb: qemu_fclose(fb); fail: - migrate_set_state(&ms->state, MIGRATION_STATUS_POSTCOPY_ACTIVE, - MIGRATION_STATUS_FAILED); + if (ms->state != MIGRATION_STATUS_CANCELLING) { + migrate_set_state(&ms->state, ms->state, MIGRATION_STATUS_FAILED); + } migration_block_activate(NULL); migration_call_notifiers(ms, MIG_EVENT_PRECOPY_FAILED, NULL); bql_unlock(); |