qcow2: Add overlap-check.template option
Being able to set the overlap-check option to a string and then refine it via the overlap-check.* options is a nice idea for the command line but does not work so well for non-flattened dicts. In that case, one can only specify either but not both, so add a field to overlap-check.* which does the same as directly specifying overlap-check but can be used in conjunction with the other fields in non-flattened dicts. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 1408557576-14574-4-git-send-email-mreitz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
e775ba7721
commit
ee42b5ce0b
@ -405,6 +405,12 @@ static QemuOptsList qcow2_runtime_opts = {
|
|||||||
.help = "Selects which overlap checks to perform from a range of "
|
.help = "Selects which overlap checks to perform from a range of "
|
||||||
"templates (none, constant, cached, all)",
|
"templates (none, constant, cached, all)",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = QCOW2_OPT_OVERLAP_TEMPLATE,
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Selects which overlap checks to perform from a range of "
|
||||||
|
"templates (none, constant, cached, all)",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = QCOW2_OPT_OVERLAP_MAIN_HEADER,
|
.name = QCOW2_OPT_OVERLAP_MAIN_HEADER,
|
||||||
.type = QEMU_OPT_BOOL,
|
.type = QEMU_OPT_BOOL,
|
||||||
@ -542,7 +548,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
|
|||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
uint64_t ext_end;
|
uint64_t ext_end;
|
||||||
uint64_t l1_vm_state_index;
|
uint64_t l1_vm_state_index;
|
||||||
const char *opt_overlap_check;
|
const char *opt_overlap_check, *opt_overlap_check_template;
|
||||||
int overlap_check_template = 0;
|
int overlap_check_template = 0;
|
||||||
uint64_t l2_cache_size, refcount_cache_size;
|
uint64_t l2_cache_size, refcount_cache_size;
|
||||||
|
|
||||||
@ -922,7 +928,21 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
|
|||||||
s->discard_passthrough[QCOW2_DISCARD_OTHER] =
|
s->discard_passthrough[QCOW2_DISCARD_OTHER] =
|
||||||
qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false);
|
qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false);
|
||||||
|
|
||||||
opt_overlap_check = qemu_opt_get(opts, "overlap-check") ?: "cached";
|
opt_overlap_check = qemu_opt_get(opts, QCOW2_OPT_OVERLAP);
|
||||||
|
opt_overlap_check_template = qemu_opt_get(opts, QCOW2_OPT_OVERLAP_TEMPLATE);
|
||||||
|
if (opt_overlap_check_template && opt_overlap_check &&
|
||||||
|
strcmp(opt_overlap_check_template, opt_overlap_check))
|
||||||
|
{
|
||||||
|
error_setg(errp, "Conflicting values for qcow2 options '"
|
||||||
|
QCOW2_OPT_OVERLAP "' ('%s') and '" QCOW2_OPT_OVERLAP_TEMPLATE
|
||||||
|
"' ('%s')", opt_overlap_check, opt_overlap_check_template);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (!opt_overlap_check) {
|
||||||
|
opt_overlap_check = opt_overlap_check_template ?: "cached";
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(opt_overlap_check, "none")) {
|
if (!strcmp(opt_overlap_check, "none")) {
|
||||||
overlap_check_template = 0;
|
overlap_check_template = 0;
|
||||||
} else if (!strcmp(opt_overlap_check, "constant")) {
|
} else if (!strcmp(opt_overlap_check, "constant")) {
|
||||||
|
@ -83,6 +83,7 @@
|
|||||||
#define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot"
|
#define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot"
|
||||||
#define QCOW2_OPT_DISCARD_OTHER "pass-discard-other"
|
#define QCOW2_OPT_DISCARD_OTHER "pass-discard-other"
|
||||||
#define QCOW2_OPT_OVERLAP "overlap-check"
|
#define QCOW2_OPT_OVERLAP "overlap-check"
|
||||||
|
#define QCOW2_OPT_OVERLAP_TEMPLATE "overlap-check.template"
|
||||||
#define QCOW2_OPT_OVERLAP_MAIN_HEADER "overlap-check.main-header"
|
#define QCOW2_OPT_OVERLAP_MAIN_HEADER "overlap-check.main-header"
|
||||||
#define QCOW2_OPT_OVERLAP_ACTIVE_L1 "overlap-check.active-l1"
|
#define QCOW2_OPT_OVERLAP_ACTIVE_L1 "overlap-check.active-l1"
|
||||||
#define QCOW2_OPT_OVERLAP_ACTIVE_L2 "overlap-check.active-l2"
|
#define QCOW2_OPT_OVERLAP_ACTIVE_L2 "overlap-check.active-l2"
|
||||||
|
Loading…
Reference in New Issue
Block a user