[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v4 15/17] qcow2: Add overlap structure memory size o
From: |
Max Reitz |
Subject: |
[Qemu-block] [PATCH v4 15/17] qcow2: Add overlap structure memory size options |
Date: |
Mon, 4 May 2015 21:15:51 +0200 |
Add runtime options to qcow2 to control the size of the structures used
for metadata overlap prevention (one option to control the size of the
bitmap cache, another one to control the total memory size limit).
Signed-off-by: Max Reitz <address@hidden>
---
block/qcow2.c | 35 +++++++++++++++++++++++++++++++++--
block/qcow2.h | 2 ++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index fbf4d6f..1d0900d 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -453,6 +453,18 @@ static QemuOptsList qcow2_runtime_opts = {
.help = "Check for unintended writes into an inactive L2 table",
},
{
+ .name = QCOW2_OPT_OVERLAP_BITMAP_SIZE,
+ .type = QEMU_OPT_SIZE,
+ .help = "Size for the bitmap cache used by the metadata overlap "
+ "check",
+ },
+ {
+ .name = QCOW2_OPT_OVERLAP_TOTAL_SIZE_LIMIT,
+ .type = QEMU_OPT_SIZE,
+ .help = "Maximum total memory size to be used for the metadata "
+ "overlap check structures",
+ },
+ {
.name = QCOW2_OPT_CACHE_SIZE,
.type = QEMU_OPT_SIZE,
.help = "Maximum combined metadata (L2 tables and refcount blocks)
"
@@ -759,8 +771,27 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
s->cluster_offset_mask = (1LL << s->csize_shift) - 1;
if (s->overlap_check) {
- /* TODO: Let the user override this default */
- ret = qcow2_create_empty_metadata_list(bs, 65536, SIZE_MAX, errp);
+ uint64_t cache_size, total_size;
+
+ cache_size = qemu_opt_get_size(opts, QCOW2_OPT_OVERLAP_BITMAP_SIZE,
+ 65536);
+ if (cache_size > SIZE_MAX) {
+ error_setg(errp, "qcow2 option '" QCOW2_OPT_OVERLAP_BITMAP_SIZE
+ "' expects an argument less or equal to %zu", SIZE_MAX);
+ ret = -EINVAL;
+ goto fail;
+ }
+
+ total_size = qemu_opt_get_size(opts,
QCOW2_OPT_OVERLAP_TOTAL_SIZE_LIMIT,
+ SIZE_MAX);
+ if (total_size > SIZE_MAX) {
+ error_setg(errp, "qcow2 option '"
QCOW2_OPT_OVERLAP_TOTAL_SIZE_LIMIT
+ "' expects an argument less or equal to %zu", SIZE_MAX);
+ ret = -EINVAL;
+ goto fail;
+ }
+
+ ret = qcow2_create_empty_metadata_list(bs, cache_size, total_size,
errp);
if (ret < 0) {
goto fail;
}
diff --git a/block/qcow2.h b/block/qcow2.h
index cbb932a..6cb024c 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -90,6 +90,8 @@
#define QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE "overlap-check.snapshot-table"
#define QCOW2_OPT_OVERLAP_INACTIVE_L1 "overlap-check.inactive-l1"
#define QCOW2_OPT_OVERLAP_INACTIVE_L2 "overlap-check.inactive-l2"
+#define QCOW2_OPT_OVERLAP_BITMAP_SIZE "overlap-structures.bitmap-size"
+#define QCOW2_OPT_OVERLAP_TOTAL_SIZE_LIMIT
"overlap-structures.total-size-limit"
#define QCOW2_OPT_CACHE_SIZE "cache-size"
#define QCOW2_OPT_L2_CACHE_SIZE "l2-cache-size"
#define QCOW2_OPT_REFCOUNT_CACHE_SIZE "refcount-cache-size"
--
2.3.7
- [Qemu-block] [PATCH v4 06/17] qcow2/overlaps: Protect refcount blocks, (continued)
- [Qemu-block] [PATCH v4 06/17] qcow2/overlaps: Protect refcount blocks, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 07/17] qcow2/overlaps: Protect active L1 table, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 08/17] qcow2/overlaps: Protect active L2 tables, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 09/17] qcow2/overlaps: Protect snapshot table, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 10/17] qcow2/overlaps: Protect inactive L1 tables, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 11/17] qcow2/overlaps: Protect inactive L2 tables, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 12/17] qcow2: Use new metadata overlap check function, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 13/17] qcow2/overlaps: Add "memory limit reached" event, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 15/17] qcow2: Add overlap structure memory size options,
Max Reitz <=
- [Qemu-block] [PATCH v4 14/17] qcow2/overlaps: Add memory usage limit, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 16/17] qapi: Expose new qcow2 overlap check options, Max Reitz, 2015/05/04
- [Qemu-block] [PATCH v4 17/17] iotests: Test qcow2's overlap check memory limit, Max Reitz, 2015/05/04