diff mbox

[RFC,V2,18/20] qcow2: Add method to destroy the deduplication red black tree.

Message ID 1350489629-1838-19-git-send-email-benoit@irqsave.net
State New
Headers show

Commit Message

BenoƮt Canet Oct. 17, 2012, 4 p.m. UTC
---
 block/qcow2-dedup.c |   16 ++++++++++++++++
 block/qcow2.h       |    1 +
 2 files changed, 17 insertions(+)
diff mbox

Patch

diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index 72fab64..60e93fe 100644
--- a/block/qcow2-dedup.c
+++ b/block/qcow2-dedup.c
@@ -680,6 +680,22 @@  void coroutine_fn qcow2_co_load_dedup_hashes(void *opaque)
 }
 
 /*
+ * This function walk in the red black tree remove the elements and free them.
+ */
+void qcow2_dedup_destroy_rb_tree(BlockDriverState *bs)
+{
+    BDRVQcowState *s = bs->opaque;
+
+    while (!RB_EMPTY_ROOT(&s->dedup_rb_tree)) {
+        QCowHashNode *data =
+            rb_entry(s->dedup_rb_tree.rb_node, QCowHashNode, node);
+        rb_erase(&data->node, &s->dedup_rb_tree);
+        g_free(data->hash);
+        g_free(data);
+    }
+}
+
+/*
  * Save the dedup table information into the header extensions
  *
  * @table_offset: the dedup table offset in the QCOW2 file
diff --git a/block/qcow2.h b/block/qcow2.h
index 0b999fb..1d629a7 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -390,6 +390,7 @@  int qcow2_dedup_write_new_hashes(BlockDriverState *bs,
                                  int count);
 void coroutine_fn qcow2_co_load_dedup_hashes(void *opaque);
 void qcow2_dedup_start_loading_hashes(BlockDriverState *bs);
+void qcow2_dedup_destroy_rb_tree(BlockDriverState *bs);
 int qcow2_dedup_grow_table(BlockDriverState *bs,
                            int min_size,
                            bool exact_size);