mirror of https://github.com/xemu-project/xemu.git
block: Add, parse and store "force-share" option
Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
5176196c32
commit
5a9347c673
17
block.c
17
block.c
|
@ -800,6 +800,7 @@ static void bdrv_inherited_options(int *child_flags, QDict *child_options,
|
|||
* the parent. */
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_FORCE_SHARE);
|
||||
|
||||
/* Inherit the read-only option from the parent if it's not set */
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_READ_ONLY);
|
||||
|
@ -908,6 +909,7 @@ static void bdrv_backing_options(int *child_flags, QDict *child_options,
|
|||
* which is only applied on the top level (BlockBackend) */
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
|
||||
qdict_copy_default(child_options, parent_options, BDRV_OPT_FORCE_SHARE);
|
||||
|
||||
/* backing files always opened read-only */
|
||||
qdict_set_default_str(child_options, BDRV_OPT_READ_ONLY, "on");
|
||||
|
@ -1150,6 +1152,11 @@ QemuOptsList bdrv_runtime_opts = {
|
|||
.type = QEMU_OPT_STRING,
|
||||
.help = "discard operation (ignore/off, unmap/on)",
|
||||
},
|
||||
{
|
||||
.name = BDRV_OPT_FORCE_SHARE,
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "always accept other writers (default: off)",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
@ -1189,6 +1196,16 @@ static int bdrv_open_common(BlockDriverState *bs, BlockBackend *file,
|
|||
drv = bdrv_find_format(driver_name);
|
||||
assert(drv != NULL);
|
||||
|
||||
bs->force_share = qemu_opt_get_bool(opts, BDRV_OPT_FORCE_SHARE, false);
|
||||
|
||||
if (bs->force_share && (bs->open_flags & BDRV_O_RDWR)) {
|
||||
error_setg(errp,
|
||||
BDRV_OPT_FORCE_SHARE
|
||||
"=on can only be used with read-only images");
|
||||
ret = -EINVAL;
|
||||
goto fail_opts;
|
||||
}
|
||||
|
||||
if (file != NULL) {
|
||||
filename = blk_bs(file)->filename;
|
||||
} else {
|
||||
|
|
|
@ -109,6 +109,7 @@ typedef struct HDGeometry {
|
|||
#define BDRV_OPT_CACHE_NO_FLUSH "cache.no-flush"
|
||||
#define BDRV_OPT_READ_ONLY "read-only"
|
||||
#define BDRV_OPT_DISCARD "discard"
|
||||
#define BDRV_OPT_FORCE_SHARE "force-share"
|
||||
|
||||
|
||||
#define BDRV_SECTOR_BITS 9
|
||||
|
|
|
@ -518,6 +518,7 @@ struct BlockDriverState {
|
|||
bool valid_key; /* if true, a valid encryption key has been set */
|
||||
bool sg; /* if true, the device is a /dev/sg* */
|
||||
bool probed; /* if true, format was probed rather than specified */
|
||||
bool force_share; /* if true, always allow all shared permissions */
|
||||
|
||||
BlockDriver *drv; /* NULL means no media */
|
||||
void *opaque;
|
||||
|
|
|
@ -2898,6 +2898,8 @@
|
|||
# (default: false)
|
||||
# @detect-zeroes: detect and optimize zero writes (Since 2.1)
|
||||
# (default: off)
|
||||
# @force-share: force share all permission on added nodes.
|
||||
# Requires read-only=true. (Since 2.10)
|
||||
#
|
||||
# Remaining options are determined by the block driver.
|
||||
#
|
||||
|
@ -2909,6 +2911,7 @@
|
|||
'*discard': 'BlockdevDiscardOptions',
|
||||
'*cache': 'BlockdevCacheOptions',
|
||||
'*read-only': 'bool',
|
||||
'*force-share': 'bool',
|
||||
'*detect-zeroes': 'BlockdevDetectZeroesOptions' },
|
||||
'discriminator': 'driver',
|
||||
'data': {
|
||||
|
|
Loading…
Reference in New Issue