qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC V7 12/32] qcow2: Makes qcow2_alloc_cluster_link_l2 mar


From: Benoît Canet
Subject: [Qemu-devel] [RFC V7 12/32] qcow2: Makes qcow2_alloc_cluster_link_l2 mark to deduplicate clusters.
Date: Fri, 15 Mar 2013 15:49:26 +0100

---
 block/qcow2-cluster.c |    4 +++-
 block/qcow2-dedup.c   |    6 ++++++
 block/qcow2.h         |    3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index fae4110..0d11ef0 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -1013,7 +1013,9 @@ again:
                     .nb_sectors = avail_sectors - nb_sectors,
                 },
 
-                .l2_entry_flags = QCOW_OFLAG_COPIED,
+                .l2_entry_flags = QCOW_OFLAG_COPIED |
+                                  qcow2_must_deduplicate(bs) ? 
+                                  QCOW_OFLAG_PENDING_DEDUP : 0,
                 .overwrite      = false,
             };
             qemu_co_queue_init(&(*m)->dependent_requests);
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index 819c37e..c106bd5 100644
--- a/block/qcow2-dedup.c
+++ b/block/qcow2-dedup.c
@@ -39,6 +39,12 @@ static int qcow2_dedup_read_write_hash(BlockDriverState *bs,
                                        uint64_t physical_sect,
                                        bool write);
 
+bool qcow2_must_deduplicate(BlockDriverState *bs)
+{
+    BDRVQcowState *s = bs->opaque;
+    return s->has_dedup && s->dedup_status != DEDUP_STATUS_STARTED;
+}
+
 /*
  * Grow the deduplication table
  *
diff --git a/block/qcow2.h b/block/qcow2.h
index 7979fc2..9f24b4c 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -314,6 +314,8 @@ typedef struct QCowL2Meta
 
     /* set to true if we are overwriting an L2 table entry */
     bool overwrite;
+    /* set to true if the cluster must be tagged with QCOW_OFLAG_PENDING_DEDUP 
*/
+    bool to_deduplicate;
 
     /**
      * The COW Region between the start of the first allocated cluster and the
@@ -464,6 +466,7 @@ int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache 
*c, uint64_t offset,
 int qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);
 
 /* qcow2-dedup.c functions */
+bool qcow2_must_deduplicate(BlockDriverState *bs);
 int qcow2_dedup_read_missing_and_concatenate(BlockDriverState *bs,
                                              QEMUIOVector *qiov,
                                              uint64_t sector,
-- 
1.7.10.4




reply via email to

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