block: implement bdrv_new_open_driver_opts()
Add version of bdrv_new_open_driver() that supports QDict options. We'll use it in further commit. Simply add one more argument to bdrv_new_open_driver() is worse, as there are too many invocations of bdrv_new_open_driver() to update then. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Suggested-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20210920115538.264372-2-vsementsov@virtuozzo.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
d1bbd965bd
commit
621d17378a
25
block.c
25
block.c
@ -1604,16 +1604,26 @@ open_failed:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name,
|
/*
|
||||||
int flags, Error **errp)
|
* Create and open a block node.
|
||||||
|
*
|
||||||
|
* @options is a QDict of options to pass to the block drivers, or NULL for an
|
||||||
|
* empty set of options. The reference to the QDict belongs to the block layer
|
||||||
|
* after the call (even on failure), so if the caller intends to reuse the
|
||||||
|
* dictionary, it needs to use qobject_ref() before calling bdrv_open.
|
||||||
|
*/
|
||||||
|
BlockDriverState *bdrv_new_open_driver_opts(BlockDriver *drv,
|
||||||
|
const char *node_name,
|
||||||
|
QDict *options, int flags,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
bs = bdrv_new();
|
bs = bdrv_new();
|
||||||
bs->open_flags = flags;
|
bs->open_flags = flags;
|
||||||
bs->explicit_options = qdict_new();
|
bs->options = options ?: qdict_new();
|
||||||
bs->options = qdict_new();
|
bs->explicit_options = qdict_clone_shallow(bs->options);
|
||||||
bs->opaque = NULL;
|
bs->opaque = NULL;
|
||||||
|
|
||||||
update_options_from_flags(bs->options, flags);
|
update_options_from_flags(bs->options, flags);
|
||||||
@ -1631,6 +1641,13 @@ BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name,
|
|||||||
return bs;
|
return bs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create and open a block node. */
|
||||||
|
BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name,
|
||||||
|
int flags, Error **errp)
|
||||||
|
{
|
||||||
|
return bdrv_new_open_driver_opts(drv, node_name, NULL, flags, errp);
|
||||||
|
}
|
||||||
|
|
||||||
QemuOptsList bdrv_runtime_opts = {
|
QemuOptsList bdrv_runtime_opts = {
|
||||||
.name = "bdrv_common",
|
.name = "bdrv_common",
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
|
.head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
|
||||||
|
@ -383,6 +383,10 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
|
|||||||
const char *bdref_key, Error **errp);
|
const char *bdref_key, Error **errp);
|
||||||
BlockDriverState *bdrv_open(const char *filename, const char *reference,
|
BlockDriverState *bdrv_open(const char *filename, const char *reference,
|
||||||
QDict *options, int flags, Error **errp);
|
QDict *options, int flags, Error **errp);
|
||||||
|
BlockDriverState *bdrv_new_open_driver_opts(BlockDriver *drv,
|
||||||
|
const char *node_name,
|
||||||
|
QDict *options, int flags,
|
||||||
|
Error **errp);
|
||||||
BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name,
|
BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name,
|
||||||
int flags, Error **errp);
|
int flags, Error **errp);
|
||||||
BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
|
BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
|
||||||
|
Loading…
Reference in New Issue
Block a user