[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 6/6] qcow2: Evaluate overlap check options
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v2 6/6] qcow2: Evaluate overlap check options |
Date: |
Thu, 10 Oct 2013 11:09:28 +0200 |
Evaluate the runtime overlap check options and set
BDRVQcowState.overlap_check appropriately.
Signed-off-by: Max Reitz <address@hidden>
---
block/qcow2.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index eb17c2a..13e34f0 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -425,6 +425,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options,
int flags,
Error *local_err = NULL;
uint64_t ext_end;
uint64_t l1_vm_state_index;
+ const char *opt_overlap_check;
+ int overlap_check_template = 0;
ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
if (ret < 0) {
@@ -688,7 +690,32 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
s->discard_passthrough[QCOW2_DISCARD_OTHER] =
qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false);
- s->overlap_check = QCOW2_OL_CACHED;
+ opt_overlap_check = qemu_opt_get(opts, "overlap-check") ?: "cached";
+ if (!strcmp(opt_overlap_check, "none")) {
+ overlap_check_template = 0;
+ } else if (!strcmp(opt_overlap_check, "constant")) {
+ overlap_check_template = QCOW2_OL_CONSTANT;
+ } else if (!strcmp(opt_overlap_check, "cached")) {
+ overlap_check_template = QCOW2_OL_CACHED;
+ } else if (!strcmp(opt_overlap_check, "all")) {
+ overlap_check_template = QCOW2_OL_ALL;
+ } else {
+ error_setg(errp, "Unsupported value '%s' for qcow2 option "
+ "'overlap-check'. Allowed are either of the following: "
+ "none, constant, cached, all", opt_overlap_check);
+ qemu_opts_del(opts);
+ ret = -EINVAL;
+ goto fail;
+ }
+
+ s->overlap_check = 0;
+ for (i = 0; i < QCOW2_OL_MAX_BITNR; i++) {
+ /* overlap-check defines a template bitmask, but every flag may be
+ * overwritten through the associated boolean option */
+ s->overlap_check |=
+ qemu_opt_get_bool(opts, overlap_bool_option_names[i],
+ overlap_check_template & (1 << i)) << i;
+ }
qemu_opts_del(opts);
--
1.8.3.1
- [Qemu-devel] [PATCH v2 0/6] Configure metadata overlap checks at runtime, Max Reitz, 2013/10/10
- [Qemu-devel] [PATCH v2 1/6] qcow2: Use negated overflow check mask, Max Reitz, 2013/10/10
- [Qemu-devel] [PATCH v2 3/6] qcow2: Add overlap-check options, Max Reitz, 2013/10/10
- [Qemu-devel] [PATCH v2 5/6] qcow2: Add more overlap check bitmask macros, Max Reitz, 2013/10/10
- [Qemu-devel] [PATCH v2 6/6] qcow2: Evaluate overlap check options,
Max Reitz <=
- [Qemu-devel] [PATCH v2 2/6] qcow2: Make overlap check mask variable, Max Reitz, 2013/10/10
- [Qemu-devel] [PATCH v2 4/6] qcow2: Array assigning options to OL check bits, Max Reitz, 2013/10/10
- Re: [Qemu-devel] [PATCH v2 0/6] Configure metadata overlap checks at runtime, Kevin Wolf, 2013/10/10