[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC V7 09/32] qcow2: Do allocate on rewrite on the dedup c
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [RFC V7 09/32] qcow2: Do allocate on rewrite on the dedup case. |
Date: |
Fri, 15 Mar 2013 15:49:23 +0100 |
This patch does allocate on rewrite when deduplication is on.
This get rid of the need of removing the old hash of the lookup structure
when a cluster get rewritten.
The old data is left in place and will be collected/deleted when it's cluster
will reach 0.
Signed-off-by: Benoit Canet <address@hidden>
---
block/qcow2-cluster.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 3354f39..fae4110 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -898,11 +898,17 @@ again:
cluster_offset = be64_to_cpu(l2_table[l2_index]);
+ /* If dedup is on we are always allocating wether it's a write or a
+ * rewrite. Doing this simplify a lot the rewrite cluster case since
+ * we don't need to remove the obsolete hash from the tree.
+ * Old clusters will be deleted when their refcount will reach 0.
+ */
/*
- * Check how many clusters are already allocated and don't need COW, and
how
- * many need a new allocation.
+ * Check how many clusters are already allocated and don't need COW,
+ * and how many need a new allocation.
*/
- if (qcow2_get_cluster_type(cluster_offset) == QCOW2_CLUSTER_NORMAL
+ if (!s->has_dedup &&
+ qcow2_get_cluster_type(cluster_offset) == QCOW2_CLUSTER_NORMAL
&& (cluster_offset & QCOW_OFLAG_COPIED))
{
/* We keep all QCOW_OFLAG_COPIED clusters */
@@ -931,11 +937,11 @@ again:
cluster_offset &= L2E_OFFSET_MASK;
/*
- * The L2 table isn't used any more after this. As long as the cache works
- * synchronously, it's important to release it before calling
- * do_alloc_cluster_offset, which may yield if we need to wait for another
- * request to complete. If we still had the reference, we could use up the
- * whole cache with sleeping requests.
+ * The L2 table isn't used any more after this. As long as the cache
+ * works synchronously, it's important to release it before calling
+ * do_alloc_cluster_offset, which may yield if we need to wait for
+ * another request to complete. If we still had the reference, we could
+ * use up the whole cache with sleeping requests.
*/
ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
if (ret < 0) {
--
1.7.10.4
- [Qemu-devel] [RFC V7 00/32] QCOW2 deduplication core functionality, Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 02/32] qmp: Add DedupStatus enum., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 01/32] qcow2: Add deduplication to the qcow2 specification., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 03/32] qcow2: Add deduplication structures and fields., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 04/32] qcow2: Add qcow2_de dup_read_missing_and_concatenate, Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 05/32] qcow2: Create a way to link to l2 tables when deduplicating., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 06/32] qcow2: Make qcow2_update_cluster_refcount public., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 09/32] qcow2: Do allocate on rewrite on the dedup case.,
Benoît Canet <=
- [Qemu-devel] [RFC V7 07/32] qcow2: Add qcow2_dedup and related functions, Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 08/32] qcow2: Add qcow2_dedup_store_new_hashes., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 10/32] qcow2: Implement qcow2_compute_cluster_hash., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 12/32] qcow2: Makes qcow2_alloc_cluster_link_l2 mark to deduplicate clusters., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 11/32] qcow2: Add qcow2_dedup_grow_table and use it., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 13/32] qcow2: make the deduplication forget a cluster hash when a cluster is to dedupe, Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 14/32] qcow2: Create qcow2_is_cluster_to_dedup., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 16/32] qcow2: Extract qcow2_do_table_init., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 15/32] qcow2: Load and save deduplication table header extension., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 17/32] qcow2-cache: Allow to choose table size at creation., Benoît Canet, 2013/03/15