bdrv_drained_begin() polls and is not allowed to be called with the block graph lock held. Mark the function as such.
Suggested-by: Kevin Wolf <kw...@redhat.com> Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- This does not catch the issue reported by Andrey, because there is a bdrv_graph_rdunlock_main_loop() before bdrv_drained_begin() in the function bdrv_change_aio_context(). That unlock is of course ineffective if the exclusive lock is held, but it seems to prevent TSA from finiding the issue. The next patch is concerned with that. include/block/block-io.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/block/block-io.h b/include/block/block-io.h index b49e0537dd..34b9f1cbfc 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -429,7 +429,8 @@ bdrv_drain_poll(BlockDriverState *bs, BdrvChild *ignore_parent, * * This function can be recursive. */ -void bdrv_drained_begin(BlockDriverState *bs); +void GRAPH_UNLOCKED +bdrv_drained_begin(BlockDriverState *bs); /** * bdrv_do_drained_begin_quiesce: -- 2.39.5