Message ID | 896a464d5933927db49c968682de8c2b6e59635f.1516978645.git.berto@igalia.com |
---|---|
State | New |
Headers | show |
Series | Allow configuring the qcow2 L2 cache entry size | expand |
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 <berto@igalia.com> > Reviewed-by: Eric Blake <eblake@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 <mreitz@redhat.com> > QCowL2Meta allocation = { > .offset = guest_offset, > .alloc_offset = host_offset, >
On Thu 01 Feb 2018 08:46:46 PM CET, Max Reitz <mreitz@redhat.com> wrote: >> @@ -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: It's a bit longer but it looks better and we can get rid of guest_cluster, so I think I'll change it. Berto
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); QCowL2Meta allocation = { .offset = guest_offset, .alloc_offset = host_offset,