We're converting callers of bdrv_co_get_allocated_file_size() to run in coroutines because that function will be made asynchronous when called (indirectly) from the QMP dispatcher.
This function is a candidate because it calls bdrv_query_image_info() -> bdrv_co_do_query_node_info() -> bdrv_co_get_allocated_file_size(). It is safe to turn this is a coroutine because the code it calls is made up of either simple accessors and string manipulation functions [1] or it has already been determined to be safe [2]. 1) bdrv_refresh_filename(), bdrv_is_read_only(), blk_enable_write_cache(), bdrv_cow_bs(), blk_get_public(), throttle_group_get_name(), bdrv_write_threshold_get(), bdrv_query_dirty_bitmaps(), throttle_group_get_config(), bdrv_filter_or_cow_bs(), bdrv_skip_implicit_filters() 2) bdrv_co_do_query_node_info() (see previous commits); This was the only caller of bdrv_query_image_info(), so we can remove the wrapper for that function now. Signed-off-by: Fabiano Rosas <[email protected]> --- - used co_wrapper_bdrv_rdlock instead of co_wrapper --- block/qapi.c | 10 +++++----- include/block/qapi.h | 13 ++++++------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/block/qapi.c b/block/qapi.c index 5e263960a9..9a59e5606f 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -41,10 +41,10 @@ #include "qemu/qemu-print.h" #include "sysemu/block-backend.h" -BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, - BlockDriverState *bs, - bool flat, - Error **errp) +BlockDeviceInfo *coroutine_fn bdrv_co_block_device_info(BlockBackend *blk, + BlockDriverState *bs, + bool flat, + Error **errp) { ERRP_GUARD(); ImageInfo **p_image_info; @@ -152,7 +152,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, * Skip automatically inserted nodes that the user isn't aware of for * query-block (blk != NULL), but not for query-named-block-nodes */ - bdrv_query_image_info(bs, p_image_info, flat, blk != NULL, errp); + bdrv_co_query_image_info(bs, p_image_info, flat, blk != NULL, errp); if (*errp) { qapi_free_BlockDeviceInfo(info); return NULL; diff --git a/include/block/qapi.h b/include/block/qapi.h index 5f7e3a690e..9f0e957963 100644 --- a/include/block/qapi.h +++ b/include/block/qapi.h @@ -30,10 +30,12 @@ #include "block/snapshot.h" #include "qapi/qapi-types-block-core.h" -BlockDeviceInfo * GRAPH_RDLOCK -bdrv_block_device_info(BlockBackend *blk, BlockDriverState *bs, - bool flat, Error **errp); - +BlockDeviceInfo *coroutine_fn GRAPH_RDLOCK +bdrv_co_block_device_info(BlockBackend *blk, BlockDriverState *bs, bool flat, + Error **errp); +BlockDeviceInfo *co_wrapper_bdrv_rdlock +bdrv_block_device_info(BlockBackend *blk, BlockDriverState *bs, bool flat, + Error **errp); int GRAPH_RDLOCK bdrv_query_snapshot_info_list(BlockDriverState *bs, SnapshotInfoList **p_list, @@ -41,9 +43,6 @@ bdrv_query_snapshot_info_list(BlockDriverState *bs, void coroutine_fn GRAPH_RDLOCK bdrv_co_query_image_info(BlockDriverState *bs, ImageInfo **p_info, bool flat, bool skip_implicit_filters, Error **errp); -void co_wrapper_bdrv_rdlock -bdrv_query_image_info(BlockDriverState *bs, ImageInfo **p_info, bool flat, - bool skip_implicit_filters, Error **errp); void coroutine_fn GRAPH_RDLOCK bdrv_co_query_block_graph_info(BlockDriverState *bs, BlockGraphInfo **p_info, -- 2.35.3
