qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v6 11/24] qcow2: refcount_order parameter for qc


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH v6 11/24] qcow2: refcount_order parameter for qcow2_create2
Date: Wed, 18 Feb 2015 12:05:29 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Am 10.02.2015 um 21:28 hat Max Reitz geschrieben:
> 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.
> 
> This addition requires changes to the calculation of the file size for
> the "full" and "falloc" preallocation modes. That in turn is a nice
> opportunity to add a comment about that calculation not necessarily
> being exact (and that being intentional).
> 
> Signed-off-by: Max Reitz <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> Reviewed-by: Stefan Hajnoczi <address@hidden>
> ---
>  block/qcow2.c | 46 +++++++++++++++++++++++++++++++++++-----------
>  1 file changed, 35 insertions(+), 11 deletions(-)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index e563a30..b7c023e 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -1783,7 +1783,7 @@ static int preallocate(BlockDriverState *bs)
>  static int qcow2_create2(const char *filename, int64_t total_size,
>                           const char *backing_file, const char 
> *backing_format,
>                           int flags, size_t cluster_size, PreallocMode 
> prealloc,
> -                         QemuOpts *opts, int version,
> +                         QemuOpts *opts, int version, int refcount_order,
>                           Error **errp)
>  {
>      /* Calculate cluster_bits */
> @@ -1816,9 +1816,21 @@ static int qcow2_create2(const char *filename, int64_t 
> total_size,
>      int ret;
>  
>      if (prealloc == PREALLOC_MODE_FULL || prealloc == PREALLOC_MODE_FALLOC) {
> +        /* Note: The following calculation does not need to be exact; if it 
> is a
> +         * bit off, either some bytes will be "leaked" (which is fine) or we
> +         * will need to increase the file size by some bytes (which is fine,
> +         * too, as long as the bulk is allocated here). Therefore, using
> +         * floating point arithmetic is fine. */
>          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.;

Not objecting, but we need to be careful with floating point
calculations as the floating point state is not saved in coroutine
switches.

Kevin



reply via email to

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