diff options
author | Kevin Wolf <kwolf@redhat.com> | 2015-06-15 13:24:19 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2015-07-14 17:15:18 +0200 |
commit | b4b059f628173dd1d722ee8a9c592a80aec1fc2f (patch) | |
tree | f50190479725ab2dce518cdfc432b7b0e0b43b57 /include/block | |
parent | df5817926790f6e84d1936eab523556f96fa577a (diff) |
block: Introduce bdrv_open_child()
It is the same as bdrv_open_image(), except that it doesn't only return
success or failure, but the newly created BdrvChild object for the new
child node.
As the BdrvChild object already contains a BlockDriverState pointer (and
this is supposed to become the only pointer so that bdrv_append() and
friends can just change a single pointer in BdrvChild), the pbs
parameter is removed for bdrv_open_child().
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'include/block')
-rw-r--r-- | include/block/block.h | 6 | ||||
-rw-r--r-- | include/block/block_int.h | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/include/block/block.h b/include/block/block.h index 06e4137008..50487726f5 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -12,6 +12,7 @@ /* block.c */ typedef struct BlockDriver BlockDriver; typedef struct BlockJob BlockJob; +typedef struct BdrvChild BdrvChild; typedef struct BdrvChildRole BdrvChildRole; typedef struct BlockDriverInfo { @@ -208,6 +209,11 @@ int bdrv_open_image(BlockDriverState **pbs, const char *filename, QDict *options, const char *bdref_key, BlockDriverState* parent, const BdrvChildRole *child_role, bool allow_none, Error **errp); +BdrvChild *bdrv_open_child(const char *filename, + QDict *options, const char *bdref_key, + BlockDriverState* parent, + const BdrvChildRole *child_role, + bool allow_none, Error **errp); void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd); int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp); int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp); diff --git a/include/block/block_int.h b/include/block/block_int.h index 8996baf2f0..ec244b5d06 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -335,11 +335,11 @@ struct BdrvChildRole { extern const BdrvChildRole child_file; extern const BdrvChildRole child_format; -typedef struct BdrvChild { +struct BdrvChild { BlockDriverState *bs; const BdrvChildRole *role; QLIST_ENTRY(BdrvChild) next; -} BdrvChild; +}; /* * Note: the function bdrv_append() copies and swaps contents of |