[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/22] qcow2-bitmap: add autoclear bit
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-devel] [PATCH 15/22] qcow2-bitmap: add autoclear bit |
Date: |
Fri, 30 Sep 2016 13:53:21 +0300 |
Add autoclear bit for handling rewriting image by old qemu version.
If autoclear bit is not set, but bitmaps extension is found it
would not be loaded and warning will be generated.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/qcow2-bitmap.c | 4 ++++
block/qcow2.c | 12 ++++++++++--
block/qcow2.h | 9 +++++++++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
index 2642afe..76f7e2b 100644
--- a/block/qcow2-bitmap.c
+++ b/block/qcow2-bitmap.c
@@ -515,6 +515,10 @@ static int directory_update(BlockDriverState *bs, uint8_t
*new_dir,
if (ret < 0) {
goto fail;
}
+
+ s->autoclear_features |= QCOW2_AUTOCLEAR_DIRTY_BITMAPS;
+ } else {
+ s->autoclear_features &= ~(uint64_t)QCOW2_AUTOCLEAR_DIRTY_BITMAPS;
}
s->bitmap_directory_offset = new_offset;
s->bitmap_directory_size = new_size;
diff --git a/block/qcow2.c b/block/qcow2.c
index aa967ed..373cf7e 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -165,6 +165,13 @@ static int qcow2_read_extensions(BlockDriverState *bs,
uint64_t start_offset,
break;
case QCOW2_EXT_MAGIC_DIRTY_BITMAPS:
+ if (!(s->autoclear_features & QCOW2_AUTOCLEAR_DIRTY_BITMAPS)) {
+ fprintf(stderr,
+ "WARNING: bitmaps_ext: autoclear flag is not "
+ "set, all bitmaps will be considered as inconsistent");
+ break;
+ }
+
ret = bdrv_pread(bs->file, offset, &bitmaps_ext, ext.len);
if (ret < 0) {
error_setg_errno(errp, -ret, "ERROR: bitmaps_ext: "
@@ -1206,8 +1213,9 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
}
/* Clear unknown autoclear feature bits */
- if (!bs->read_only && !(flags & BDRV_O_INACTIVE) && s->autoclear_features)
{
- s->autoclear_features = 0;
+ if (!bs->read_only && !(flags & BDRV_O_INACTIVE) &&
+ (s->autoclear_features & ~QCOW2_AUTOCLEAR_MASK)) {
+ s->autoclear_features &= QCOW2_AUTOCLEAR_MASK;
ret = qcow2_update_header(bs);
if (ret < 0) {
error_setg_errno(errp, -ret, "Could not update qcow2 header");
diff --git a/block/qcow2.h b/block/qcow2.h
index af18efc..a5e7592 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -215,6 +215,15 @@ enum {
QCOW2_COMPAT_FEAT_MASK = QCOW2_COMPAT_LAZY_REFCOUNTS,
};
+/* Autoclear feature bits */
+enum {
+ QCOW2_AUTOCLEAR_DIRTY_BITMAPS_BITNR = 0,
+ QCOW2_AUTOCLEAR_DIRTY_BITMAPS =
+ 1 << QCOW2_AUTOCLEAR_DIRTY_BITMAPS_BITNR,
+
+ QCOW2_AUTOCLEAR_MASK = QCOW2_AUTOCLEAR_DIRTY_BITMAPS,
+};
+
enum qcow2_discard_type {
QCOW2_DISCARD_NEVER = 0,
QCOW2_DISCARD_ALWAYS,
--
1.8.3.1
- [Qemu-devel] [PATCH v7 00/22] qcow2: persistent dirty bitmaps, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 21/22] specs/qcow2: fix bitmap granularity qemu-specific note, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 01/22] hbitmap: improve dirty iter, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 14/22] qcow2: delete bitmaps on truncate, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 15/22] qcow2-bitmap: add autoclear bit,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-devel] [PATCH 16/22] qmp: add persistent flag to block-dirty-bitmap-add, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 06/22] qcow2: add dirty bitmaps extension, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 18/22] qapi: add md5 checksum of last dirty bitmap level to query-block, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 19/22] iotests: test qcow2 persistent dirty bitmap, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 10/22] block/dirty-bitmap: add bdrv_dirty_bitmap_next(), Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 03/22] block: fix bdrv_dirty_bitmap_granularity signature, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 17/22] qmp: add autoload parameter to block-dirty-bitmap-add, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 02/22] tests: add hbitmap iter test, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 13/22] qcow2-bitmap: check constraints, Vladimir Sementsov-Ogievskiy, 2016/09/30
- [Qemu-devel] [PATCH 09/22] block: introduce persistent dirty bitmaps, Vladimir Sementsov-Ogievskiy, 2016/09/30