[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v4 2/3] qcow2: fix bitmaps loading when bitmaps alre
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-block] [PATCH v4 2/3] qcow2: fix bitmaps loading when bitmaps already exist |
Date: |
Tue, 20 Mar 2018 20:05:19 +0300 |
On reopen with existing bitmaps, instead of loading bitmaps, lets
reopen them if needed. This also fixes bitmaps migration through
shared storage.
Consider the case. Persistent bitmaps are stored on bdrv_inactivate.
Then, on destination process_incoming_migration_bh() calls
bdrv_invalidate_cache_all() which leads to
qcow2_load_autoloading_dirty_bitmaps() which fails if bitmaps are
already loaded on destination start.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/qcow2.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 7472af6931..d2d129a2e6 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1480,7 +1480,22 @@ static int coroutine_fn qcow2_do_open(BlockDriverState
*bs, QDict *options,
s->autoclear_features &= QCOW2_AUTOCLEAR_MASK;
}
- if (qcow2_load_dirty_bitmaps(bs, &local_err)) {
+ if (bdrv_dirty_bitmap_next(bs, NULL)) {
+ /* It's some kind of reopen with already existing dirty bitmaps. There
+ * are no known cases where we need loading bitmaps in such situation,
+ * so it's safer don't load them.
+ *
+ * Moreover, if we have some readonly bitmaps and we are reopening for
+ * rw we should reopen bitmaps correspondingly.
+ */
+ if (bdrv_has_readonly_bitmaps(bs) &&
+ !bdrv_is_read_only(bs) && !(bdrv_get_flags(bs) & BDRV_O_INACTIVE))
+ {
+ bool header_updated = false;
+ qcow2_reopen_bitmaps_rw_hint(bs, &header_updated, &local_err);
+ update_header = update_header && !header_updated;
+ }
+ } else if (qcow2_load_dirty_bitmaps(bs, &local_err)) {
update_header = false;
}
if (local_err != NULL) {
--
2.11.1
- [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/20
- [Qemu-block] [PATCH v4 3/3] iotests: enable shared migration cases in 169, Vladimir Sementsov-Ogievskiy, 2018/03/20
- [Qemu-block] [PATCH v4 2/3] qcow2: handle reopening bitmaps on bdrv_invalidate_cache, Vladimir Sementsov-Ogievskiy, 2018/03/20
- [Qemu-block] [PATCH v4 2/3] qcow2: fix bitmaps loading when bitmaps already exist,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-block] [PATCH v4 1/3] qcow2-bitmap: add qcow2_reopen_bitmaps_rw_hint(), Vladimir Sementsov-Ogievskiy, 2018/03/20
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Max Reitz, 2018/03/21
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Max Reitz, 2018/03/26
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/27
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/27
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/27
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Max Reitz, 2018/03/28
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/29
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Max Reitz, 2018/03/29
- Re: [Qemu-block] [PATCH v4 for 2.12 0/3] fix bitmaps migration through shared storage, Vladimir Sementsov-Ogievskiy, 2018/03/29