[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
- [Qemu-devel] [RFC V7 02/32] qmp: Add DedupStatus enum., (continued)
- [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, 2013/03/15
- [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 <=
- [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
- [Qemu-devel] [RFC V7 18/32] qcow2: Extract qcow2_set_incompat_feature and qcow2_clear_incompat_feature., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 21/32] qcow2: Remove hash when cluster is deleted., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 22/32] qcow2: Add qcow2_dedup_is_running to probe if dedup is running., Benoît Canet, 2013/03/15
- [Qemu-devel] [RFC V7 20/32] qcow2: Drop hash for a given cluster when dedup makes refcount > 2^16/2., Benoît Canet, 2013/03/15