On 2018-01-26 15:59, Alberto Garcia wrote: > The qcow2_truncate() code is mostly independent from whether > we're using L2 slices or full L2 tables, but in full and > falloc preallocation modes new L2 tables are allocated using > qcow2_alloc_cluster_link_l2(). Therefore the code needs to be > modified to ensure that all nb_clusters that are processed in each > call can be allocated with just one L2 slice. > > Signed-off-by: Alberto Garcia <be...@igalia.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- > block/qcow2.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/block/qcow2.c b/block/qcow2.c > index 78f067cae7..529becfa30 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -3261,8 +3261,9 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t > offset, > guest_offset = old_length; > while (nb_new_data_clusters) { > int64_t guest_cluster = guest_offset >> s->cluster_bits; > - int64_t nb_clusters = MIN(nb_new_data_clusters, > - s->l2_size - guest_cluster % > s->l2_size); > + int64_t nb_clusters = MIN( > + nb_new_data_clusters, > + s->l2_slice_size - guest_cluster % s->l2_slice_size);
An alternative would be the "s->l2_slice_size - offset_to_l2_slice_index(s, guest_offset)" we basically have elsewhere, but that's longer and doesn't really matter: Reviewed-by: Max Reitz <mre...@redhat.com> > QCowL2Meta allocation = { > .offset = guest_offset, > .alloc_offset = host_offset, >
signature.asc
Description: OpenPGP digital signature