In order to support multiple caller from different thread, global inside block layer should be carefully treated. bdrv_states represent a group of bds* which is now used by qemu, so it is a user concept which should be managed by user. This series tries to move it out, so later different thread can feed the API with its own bds* group.
This is a RFC series which does not completely convert the API, the missing part is adding parameter *l in all API which uses bdrv_states, then move bdrv_states to caller. About 10 functions need to be converted, so hope to get comments before that, to see if this is the right direction. Wenchao Xia (3): 1 block: add typedef for BlockDriverState queue 2 block: add function qemu_get_bds_queue 3 block: add parameter bds queue in bdrv_invalidate_cache_all() block.c | 11 ++++++++--- include/block/block.h | 7 ++++++- migration.c | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-)