[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v4 13/39] qcow2: Add l2_slice_size field to BDRVQcow
From: |
Alberto Garcia |
Subject: |
[Qemu-block] [PATCH v4 13/39] qcow2: Add l2_slice_size field to BDRVQcow2State |
Date: |
Mon, 5 Feb 2018 16:33:13 +0200 |
The BDRVQcow2State structure contains an l2_size field, which stores
the number of 64-bit entries in an L2 table.
For efficiency reasons we want to be able to load slices instead of
full L2 tables, so we need to know how many entries an L2 slice can
hold.
An L2 slice is the portion of an L2 table that is loaded by the qcow2
cache. At the moment that cache can only load complete tables,
therefore an L2 slice has the same size as an L2 table (one cluster)
and l2_size == l2_slice_size.
Later we'll allow smaller slices, but until then we have to use this
new l2_slice_size field to make the rest of the code ready for that.
Signed-off-by: Alberto Garcia <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
block/qcow2.c | 3 +++
block/qcow2.h | 1 +
2 files changed, 4 insertions(+)
diff --git a/block/qcow2.c b/block/qcow2.c
index e2d4bf7ad5..78f067cae7 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -805,6 +805,7 @@ static void read_cache_sizes(BlockDriverState *bs, QemuOpts
*opts,
typedef struct Qcow2ReopenState {
Qcow2Cache *l2_table_cache;
Qcow2Cache *refcount_block_cache;
+ int l2_slice_size; /* Number of entries in a slice of the L2 table */
bool use_lazy_refcounts;
int overlap_check;
bool discard_passthrough[QCOW2_DISCARD_MAX];
@@ -886,6 +887,7 @@ static int qcow2_update_options_prepare(BlockDriverState
*bs,
}
}
+ r->l2_slice_size = s->cluster_size / sizeof(uint64_t);
r->l2_table_cache = qcow2_cache_create(bs, l2_cache_size);
r->refcount_block_cache = qcow2_cache_create(bs, refcount_cache_size);
if (r->l2_table_cache == NULL || r->refcount_block_cache == NULL) {
@@ -1049,6 +1051,7 @@ static void qcow2_update_options_commit(BlockDriverState
*bs,
}
s->l2_table_cache = r->l2_table_cache;
s->refcount_block_cache = r->refcount_block_cache;
+ s->l2_slice_size = r->l2_slice_size;
s->overlap_check = r->overlap_check;
s->use_lazy_refcounts = r->use_lazy_refcounts;
diff --git a/block/qcow2.h b/block/qcow2.h
index 0559afbc63..e0aee88811 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -251,6 +251,7 @@ typedef struct BDRVQcow2State {
int cluster_bits;
int cluster_size;
int cluster_sectors;
+ int l2_slice_size;
int l2_bits;
int l2_size;
int l1_size;
--
2.11.0
- [Qemu-block] [PATCH v4 17/39] qcow2: Update l2_allocate() to support L2 slices, (continued)
- [Qemu-block] [PATCH v4 17/39] qcow2: Update l2_allocate() to support L2 slices, Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 07/39] qcow2: Remove BDS parameter from qcow2_cache_put(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 10/39] qcow2: Remove BDS parameter from qcow2_cache_discard(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 06/39] qcow2: Remove BDS parameter from qcow2_cache_entry_mark_dirty(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 24/39] qcow2: Update discard_single_l2() to support L2 slices, Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 35/39] qcow2: Rename l2_table in count_cow_clusters(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 15/39] qcow2: Update l2_load() to support L2 slices, Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 20/39] qcow2: Update qcow2_get_cluster_offset() to support L2 slices, Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 13/39] qcow2: Add l2_slice_size field to BDRVQcow2State,
Alberto Garcia <=
- [Qemu-block] [PATCH v4 11/39] qcow2: Remove BDS parameter from qcow2_cache_is_table_offset(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 12/39] qcow2: Add offset_to_l1_index(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 03/39] qcow2: Remove BDS parameter from qcow2_cache_get_table_addr(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 01/39] qcow2: Fix documentation of get_cluster_table(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 09/39] qcow2: Remove BDS parameter from qcow2_cache_clean_unused(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 34/39] qcow2: Rename l2_table in count_contiguous_clusters_unallocated(), Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 02/39] qcow2: Add table size field to Qcow2Cache, Alberto Garcia, 2018/02/05
- [Qemu-block] [PATCH v4 37/39] iotests: Test valid values of l2-cache-entry-size, Alberto Garcia, 2018/02/05