Am 26.05.2025 um 15:21 hat Fiona Ebner geschrieben: > This is part of resolving the deadlock mentioned in commit "block: > move draining out of bdrv_change_aio_context() and mark GRAPH_RDLOCK". > > Convert the function to a _locked() version that has to be called with > the graph lock held and add a convenience wrapper that has to be > called with the graph unlocked, which drains and takes the lock > itself. Since bdrv_try_change_aio_context() is global state code, the > wrapper is too. > > Callers are adapted to use the appropriate variant, depending on > whether the caller already holds the lock. In the > test_set_aio_context() unit test, prior drains can be removed, because > draining already happens inside the new wrapper. > > Note that bdrv_attach_child_common_abort(), bdrv_attach_child_common() > and bdrv_root_unref_child() hold the graph lock and are not actually > allowed to drain either. This will be addressed in the following > commits. > > Functions like qmp_blockdev_mirror() query the nodes to act on before > draining and locking. In theory, draining could invalidate those nodes. > This kind of issue is not addressed by these commits. > > Signed-off-by: Fiona Ebner <f.eb...@proxmox.com>
Reviewed-by: Kevin Wolf <kw...@redhat.com>