mirror of https://github.com/xqemu/xqemu.git
block: Rewrite bdrv_next()
Instead of using the bdrv_states list, iterate over all the BlockDriverStates attached to BlockBackends, and over all the monitor-owned BDSs afterwards (except for those attached to a BB). Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
981f4f578e
commit
2626058034
17
block.c
17
block.c
|
@ -2969,12 +2969,23 @@ BlockDriverState *bdrv_next_node(BlockDriverState *bs)
|
||||||
return QTAILQ_NEXT(bs, node_list);
|
return QTAILQ_NEXT(bs, node_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
|
||||||
|
* the monitor or attached to a BlockBackend */
|
||||||
BlockDriverState *bdrv_next(BlockDriverState *bs)
|
BlockDriverState *bdrv_next(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
if (!bs) {
|
if (!bs || bs->blk) {
|
||||||
return QTAILQ_FIRST(&bdrv_states);
|
bs = blk_next_root_bs(bs);
|
||||||
|
if (bs) {
|
||||||
|
return bs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QTAILQ_NEXT(bs, device_list);
|
|
||||||
|
/* Ignore all BDSs that are attached to a BlockBackend here; they have been
|
||||||
|
* handled by the above block already */
|
||||||
|
do {
|
||||||
|
bs = bdrv_next_monitor_owned(bs);
|
||||||
|
} while (bs && bs->blk);
|
||||||
|
return bs;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *bdrv_get_node_name(const BlockDriverState *bs)
|
const char *bdrv_get_node_name(const BlockDriverState *bs)
|
||||||
|
|
Loading…
Reference in New Issue