mirror of https://github.com/xemu-project/xemu.git
block: Factor out bdrv_open_child_bs()
This is the part of bdrv_open_child() that opens a BDS with option inheritance, but doesn't attach it as a child to the parent yet. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
4e4bf5c42c
commit
2d6b86af14
61
block.c
61
block.c
|
@ -1546,28 +1546,12 @@ free_exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static BlockDriverState *
|
||||||
* Opens a disk image whose options are given as BlockdevRef in another block
|
bdrv_open_child_bs(const char *filename, QDict *options, const char *bdref_key,
|
||||||
* device's options.
|
BlockDriverState *parent, const BdrvChildRole *child_role,
|
||||||
*
|
bool allow_none, Error **errp)
|
||||||
* If allow_none is true, no image will be opened if filename is false and no
|
|
||||||
* BlockdevRef is given. NULL will be returned, but errp remains unset.
|
|
||||||
*
|
|
||||||
* bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
|
|
||||||
* That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
|
|
||||||
* itself, all options starting with "${bdref_key}." are considered part of the
|
|
||||||
* BlockdevRef.
|
|
||||||
*
|
|
||||||
* The BlockdevRef will be removed from the options QDict.
|
|
||||||
*/
|
|
||||||
BdrvChild *bdrv_open_child(const char *filename,
|
|
||||||
QDict *options, const char *bdref_key,
|
|
||||||
BlockDriverState* parent,
|
|
||||||
const BdrvChildRole *child_role,
|
|
||||||
bool allow_none, Error **errp)
|
|
||||||
{
|
{
|
||||||
BdrvChild *c = NULL;
|
BlockDriverState *bs = NULL;
|
||||||
BlockDriverState *bs;
|
|
||||||
QDict *image_options;
|
QDict *image_options;
|
||||||
char *bdref_key_dot;
|
char *bdref_key_dot;
|
||||||
const char *reference;
|
const char *reference;
|
||||||
|
@ -1594,11 +1578,40 @@ BdrvChild *bdrv_open_child(const char *filename,
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
c = bdrv_attach_child(parent, bs, bdref_key, child_role);
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
qdict_del(options, bdref_key);
|
qdict_del(options, bdref_key);
|
||||||
return c;
|
return bs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Opens a disk image whose options are given as BlockdevRef in another block
|
||||||
|
* device's options.
|
||||||
|
*
|
||||||
|
* If allow_none is true, no image will be opened if filename is false and no
|
||||||
|
* BlockdevRef is given. NULL will be returned, but errp remains unset.
|
||||||
|
*
|
||||||
|
* bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
|
||||||
|
* That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
|
||||||
|
* itself, all options starting with "${bdref_key}." are considered part of the
|
||||||
|
* BlockdevRef.
|
||||||
|
*
|
||||||
|
* The BlockdevRef will be removed from the options QDict.
|
||||||
|
*/
|
||||||
|
BdrvChild *bdrv_open_child(const char *filename,
|
||||||
|
QDict *options, const char *bdref_key,
|
||||||
|
BlockDriverState *parent,
|
||||||
|
const BdrvChildRole *child_role,
|
||||||
|
bool allow_none, Error **errp)
|
||||||
|
{
|
||||||
|
BlockDriverState *bs;
|
||||||
|
|
||||||
|
bs = bdrv_open_child_bs(filename, options, bdref_key, parent, child_role,
|
||||||
|
allow_none, errp);
|
||||||
|
if (bs == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bdrv_attach_child(parent, bs, bdref_key, child_role);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs,
|
static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs,
|
||||||
|
|
Loading…
Reference in New Issue