From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v5 15/17] qcow2: Add overlap structure memory size options
Date: Mon, 27 Jul 2015 21:02:24 +0200 [thread overview]
Message-ID: <1438023746-10132-16-git-send-email-mreitz@redhat.com> (raw)
In-Reply-To: <1438023746-10132-1-git-send-email-mreitz@redhat.com>
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 <mreitz@redhat.com>
---
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 d1257b1..d3f2e71 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -452,6 +452,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) "
@@ -767,8 +779,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 7f4059e..400fe52 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -93,6 +93,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.4.6
next prev parent reply other threads:[~2015-07-27 19:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-27 19:02 [Qemu-devel] [PATCH v5 00/17] qcow2: Add new overlap check functions Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 01/17] " Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 02/17] qcow2: Pull up overlap check option evaluation Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 03/17] qcow2: Create metadata list Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 04/17] qcow2/overlaps: Protect image header Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 05/17] qcow2/overlaps: Protect refcount table Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 06/17] qcow2/overlaps: Protect refcount blocks Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 07/17] qcow2/overlaps: Protect active L1 table Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 08/17] qcow2/overlaps: Protect active L2 tables Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 09/17] qcow2/overlaps: Protect snapshot table Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 10/17] qcow2/overlaps: Protect inactive L1 tables Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 11/17] qcow2/overlaps: Protect inactive L2 tables Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 12/17] qcow2: Use new metadata overlap check function Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 13/17] qcow2/overlaps: Add "memory limit reached" event Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 14/17] qcow2/overlaps: Add memory usage limit Max Reitz
2015-07-27 19:02 ` Max Reitz [this message]
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 16/17] qapi: Expose new qcow2 overlap check options Max Reitz
2015-07-27 19:02 ` [Qemu-devel] [PATCH v5 17/17] iotests: Test qcow2's overlap check memory limit Max Reitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1438023746-10132-16-git-send-email-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).