[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 16/21] migration/block-dirty-bitmap: cancel migration on shutd
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v4 16/21] migration/block-dirty-bitmap: cancel migration on shutdown |
Date: |
Mon, 27 Jul 2020 22:42:31 +0300 |
If target is turned off prior to postcopy finished, target crashes
because busy bitmaps are found at shutdown.
Canceling incoming migration helps, as it removes all unfinished (and
therefore busy) bitmaps.
Similarly on source we crash in bdrv_close_all which asserts that all
bdrv states are removed, because bdrv states involved into dirty bitmap
migration are referenced by it. So, we need to cancel outgoing
migration as well.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
migration/migration.h | 2 ++
migration/block-dirty-bitmap.c | 16 ++++++++++++++++
migration/migration.c | 13 +++++++++++++
3 files changed, 31 insertions(+)
diff --git a/migration/migration.h b/migration/migration.h
index ab20c756f5..6c6a931d0d 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -335,6 +335,8 @@ void migrate_send_rp_recv_bitmap(MigrationIncomingState
*mis,
void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value);
void dirty_bitmap_mig_before_vm_start(void);
+void dirty_bitmap_mig_cancel_outgoing(void);
+void dirty_bitmap_mig_cancel_incoming(void);
void migrate_add_address(SocketAddress *address);
int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque);
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index 4e45e79251..36ca8be392 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -657,6 +657,22 @@ static void cancel_incoming_locked(DBMLoadState *s)
s->bitmaps = NULL;
}
+void dirty_bitmap_mig_cancel_outgoing(void)
+{
+ dirty_bitmap_do_save_cleanup(&dbm_state.save);
+}
+
+void dirty_bitmap_mig_cancel_incoming(void)
+{
+ DBMLoadState *s = &dbm_state.load;
+
+ qemu_mutex_lock(&s->lock);
+
+ cancel_incoming_locked(s);
+
+ qemu_mutex_unlock(&s->lock);
+}
+
static void dirty_bitmap_load_complete(QEMUFile *f, DBMLoadState *s)
{
GSList *item;
diff --git a/migration/migration.c b/migration/migration.c
index 1c61428988..8fe36339db 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -188,6 +188,19 @@ void migration_shutdown(void)
*/
migrate_fd_cancel(current_migration);
object_unref(OBJECT(current_migration));
+
+ /*
+ * Cancel outgoing migration of dirty bitmaps. It should
+ * at least unref used block nodes.
+ */
+ dirty_bitmap_mig_cancel_outgoing();
+
+ /*
+ * Cancel incoming migration of dirty bitmaps. Dirty bitmaps
+ * are non-critical data, and their loss never considered as
+ * something serious.
+ */
+ dirty_bitmap_mig_cancel_incoming();
}
/* For outgoing */
--
2.21.0
- [PATCH v4 06/21] qemu-iotests/199: increase postcopy period, (continued)
- [PATCH v4 06/21] qemu-iotests/199: increase postcopy period, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 08/21] migration/block-dirty-bitmap: rename state structure types, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 07/21] migration/block-dirty-bitmap: fix dirty_bitmap_mig_before_vm_start, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 09/21] migration/block-dirty-bitmap: rename dirty_bitmap_mig_cleanup, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 12/21] migration/block-dirty-bitmap: rename finish_lock to just lock, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 11/21] migration/block-dirty-bitmap: refactor state global variables, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 13/21] migration/block-dirty-bitmap: simplify dirty_bitmap_load_complete, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 15/21] migration/block-dirty-bitmap: relax error handling in incoming part, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 10/21] migration/block-dirty-bitmap: move mutex init to dirty_bitmap_mig_init, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 14/21] migration/block-dirty-bitmap: keep bitmap state for all bitmaps, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 16/21] migration/block-dirty-bitmap: cancel migration on shutdown,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v4 17/21] migration/savevm: don't worry if bitmap migration postcopy failed, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 18/21] qemu-iotests/199: prepare for new test-cases addition, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 19/21] qemu-iotests/199: check persistent bitmaps, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 21/21] qemu-iotests/199: add source-killed case to bitmaps postcopy, Vladimir Sementsov-Ogievskiy, 2020/07/27
- [PATCH v4 20/21] qemu-iotests/199: add early shutdown case to bitmaps postcopy, Vladimir Sementsov-Ogievskiy, 2020/07/27
- Re: [PATCH v4 for-5.1 00/21] Fix error handling during bitmap postcopy, Eric Blake, 2020/07/27