qcow2: No persistent dirty bitmaps for compat=0.10
Persistent dirty bitmaps require a properly functioning autoclear_features field, or we cannot track when an unsupporting program might overwrite them. Therefore, we cannot support them for compat=0.10 images. Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 20171123020832.8165-3-mreitz@redhat.com Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
3c363575dc
commit
c9ceb3ec8a
@ -1449,6 +1449,16 @@ bool qcow2_can_store_new_dirty_bitmap(BlockDriverState *bs,
|
||||
bool found;
|
||||
Qcow2BitmapList *bm_list;
|
||||
|
||||
if (s->qcow_version < 3) {
|
||||
/* Without autoclear_features, we would always have to assume
|
||||
* that a program without persistent dirty bitmap support has
|
||||
* accessed this qcow2 file when opening it, and would thus
|
||||
* have to drop all dirty bitmaps (defeating their purpose).
|
||||
*/
|
||||
error_setg(errp, "Cannot store dirty bitmaps in qcow2 v2 files");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (check_constraints_on_bitmap(bs, name, granularity, errp) != 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
@ -302,9 +302,17 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
|
||||
}
|
||||
|
||||
if (!(s->autoclear_features & QCOW2_AUTOCLEAR_BITMAPS)) {
|
||||
warn_report("a program lacking bitmap support "
|
||||
"modified this file, so all bitmaps are now "
|
||||
"considered inconsistent");
|
||||
if (s->qcow_version < 3) {
|
||||
/* Let's be a bit more specific */
|
||||
warn_report("This qcow2 v2 image contains bitmaps, but "
|
||||
"they may have been modified by a program "
|
||||
"without persistent bitmap support; so now "
|
||||
"they must all be considered inconsistent");
|
||||
} else {
|
||||
warn_report("a program lacking bitmap support "
|
||||
"modified this file, so all bitmaps are now "
|
||||
"considered inconsistent");
|
||||
}
|
||||
error_printf("Some clusters may be leaked, "
|
||||
"run 'qemu-img check -r' on the image "
|
||||
"file to fix.");
|
||||
|
Loading…
Reference in New Issue
Block a user