On 12/03/2014 06:37 AM, Max Reitz wrote: > Add a helper function for reallocating a refcount array, independent of > the refcount order. The newly allocated space is zeroed and the function > handles failed reallocations gracefully. > > The helper function will always align the buffer size to a cluster > boundary; if storing the refcounts in such an array in big endian byte > order, this makes it possible to write parts of the array directly as > refcount blocks into the image file. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > block/qcow2-refcount.c | 137 > +++++++++++++++++++++++++++++++------------------ > 1 file changed, 88 insertions(+), 49 deletions(-) > > diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c > index 152ca22..8bb5167 100644 > --- a/block/qcow2-refcount.c > +++ b/block/qcow2-refcount.c > @@ -1130,6 +1130,70 @@ fail: > /* refcount checking functions */ > > > +static size_t refcount_array_byte_size(BDRVQcowState *s, uint64_t entries) > +{ > + if (s->refcount_order < 3) { > + /* sub-byte width */ > + int shift = 3 - s->refcount_order; > + return (entries + (1 << shift) - 1) >> shift;
Bikeshedding: Should this use DIV_ROUND_UP(entries, 1 << shift)? Either way, Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature