qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 10/21] qcow2: refcount_order parameter for qcow2


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 10/21] qcow2: refcount_order parameter for qcow2_create2
Date: Mon, 10 Nov 2014 22:40:34 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

On 11/10/2014 06:45 AM, Max Reitz wrote:
> Add a refcount_order parameter to qcow2_create2(), use that value for
> the image header and for calculating the size required for
> preallocation.
> 
> For now, always pass 4.
> 
> Signed-off-by: Max Reitz <address@hidden>
> ---
>  block/qcow2.c | 41 ++++++++++++++++++++++++++++++-----------
>  1 file changed, 30 insertions(+), 11 deletions(-)
> 

> @@ -1811,6 +1811,13 @@ static int qcow2_create2(const char *filename, int64_t 
> total_size,
>          int64_t meta_size = 0;
>          uint64_t nreftablee, nrefblocke, nl1e, nl2e;
>          int64_t aligned_total_size = align_offset(total_size, cluster_size);
> +        int refblock_bits, refblock_size;
> +        /* refcount entry size in bytes */
> +        double rces = (1 << refcount_order) / 8.;

Would float be any simpler than double?

> +
> +        /* see qcow2_open() */
> +        refblock_bits = cluster_bits - (refcount_order - 3);
> +        refblock_size = 1 << refblock_bits;
>  
>          /* header: 1 cluster */
>          meta_size += cluster_size;
> @@ -1835,20 +1842,20 @@ static int qcow2_create2(const char *filename, 
> int64_t total_size,
>           *   c = cluster size
>           *   y1 = number of refcount blocks entries
>           *   y2 = meta size including everything
> +         *   rces = refcount entry size in bytes
>           * then,
>           *   y1 = (y2 + a)/c
> -         *   y2 = y1 * sizeof(u16) + y1 * sizeof(u16) * sizeof(u64) / c + m
> +         *   y2 = y1 * rces + y1 * rces * sizeof(u64) / c + m

Hmm. This changes from integral to floating point.  Are we going to
suffer from any rounding problems?  I guess you want double to ensure
maximum precision; but whereas earlier patches were limited with
refcount_order of 6 to 2^63, this now limits us around 2^53 if we are
still trying to be accurate.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]