file-win32: Fix "locking" option
The intended behaviour was that locking=off/auto work and have no effect (to remain compatible with file-posix), whereas locking=on would return an error. Unfortunately, the code forgot to remove "locking" from the options QDict, so any attempt to use the option would fail. Replace the option parsing code for "locking" with something that is part of the raw_runtime_opts QemuOptsList (so it is properly removed from the QDict) and looks more like file-posix. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200907092739.9988-1-kwolf@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b1cbc33a39
commit
3b079ac0ff
@ -299,6 +299,11 @@ static QemuOptsList raw_runtime_opts = {
|
|||||||
.type = QEMU_OPT_STRING,
|
.type = QEMU_OPT_STRING,
|
||||||
.help = "host AIO implementation (threads, native)",
|
.help = "host AIO implementation (threads, native)",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "locking",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "file locking mode (on/off/auto, default: auto)",
|
||||||
|
},
|
||||||
{ /* end of list */ }
|
{ /* end of list */ }
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -333,6 +338,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
|
|||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
const char *filename;
|
const char *filename;
|
||||||
bool use_aio;
|
bool use_aio;
|
||||||
|
OnOffAuto locking;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
s->type = FTYPE_FILE;
|
s->type = FTYPE_FILE;
|
||||||
@ -343,10 +349,24 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qdict_get_try_bool(options, "locking", false)) {
|
locking = qapi_enum_parse(&OnOffAuto_lookup,
|
||||||
|
qemu_opt_get(opts, "locking"),
|
||||||
|
ON_OFF_AUTO_AUTO, &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
switch (locking) {
|
||||||
|
case ON_OFF_AUTO_ON:
|
||||||
error_setg(errp, "locking=on is not supported on Windows");
|
error_setg(errp, "locking=on is not supported on Windows");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
case ON_OFF_AUTO_OFF:
|
||||||
|
case ON_OFF_AUTO_AUTO:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = qemu_opt_get(opts, "filename");
|
filename = qemu_opt_get(opts, "filename");
|
||||||
|
Loading…
Reference in New Issue
Block a user