The AioContext must be unlocked before calling blk_co_unref(), because it takes the AioContext lock internally in blk_unref_bh(), which is scheduled in the main thread. If we don't unlock, the AioContext is locked twice and nested event loops such as in bdrv_graph_wrlock() will deadlock.
Cc: qemu-sta...@nongnu.org Fixes: https://issues.redhat.com/browse/RHEL-15965 Fixes: 0c7d204f50c382c6baac8c94bd57af4a022b3888 Signed-off-by: Kevin Wolf <kw...@redhat.com> --- blockdev.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blockdev.c b/blockdev.c index 4c1177e8db..c91f49e7b6 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2400,8 +2400,9 @@ void coroutine_fn qmp_block_resize(const char *device, const char *node_name, bdrv_co_lock(bs); bdrv_drained_end(bs); - blk_co_unref(blk); bdrv_co_unlock(bs); + + blk_co_unref(blk); } void qmp_block_stream(const char *job_id, const char *device, -- 2.43.0