From 2c75261cc2b5d1cdd6f012d7a3ccbc089f966dcb Mon Sep 17 00:00:00 2001 From: Emanuele Giuseppe Esposito Date: Fri, 13 Jan 2023 21:42:10 +0100 Subject: block: Convert bdrv_lock_medium() to co_wrapper bdrv_lock_medium() is categorized as an I/O function, and it currently doesn't run in a coroutine. We should let it take a graph rdlock since it traverses the block nodes graph, which however is only possible in a coroutine. The only caller of this function is blk_lock_medium(). Therefore make blk_lock_medium() a co_wrapper, so that it always creates a new coroutine, and then make bdrv_lock_medium() a coroutine_fn where the lock can be taken. Signed-off-by: Emanuele Giuseppe Esposito Signed-off-by: Kevin Wolf Message-Id: <20230113204212.359076-13-kwolf@redhat.com> Reviewed-by: Emanuele Giuseppe Esposito Signed-off-by: Kevin Wolf --- block/copy-on-read.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'block/copy-on-read.c') diff --git a/block/copy-on-read.c b/block/copy-on-read.c index 4204931277..3280eb2feb 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -223,9 +223,9 @@ static void coroutine_fn cor_co_eject(BlockDriverState *bs, bool eject_flag) } -static void cor_lock_medium(BlockDriverState *bs, bool locked) +static void coroutine_fn cor_co_lock_medium(BlockDriverState *bs, bool locked) { - bdrv_lock_medium(bs->file->bs, locked); + bdrv_co_lock_medium(bs->file->bs, locked); } @@ -259,7 +259,7 @@ static BlockDriver bdrv_copy_on_read = { .bdrv_co_pwritev_compressed = cor_co_pwritev_compressed, .bdrv_co_eject = cor_co_eject, - .bdrv_lock_medium = cor_lock_medium, + .bdrv_co_lock_medium = cor_co_lock_medium, .has_variable_length = true, .is_filter = true, -- cgit v1.2.3