From e462c6d27d0175a67cd373b3027ea5276d25dd4e Mon Sep 17 00:00:00 2001 From: Fiona Ebner Date: Thu, 19 Oct 2023 15:19:35 +0200 Subject: [PATCH] block: avoid potential deadlock during bdrv_graph_wrlock() in bdrv_close() by passing the BlockDriverState along, so the held AioContext can be dropped before polling. See commit 31b2ddfea3 ("graph-lock: Unlock the AioContext while polling") which introduced this functionality for more information. The only way to reach bdrv_close() is via bdrv_unref() and for calling that the BlockDriverState's AioContext lock is supposed to be held. Signed-off-by: Fiona Ebner Message-ID: <20231019131936.414246-3-f.ebner@proxmox.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block.c b/block.c index f9cf05ddcf..a527aa1a4c 100644 --- a/block.c +++ b/block.c @@ -5200,7 +5200,7 @@ static void bdrv_close(BlockDriverState *bs) bs->drv = NULL; } - bdrv_graph_wrlock(NULL); + bdrv_graph_wrlock(bs); QLIST_FOREACH_SAFE(child, &bs->children, next, next) { bdrv_unref_child(bs, child); } -- 2.11.0