[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC V8 22/24] qcow2: Add qcow2_dedup_init and qcow2_dedup_
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [RFC V8 22/24] qcow2: Add qcow2_dedup_init and qcow2_dedup_close. |
Date: |
Thu, 20 Jun 2013 16:26:30 +0200 |
Signed-off-by: Benoit Canet <address@hidden>
---
block/qcow2-dedup.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
block/qcow2.c | 2 +-
block/qcow2.h | 2 ++
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index 606459f..5eeea38 100644
--- a/block/qcow2-dedup.c
+++ b/block/qcow2-dedup.c
@@ -716,3 +716,63 @@ void qcow2_dedup_destroy_hash(BlockDriverState *bs,
free_exit:
qemu_vfree(buf);
}
+
+int qcow2_dedup_init(BlockDriverState *bs)
+{
+ BDRVQcowState *s = bs->opaque;
+ int ret = 0;
+
+ s->has_dedup = true;
+
+ /* if we are read-only we don't init anything */
+ if (bs->read_only) {
+ return 0;
+ }
+
+ /* no need to allocate the various store's buffers since qcow2_store_load
+ * will do it
+ */
+
+ /* load and parse the configuration from disk */
+ ret = qcow2_store_load(bs, &s->key_value_store);
+
+ if (ret < 0) {
+ return ret;
+ }
+
+ /* if QEMU crashed forget everyting that was stored in the store */
+ if(s->dedup_dirty) {
+ qcow2_store_forget(bs, &s->key_value_store);
+ }
+
+ /* set the dirty bit */
+ s->dedup_dirty = true;
+ qcow2_update_header(bs);
+
+ /* load the journal and the incarnations in a coroutine */
+ return qcow2_store_start(bs, &s->key_value_store);
+}
+
+void qcow2_dedup_close(BlockDriverState *bs)
+{
+ BDRVQcowState *s = bs->opaque;
+ int ret = 0;
+
+ /* if we are read-only we don't need to cleanup */
+ if (bs->read_only) {
+ return;
+ }
+
+ ret = qcow2_store_flush(bs, &s->key_value_store);
+
+ qcow2_store_cleanup(&s->key_value_store);
+
+ /* flush failed -> leave the store dirty so it will be discard at restart
*/
+ if (ret < 0) {
+ return;
+ }
+
+ /* clear the dirty bit */
+ s->dedup_dirty = false;
+ qcow2_update_header(bs);
+}
diff --git a/block/qcow2.c b/block/qcow2.c
index ea2f0f2..f7b94dd 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1546,7 +1546,7 @@ static int qcow2_create2(const char *filename, int64_t
total_size,
goto out;
}
- qcow2_store_cleanup(bs, &s->key_value_store);
+ qcow2_store_cleanup(&s->key_value_store);
}
/* Want a backing file? There you go.*/
diff --git a/block/qcow2.h b/block/qcow2.h
index 3c6e685..b293be7 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -751,5 +751,7 @@ int qcow2_dedup_store_new_hashes(BlockDriverState *bs,
uint64_t physical_sect);
void qcow2_dedup_destroy_hash(BlockDriverState *bs,
uint64_t cluster_index);
+int qcow2_dedup_init(BlockDriverState *bs);
+void qcow2_dedup_close(BlockDriverState *bs);
#endif
--
1.7.10.4
- [Qemu-devel] [RFC V8 09/24] qcow2: Make qcow2_update_cluster_refcount public., (continued)
- [Qemu-devel] [RFC V8 09/24] qcow2: Make qcow2_update_cluster_refcount public., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 12/24] qcow2: Do allocate on rewrite on the dedup case., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 10/24] qcow2: Add qcow2_dedup and related functions, Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 11/24] qcow2: Add qcow2_dedup_store_new_hashes., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 14/24] qcow2: Load and save deduplication table header extension., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 13/24] qcow2: Implement qcow2_compute_cluster_hash., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 17/24] qcow2: Drop hash for a given cluster when dedup makes refcount > 2^16/2., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 15/24] qcow2: Extract qcow2_set_incompat_feature and qcow2_clear_incompat_feature., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 19/24] qcow2: Integrate deduplication in qcow2_co_writev loop., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 16/24] block: Add qcow2_dedup format and image creation code., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 22/24] qcow2: Add qcow2_dedup_init and qcow2_dedup_close.,
Benoît Canet <=
- [Qemu-devel] [RFC V8 21/24] qcow2: Integrate SKEIN hash algorithm in deduplication., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 23/24] qcow2: Enable the deduplication feature., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 24/24] qcow2: Enable deduplication tests, Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 18/24] qcow2: Remove hash when cluster is deleted., Benoît Canet, 2013/06/20
- [Qemu-devel] [RFC V8 20/24] qcow2: Serialize write requests when deduplication is activated., Benoît Canet, 2013/06/20