Two changes are needed in order to add subcluster support to this function: deallocated clusters must have their bitmaps cleared, and expanded clusters must have all the "subcluster allocated" bits set.
Signed-off-by: Alberto Garcia <be...@igalia.com> --- block/qcow2-cluster.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 207f670c94..ede75138d2 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -2054,6 +2054,9 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, /* not backed; therefore we can simply deallocate the * cluster */ set_l2_entry(s, l2_slice, j, 0); + if (has_subclusters(s)) { + set_l2_bitmap(s, l2_slice, j, 0); + } l2_dirty = true; continue; } @@ -2120,6 +2123,9 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, } else { set_l2_entry(s, l2_slice, j, offset); } + if (has_subclusters(s)) { + set_l2_bitmap(s, l2_slice, j, QCOW_L2_BITMAP_ALL_ALLOC); + } l2_dirty = true; } -- 2.20.1