[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 10/20] dump-guest-memory: Block live migration
From: |
Juan Quintela |
Subject: |
[PULL 10/20] dump-guest-memory: Block live migration |
Date: |
Mon, 1 Nov 2021 23:09:02 +0100 |
From: Peter Xu <peterx@redhat.com>
Both dump-guest-memory and live migration caches vm state at the beginning.
Either of them entering the other one will cause race on the vm state, and even
more severe on that (please refer to the crash report in the bug link).
Let's block live migration in dump-guest-memory, and that'll also block
dump-guest-memory if it detected that we're during a live migration.
Side note: migrate_del_blocker() can be called even if the blocker is not
inserted yet, so it's safe to unconditionally delete that blocker in
dump_cleanup (g_slist_remove allows no-entry-found case).
Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1996609
Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
dump/dump.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/dump/dump.c b/dump/dump.c
index ab625909f3..662d0a62cd 100644
--- a/dump/dump.c
+++ b/dump/dump.c
@@ -29,6 +29,7 @@
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
#include "hw/misc/vmcoreinfo.h"
+#include "migration/blocker.h"
#ifdef TARGET_X86_64
#include "win_dump.h"
@@ -47,6 +48,8 @@
#define MAX_GUEST_NOTE_SIZE (1 << 20) /* 1MB should be enough */
+static Error *dump_migration_blocker;
+
#define ELF_NOTE_SIZE(hdr_size, name_size, desc_size) \
((DIV_ROUND_UP((hdr_size), 4) + \
DIV_ROUND_UP((name_size), 4) + \
@@ -101,6 +104,7 @@ static int dump_cleanup(DumpState *s)
qemu_mutex_unlock_iothread();
}
}
+ migrate_del_blocker(dump_migration_blocker);
return 0;
}
@@ -2005,6 +2009,21 @@ void qmp_dump_guest_memory(bool paging, const char *file,
return;
}
+ if (!dump_migration_blocker) {
+ error_setg(&dump_migration_blocker,
+ "Live migration disabled: dump-guest-memory in progress");
+ }
+
+ /*
+ * Allows even for -only-migratable, but forbid migration during the
+ * process of dump guest memory.
+ */
+ if (migrate_add_blocker_internal(dump_migration_blocker, errp)) {
+ /* Remember to release the fd before passing it over to dump state */
+ close(fd);
+ return;
+ }
+
s = &dump_state_global;
dump_state_prepare(s);
--
2.33.1
- [PULL 00/20] Migration 20211031 patches, Juan Quintela, 2021/11/01
- [PULL 02/20] KVM: introduce dirty_pages and kvm_dirty_ring_enabled, Juan Quintela, 2021/11/01
- [PULL 01/20] migration/rdma: Fix out of order wrid, Juan Quintela, 2021/11/01
- [PULL 04/20] migration/dirtyrate: introduce struct and adjust DirtyRateStat, Juan Quintela, 2021/11/01
- [PULL 05/20] migration/dirtyrate: adjust order of registering thread, Juan Quintela, 2021/11/01
- [PULL 03/20] memory: make global_dirty_tracking a bitmask, Juan Quintela, 2021/11/01
- [PULL 06/20] migration/dirtyrate: move init step of calculation to main thread, Juan Quintela, 2021/11/01
- [PULL 08/20] migration: Make migration blocker work for snapshots too, Juan Quintela, 2021/11/01
- [PULL 09/20] migration: Add migrate_add_blocker_internal(), Juan Quintela, 2021/11/01
- [PULL 10/20] dump-guest-memory: Block live migration,
Juan Quintela <=
- [PULL 11/20] memory: Introduce replay_discarded callback for RamDiscardManager, Juan Quintela, 2021/11/01
- [PULL 12/20] virtio-mem: Implement replay_discarded RamDiscardManager callback, Juan Quintela, 2021/11/01
- [PULL 13/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source, Juan Quintela, 2021/11/01
- [PULL 14/20] virtio-mem: Drop precopy notifier, Juan Quintela, 2021/11/01
- [PULL 18/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on background snapshots, Juan Quintela, 2021/11/01
- [PULL 07/20] migration/dirtyrate: implement dirty-ring dirtyrate calculation, Juan Quintela, 2021/11/01
- [PULL 19/20] memory: introduce total_dirty_pages to stat dirty pages, Juan Quintela, 2021/11/01
- [PULL 20/20] migration/dirtyrate: implement dirty-bitmap dirtyrate calculation, Juan Quintela, 2021/11/01