The only callers of these functions are the respective generated_co_wrapper, and they already take the lock.
Protecting bdrv_co_{check/invalidate_cache}() implies that BlockDriver->bdrv_co_{check/invalidate_cache}() is always called with graph rdlock taken. Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> --- block.c | 2 ++ include/block/block_int-common.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/block.c b/block.c index 1c870d85e6..c7611bed9e 100644 --- a/block.c +++ b/block.c @@ -5375,6 +5375,7 @@ int coroutine_fn bdrv_co_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) { IO_CODE(); + assert_bdrv_graph_readable(); if (bs->drv == NULL) { return -ENOMEDIUM; } @@ -6590,6 +6591,7 @@ int coroutine_fn bdrv_co_invalidate_cache(BlockDriverState *bs, Error **errp) IO_CODE(); assert(!(bs->open_flags & BDRV_O_INACTIVE)); + assert_bdrv_graph_readable(); if (bs->drv->bdrv_co_invalidate_cache) { bs->drv->bdrv_co_invalidate_cache(bs, &local_err); diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h index d666b0c441..f285a6b8f7 100644 --- a/include/block/block_int-common.h +++ b/include/block/block_int-common.h @@ -641,6 +641,7 @@ struct BlockDriver { /* * Invalidate any cached meta-data. + * Called with graph rdlock held. */ void coroutine_fn (*bdrv_co_invalidate_cache)(BlockDriverState *bs, Error **errp); @@ -726,6 +727,7 @@ struct BlockDriver { /* * Returns 0 for completed check, -errno for internal errors. * The check results are stored in result. + * Called with graph rdlock held. */ int coroutine_fn (*bdrv_co_check)(BlockDriverState *bs, BdrvCheckResult *result, -- 2.31.1