qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC V7 25/32] qcow2: Adapt checking of QCOW_OFLAG_COPIED f


From: Benoît Canet
Subject: [Qemu-devel] [RFC V7 25/32] qcow2: Adapt checking of QCOW_OFLAG_COPIED for dedup.
Date: Fri, 15 Mar 2013 15:49:39 +0100

Signed-off-by: Benoit Canet <address@hidden>
---
 block/qcow2-refcount.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index ffb8d3a..7a53983 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -1029,7 +1029,19 @@ 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)) {
+                /* QCOW_OFLAG_COPIED is not garanteed to be here when
+                 * refcount == 1 when dedup is enabled since it would be
+                 * too expensive to set it back everytime refcount is
+                 * decremented to 1.
+                 */
+                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++;
+                }
+                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

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