[Devel] [PATCH hci-8.1 v2 3/3] drivers/md/dm-qcow2: do not revalidate inconsistent persistent bitmaps
Alexander Ivanov
alexander.ivanov at virtuozzo.com
Thu Oct 29 17:43:58 MSK 2026
qcow2_check_convert_hdr() ignores the autoclear features stored in the
image, and qcow2_parse_bitmap_ext() sets the bitmaps bit whenever no
bitmap has the auto flag. If the bit was already clear on disk, a
writable open sets it again and marks the bitmaps extension consistent.
The qcow2 spec requires to treat such an extension as inconsistent,
since a program without bitmap support might have modified the image.
Keep the bitmaps bit only if it is set in the image.
https://virtuozzo.atlassian.net/browse/VSTOR-138887
Feature: dm-qcow2: block device over QCOW2 files driver
Fixes: f913aa3f7a1d4 ("dm-qcow2: parse bitmap extension")
Signed-off-by: Alexander Ivanov <alexander.ivanov at virtuozzo.com>
---
drivers/md/dm-qcow2-target.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/md/dm-qcow2-target.c b/drivers/md/dm-qcow2-target.c
index 2d1e5d4e1b3a..4a0e5747b77a 100644
--- a/drivers/md/dm-qcow2-target.c
+++ b/drivers/md/dm-qcow2-target.c
@@ -835,6 +835,7 @@ static int qcow2_parse_header(struct dm_target *ti, struct qcow2 *qcow2,
struct file *file = qcow2->file;
loff_t ext_start, ext_end;
struct md_page *md;
+ u64 raw_autoclear;
int ret;
qcow2->file_size = i_size_read(file_inode(file));
@@ -865,6 +866,7 @@ static int qcow2_parse_header(struct dm_target *ti, struct qcow2 *qcow2,
max_len = upper->hdr.size;
}
ret = qcow2_check_convert_hdr(ti, raw_hdr, hdr, min_len, max_len);
+ raw_autoclear = be64_to_cpu(raw_hdr->autoclear_features);
kunmap(md->page);
if (ret < 0)
goto out;
@@ -914,6 +916,8 @@ static int qcow2_parse_header(struct dm_target *ti, struct qcow2 *qcow2,
goto out;
}
}
+ if (!(raw_autoclear & QCOW2_AUTOCLEAR_BITMAPS))
+ hdr->autoclear_features &= ~QCOW2_AUTOCLEAR_BITMAPS;
ret = 0;
out:
return ret;
--
2.53.0
More information about the Devel
mailing list