mirror of https://github.com/xemu-project/xemu.git
block: Add functions for inheriting a BBRS
In order to open a BDS which inherits a BB's root state, blk_get_open_flags_from_root_state() is used to inquire the flags to be passed to bdrv_open(), and blk_apply_root_state() is used to apply the remaining state after the BDS has been opened. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
c69a4dd899
commit
38cb18f5b7
|
@ -1239,6 +1239,33 @@ void blk_update_root_state(BlockBackend *blk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Applies the information in the root state to the given BlockDriverState. This
|
||||||
|
* does not include the flags which have to be specified for bdrv_open(), use
|
||||||
|
* blk_get_open_flags_from_root_state() to inquire them.
|
||||||
|
*/
|
||||||
|
void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs)
|
||||||
|
{
|
||||||
|
bs->detect_zeroes = blk->root_state.detect_zeroes;
|
||||||
|
if (blk->root_state.throttle_group) {
|
||||||
|
bdrv_io_limits_enable(bs, blk->root_state.throttle_group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the flags to be used for bdrv_open() of a BlockDriverState which is
|
||||||
|
* supposed to inherit the root state.
|
||||||
|
*/
|
||||||
|
int blk_get_open_flags_from_root_state(BlockBackend *blk)
|
||||||
|
{
|
||||||
|
int bs_flags;
|
||||||
|
|
||||||
|
bs_flags = blk->root_state.read_only ? 0 : BDRV_O_RDWR;
|
||||||
|
bs_flags |= blk->root_state.open_flags & ~BDRV_O_RDWR;
|
||||||
|
|
||||||
|
return bs_flags;
|
||||||
|
}
|
||||||
|
|
||||||
BlockBackendRootState *blk_get_root_state(BlockBackend *blk)
|
BlockBackendRootState *blk_get_root_state(BlockBackend *blk)
|
||||||
{
|
{
|
||||||
return &blk->root_state;
|
return &blk->root_state;
|
||||||
|
|
|
@ -167,6 +167,8 @@ void blk_io_unplug(BlockBackend *blk);
|
||||||
BlockAcctStats *blk_get_stats(BlockBackend *blk);
|
BlockAcctStats *blk_get_stats(BlockBackend *blk);
|
||||||
BlockBackendRootState *blk_get_root_state(BlockBackend *blk);
|
BlockBackendRootState *blk_get_root_state(BlockBackend *blk);
|
||||||
void blk_update_root_state(BlockBackend *blk);
|
void blk_update_root_state(BlockBackend *blk);
|
||||||
|
void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs);
|
||||||
|
int blk_get_open_flags_from_root_state(BlockBackend *blk);
|
||||||
|
|
||||||
void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
|
void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
|
||||||
BlockCompletionFunc *cb, void *opaque);
|
BlockCompletionFunc *cb, void *opaque);
|
||||||
|
|
Loading…
Reference in New Issue