qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC V6 21/33] qcow2: Drop hash for a given cluster whe


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [RFC V6 21/33] qcow2: Drop hash for a given cluster when dedup makes refcount > 2^16/2.
Date: Thu, 7 Feb 2013 11:23:47 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Feb 06, 2013 at 01:31:54PM +0100, Benoît Canet wrote:
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index a932ff6..fa2559f 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -489,6 +489,9 @@ int QEMU_WARN_UNUSED_RESULT 
> update_refcount(BlockDriverState *bs,
>              ret = -EINVAL;
>              goto fail;
>          }
> +        if (s->has_dedup && deduplication && refcount >= 0xFFFF/2) {
> +            qcow2_dedup_refcount_half_max_reached(bs, cluster_index);
> +        }

update_cluster_refcount() calls update_refcount() followed by
get_refcount().  It is not necessary to add the deduplication argument
to update_refcount and perform this check inside update_refcount().

Please either use update_cluster_refcount() or write a similar function,
then you'll get back the actual refcount value and can test it in dedup
code.

>          if (refcount == 0 && cluster_index < s->free_cluster_index) {
>              s->free_cluster_index = cluster_index;
>          }
> diff --git a/block/qcow2.h b/block/qcow2.h
> index dc378a7..f281832 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -65,6 +65,8 @@
>  #define DEFAULT_DEDUP_CLUSTER_SIZE 4096
>  
>  #define HASH_LENGTH 32
> +/* indicate that this cluster refcount has reached its maximum value */
> +#define QCOW_FLAG_HALF_MAX_REFCOUNT (1LL << 61)

Missing from the spec.



reply via email to

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