On Wed, Feb 06, 2013 at 01:32:00PM +0100, Benoît Canet wrote:
> Signed-off-by: Benoit Canet <ben...@irqsave.net>
> ---
>  block/qcow2-refcount.c |    9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index d7d9339..ee5de6b 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -999,7 +999,14 @@ static int check_refcounts_l2(BlockDriverState *bs, 
> BdrvCheckResult *res,
>                          PRIx64 ": %s\n", l2_entry, strerror(-refcount));
>                      goto fail;
>                  }
> -                if ((refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 
> 0)) {
> +                if (!s->has_dedup &&
> +                    (refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 
> 0)) {
> +                    fprintf(stderr, "ERROR OFLAG_COPIED: offset=%"
> +                        PRIx64 " refcount=%d\n", l2_entry, refcount);
> +                    res->corruptions++;
> +                }

Why is this warning suppressed when dedup is enabled?  The meaning of
QCOW_OFLAG_COPIED is that refcount == 1.  If this invariant is violated
then something is wrong.

> +                if (s->has_dedup && refcount > 1 &&
> +                    ((l2_entry & QCOW_OFLAG_COPIED) != 0)) {
>                      fprintf(stderr, "ERROR OFLAG_COPIED: offset=%"
>                          PRIx64 " refcount=%d\n", l2_entry, refcount);
>                      res->corruptions++;
> -- 
> 1.7.10.4
> 

Reply via email to