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 >