qcow2: Assert that expand_zero_clusters_in_l1() does not support subclusters
This function is only used by qcow2_expand_zero_clusters() to downgrade a qcow2 image to a previous version. This would require transforming all extended L2 entries into normal L2 entries but this is not a simple task and there are no plans to implement this at the moment. Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <15e65112b4144381b4d8c0bdf8fb76b0d813e3d1.1594396418.git.berto@igalia.com> [mreitz: Fixed comment style] Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
2118771ddf
commit
7bbb59202a
@ -2166,6 +2166,9 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
|
||||
int ret;
|
||||
int i, j;
|
||||
|
||||
/* qcow2_downgrade() is not allowed in images with subclusters */
|
||||
assert(!has_subclusters(s));
|
||||
|
||||
slice_size2 = s->l2_slice_size * l2_entry_size(s);
|
||||
n_slices = s->cluster_size / slice_size2;
|
||||
|
||||
@ -2233,8 +2236,11 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
|
||||
|
||||
if (cluster_type == QCOW2_CLUSTER_ZERO_PLAIN) {
|
||||
if (!bs->backing) {
|
||||
/* not backed; therefore we can simply deallocate the
|
||||
* cluster */
|
||||
/*
|
||||
* not backed; therefore we can simply deallocate the
|
||||
* cluster. No need to call set_l2_bitmap(), this
|
||||
* function doesn't support images with subclusters.
|
||||
*/
|
||||
set_l2_entry(s, l2_slice, j, 0);
|
||||
l2_dirty = true;
|
||||
continue;
|
||||
@ -2305,6 +2311,10 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
|
||||
} else {
|
||||
set_l2_entry(s, l2_slice, j, offset);
|
||||
}
|
||||
/*
|
||||
* No need to call set_l2_bitmap() after set_l2_entry() because
|
||||
* this function doesn't support images with subclusters.
|
||||
*/
|
||||
l2_dirty = true;
|
||||
}
|
||||
|
||||
|
@ -303,6 +303,12 @@ $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
|
||||
_img_info --format-specific
|
||||
_check_test_img
|
||||
|
||||
echo
|
||||
echo "=== Testing version downgrade with extended L2 entries ==="
|
||||
echo
|
||||
_make_test_img -o "compat=1.1,extended_l2=on" 64M
|
||||
$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
|
||||
|
||||
echo
|
||||
echo "=== Try changing the external data file ==="
|
||||
echo
|
||||
|
@ -533,6 +533,11 @@ Format specific information:
|
||||
extended l2: false
|
||||
No errors were found on the image.
|
||||
|
||||
=== Testing version downgrade with extended L2 entries ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
qemu-img: Cannot downgrade an image with incompatible features 0x10 set
|
||||
|
||||
=== Try changing the external data file ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
|
Loading…
Reference in New Issue
Block a user