On 26.10.19 23:25, Alberto Garcia wrote: > 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 > --- > block/qcow2-cluster.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c > index aa3eb727a5..62f2a9fcc0 100644 > --- a/block/qcow2-cluster.c > +++ b/block/qcow2-cluster.c > @@ -2036,6 +2036,7 @@ 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); > + set_l2_bitmap(s, l2_slice, j, 0); > l2_dirty = true; > continue; > } > @@ -2102,6 +2103,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, > } else { > set_l2_entry(s, l2_slice, j, offset); > } > + set_l2_bitmap(s, l2_slice, j, QCOW_L2_BITMAP_ALL_ALLOC); > l2_dirty = true; > } Technically this isn’t needed because this function is only called when downgrading v3 to v2 images (which can’t have subclusters), but of course it won’t hurt. Max