block: Add blk_next_root_bs()
This function iterates over all BDSs attached to a BB. We are going to need it when rewriting bdrv_next() so it no longer uses bdrv_states. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
262b4e8f74
commit
981f4f578e
@ -249,6 +249,30 @@ BlockBackend *blk_next(BlockBackend *blk)
|
||||
: QTAILQ_FIRST(&monitor_block_backends);
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterates over all BlockDriverStates which are attached to a BlockBackend.
|
||||
* This function is for use by bdrv_next().
|
||||
*
|
||||
* @bs must be NULL or a BDS that is attached to a BB.
|
||||
*/
|
||||
BlockDriverState *blk_next_root_bs(BlockDriverState *bs)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
|
||||
if (bs) {
|
||||
assert(bs->blk);
|
||||
blk = bs->blk;
|
||||
} else {
|
||||
blk = NULL;
|
||||
}
|
||||
|
||||
do {
|
||||
blk = blk_all_next(blk);
|
||||
} while (blk && !blk->bs);
|
||||
|
||||
return blk ? blk->bs : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a BlockBackend into the list of backends referenced by the monitor, with
|
||||
* the given @name acting as the handle for the monitor.
|
||||
|
@ -70,6 +70,7 @@ void blk_remove_all_bs(void);
|
||||
const char *blk_name(BlockBackend *blk);
|
||||
BlockBackend *blk_by_name(const char *name);
|
||||
BlockBackend *blk_next(BlockBackend *blk);
|
||||
BlockDriverState *blk_next_root_bs(BlockDriverState *bs);
|
||||
bool monitor_add_blk(BlockBackend *blk, const char *name, Error **errp);
|
||||
void monitor_remove_blk(BlockBackend *blk);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user