From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org, kuhn.chenqun@huawei.com,
zhengchuan@huawei.com, lihaotian9@huawei.com,
longpeng2@huawei.com, liangpeng10@huawei.com, philmd@redhat.com,
liuzhiqiang26@huawei.com
Cc: stefanha@redhat.com, quintela@redhat.com
Subject: [PULL 07/11] migration: handle CANCELLING state in migration_completion()
Date: Thu, 12 Nov 2020 18:37:54 +0000 [thread overview]
Message-ID: <20201112183758.203176-8-dgilbert@redhat.com> (raw)
In-Reply-To: <20201112183758.203176-1-dgilbert@redhat.com>
From: "Longpeng(Mike)" <longpeng2@huawei.com>
The following sequence may cause the VM abort during migration:
1. RUN_STATE_RUNNING,MIGRATION_STATUS_ACTIVE
2. before call migration_completion(), we send migrate_cancel
QMP command, the state machine is changed to:
RUN_STATE_RUNNING,MIGRATION_STATUS_CANCELLING
3. call migration_completion(), and the state machine is
switch to: RUN_STATE_RUNNING,MIGRATION_STATUS_COMPLETED
4. call migration_iteration_finish(), because the migration
status is COMPLETED, so it will try to set the runstate
to POSTMIGRATE, but RUNNING-->POSTMIGRATE is an invalid
transition, so abort().
The migration_completion() should not change the migration state
to COMPLETED if it is already changed to CANCELLING.
Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Message-Id: <20201105091726.148-1-longpeng2@huawei.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/migration.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/migration/migration.c b/migration/migration.c
index f696e22fab..87a9b59f83 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3061,6 +3061,8 @@ static void migration_completion(MigrationState *s)
qemu_savevm_state_complete_postcopy(s->to_dst_file);
trace_migration_completion_postcopy_end_after_complete();
+ } else if (s->state == MIGRATION_STATUS_CANCELLING) {
+ goto fail;
}
/*
--
2.28.0
next prev parent reply other threads:[~2020-11-12 18:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-12 18:37 [PULL 00/11] migration queue Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 01/11] migration/ram: Fix hexadecimal format string specifier Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 02/11] ACPI: Avoid infinite recursion when dump-vmstate Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 03/11] migration/multifd: fix hangup with TLS-Multifd due to blocking handshake Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 04/11] migration: fix uninitialized variable warning in migrate_send_rp_req_pages() Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 05/11] migration/dirtyrate: simplify includes in dirtyrate.c Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 06/11] multifd/tls: fix memoryleak of the QIOChannelSocket object when cancelling migration Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` Dr. David Alan Gilbert (git) [this message]
2020-11-12 18:37 ` [PULL 08/11] virtiofsd: Announce submounts even without statx() Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 09/11] tools/virtiofsd/buffer.c: check whether buf is NULL in fuse_bufvec_advance func Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 10/11] virtiofsd: check whether lo_map_reserve returns NULL in, main func Dr. David Alan Gilbert (git)
2020-11-12 18:37 ` [PULL 11/11] virtiofsd: check whether strdup lo.source return NULL in " Dr. David Alan Gilbert (git)
2020-11-13 10:49 ` [PULL 00/11] migration queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201112183758.203176-8-dgilbert@redhat.com \
--to=dgilbert@redhat.com \
--cc=kuhn.chenqun@huawei.com \
--cc=liangpeng10@huawei.com \
--cc=lihaotian9@huawei.com \
--cc=liuzhiqiang26@huawei.com \
--cc=longpeng2@huawei.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=zhengchuan@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.