On 17.05.21 08:44, Vladimir Sementsov-Ogievskiy wrote:
> Add function to change bs inside blk.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/sysemu/block-backend.h | 1 +
> block/block-backend.c | 8 ++++++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
> index 880e903293..aec05ef0a0 100644
> --- a/include/sysemu/block-backend.h
> +++ b/include/sysemu/block-backend.h
> @@ -98,6 +98,7 @@ BlockBackend *blk_by_public(BlockBackendPublic *public);
> BlockDriverState *blk_bs(BlockBackend *blk);
> void blk_remove_bs(BlockBackend *blk);
> int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp);
> +int blk_replace_bs(BlockBackend *blk, BlockDriverState *new_bs, Error **errp);
> bool bdrv_has_blk(BlockDriverState *bs);
> bool bdrv_is_root_node(BlockDriverState *bs);
> int blk_set_perm(BlockBackend *blk, uint64_t perm, uint64_t shared_perm,
> diff --git a/block/block-backend.c b/block/block-backend.c
> index de5496af66..b1abc6f3e6 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -870,6 +870,14 @@ int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp)
> return 0;
> }
>
> +/*
> + * Change BlockDriverState associated with @blk.
> + */
> +int blk_replace_bs(BlockBackend *blk, BlockDriverState *new_bs, Error **errp)
> +{
> + return bdrv_replace_child_bs(blk->root, new_bs, errp);
> +}
Reviewed-by: Max Reitz <mreitz@redhat.com>
(Looks indeed like we don’t need to do any of the things that
blk_insert_bs() and blk_remove_bs() do besides inserting and removing
the node.)