qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC V6 14/33] qcow2: Create qcow2_is_cluster_to_dedup.


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [RFC V6 14/33] qcow2: Create qcow2_is_cluster_to_dedup.
Date: Thu, 7 Feb 2013 10:53:39 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Feb 06, 2013 at 01:31:47PM +0100, Benoît Canet wrote:
> diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
> index 5b1d20d..fedcf57 100644
> --- a/block/qcow2-cluster.c
> +++ b/block/qcow2-cluster.c
> @@ -514,6 +514,58 @@ out:
>      return ret;
>  }
>  
> +/* Check if a cluster is to deduplicate given it's index

s/it's/its/

> + *
> + * @index:         The logical index of the cluster starting from 0
> + * @physical_sect: The physical sector of the cluster as return value
> + * @err:           0 on success, negative on error
> + * @ret:           True if the cluster is to deduplicate else false
> + */
> +bool qcow2_is_cluster_to_dedup(BlockDriverState *bs,
> +                               uint64_t index,
> +                               uint64_t *physical_sect,
> +                               int *err)
> +{
> +    BDRVQcowState *s = bs->opaque;
> +    unsigned int l1_index, l2_index;
> +    uint64_t offset;
> +    uint64_t l2_offset;
> +    uint64_t *l2_table = NULL;
> +
> +    *physical_sect = 0;
> +    *err = 0;
> +
> +    l1_index = index >> s->l2_bits;
> +
> +    if (l1_index >= s->l1_size) {
> +        return false;
> +    }
> +
> +    /* no l1 entry */
> +    if (!(s->l1_table[l1_index] & QCOW_OFLAG_COPIED)) {
> +        return false;
> +    }

Why check QCOW_OFLAG_COPIED?  Try this from qcow2_get_cluster_offset():

  l2_offset = s->l1_table[l1_index] & L1E_OFFSET_MASK;
  if (!l2_offset) {
      ret = QCOW2_CLUSTER_UNALLOCATED;
      goto out;
  }



reply via email to

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