mirror of https://github.com/xemu-project/xemu.git
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 "
|
||||
"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,
|
||||
.type = QEMU_OPT_BOOL,
|
||||
|
@ -542,7 +548,7 @@ 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;
|
||||
const char *opt_overlap_check, *opt_overlap_check_template;
|
||||
int overlap_check_template = 0;
|
||||
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] =
|
||||
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")) {
|
||||
overlap_check_template = 0;
|
||||
} else if (!strcmp(opt_overlap_check, "constant")) {
|
||||
|
|
|
@ -83,6 +83,7 @@
|
|||
#define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot"
|
||||
#define QCOW2_OPT_DISCARD_OTHER "pass-discard-other"
|
||||
#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_ACTIVE_L1 "overlap-check.active-l1"
|
||||
#define QCOW2_OPT_OVERLAP_ACTIVE_L2 "overlap-check.active-l2"
|
||||
|
|
Loading…
Reference in New Issue