[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC V4 13/30] qcow2: Extract qcow2_do_table_init.
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [RFC V4 13/30] qcow2: Extract qcow2_do_table_init. |
Date: |
Wed, 2 Jan 2013 17:16:16 +0100 |
Signed-off-by: Benoit Canet <address@hidden>
---
block/qcow2-refcount.c | 43 ++++++++++++++++++++++++++++++-------------
block/qcow2.h | 5 +++++
2 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index e014b0e..75c2bde 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -31,27 +31,44 @@ static int64_t alloc_clusters_noref(BlockDriverState *bs,
int64_t size);
/*********************************************************/
/* refcount handling */
-int qcow2_refcount_init(BlockDriverState *bs)
+int qcow2_do_table_init(BlockDriverState *bs,
+ uint64_t **table,
+ int64_t offset,
+ int size,
+ bool is_refcount)
{
- BDRVQcowState *s = bs->opaque;
- int ret, refcount_table_size2, i;
-
- refcount_table_size2 = s->refcount_table_size * sizeof(uint64_t);
- s->refcount_table = g_malloc(refcount_table_size2);
- if (s->refcount_table_size > 0) {
- BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD);
- ret = bdrv_pread(bs->file, s->refcount_table_offset,
- s->refcount_table, refcount_table_size2);
- if (ret != refcount_table_size2)
+ int ret, size2, i;
+
+ size2 = size * sizeof(uint64_t);
+ *table = g_malloc(size2);
+ if (size > 0) {
+ if (is_refcount) {
+ BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD);
+ }
+ ret = bdrv_pread(bs->file, offset,
+ *table, size2);
+ if (ret != size2) {
goto fail;
- for(i = 0; i < s->refcount_table_size; i++)
- be64_to_cpus(&s->refcount_table[i]);
+ }
+ for (i = 0; i < size; i++) {
+ be64_to_cpus(&(*table)[i]);
+ }
}
return 0;
fail:
return -ENOMEM;
}
+int qcow2_refcount_init(BlockDriverState *bs)
+{
+ BDRVQcowState *s = bs->opaque;
+ return qcow2_do_table_init(bs,
+ &s->refcount_table,
+ s->refcount_table_offset,
+ s->refcount_table_size,
+ true);
+}
+
void qcow2_refcount_close(BlockDriverState *bs)
{
BDRVQcowState *s = bs->opaque;
diff --git a/block/qcow2.h b/block/qcow2.h
index 5cbfc82..9add0f1 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -376,6 +376,11 @@ int qcow2_read_cluster_data(BlockDriverState *bs,
int nb_sectors);
/* qcow2-refcount.c functions */
+int qcow2_do_table_init(BlockDriverState *bs,
+ uint64_t **table,
+ int64_t offset,
+ int size,
+ bool is_refcount);
int qcow2_refcount_init(BlockDriverState *bs);
void qcow2_refcount_close(BlockDriverState *bs);
--
1.7.10.4
- [Qemu-devel] [RFC V4 22/30] qcow2: Adapt checking of QCOW_OFLAG_COPIED for dedup., (continued)
- [Qemu-devel] [RFC V4 22/30] qcow2: Adapt checking of QCOW_OFLAG_COPIED for dedup., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 28/30] qcow: Set dedup cluster block size to 64KB., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 27/30] qcow2: Use large L2 table for deduplication., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 12/30] qcow2: Load and save deduplication table header extension., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 16/30] qcow2: Extract qcow2_add_feature and qcow2_remove_feature., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 06/30] qcow2: Add qcow2_dedup and related functions, Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 26/30] qcow2: Add lazy refcounts to deduplication to prevent qcow2_cache_set_dependency loops, Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 18/30] qcow2: Behave correctly when refcount reach 0 or 2^16., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 11/30] qcow2: create function to load deduplication hashes at startup., Benoît Canet, 2013/01/02
- [Qemu-devel] [RFC V4 13/30] qcow2: Extract qcow2_do_table_init.,
Benoît Canet <=
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Troy Benjegerdes, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Benoît Canet, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Troy Benjegerdes, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Benoît Canet, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, ronnie sahlberg, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Benoît Canet, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, Troy Benjegerdes, 2013/01/02
- Re: [Qemu-devel] [RFC V4 00/30] QCOW2 deduplication, ronnie sahlberg, 2013/01/02