diff options
| author | Fiona Ebner <f.ebner@proxmox.com> | 2025-05-30 17:10:46 +0200 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2025-06-04 18:16:34 +0200 |
| commit | a1ea8eb5912256c0b2be16fae5d3786aebc80cb1 (patch) | |
| tree | 05e788745c273c7a063ec3012f306b43e65ba113 /block/commit.c | |
| parent | 91ba0e1c382bd4a4b9c6a200f8a175d6ff30ab99 (diff) | |
| download | focaccia-qemu-a1ea8eb5912256c0b2be16fae5d3786aebc80cb1.tar.gz focaccia-qemu-a1ea8eb5912256c0b2be16fae5d3786aebc80cb1.zip | |
block: move drain outside of bdrv_try_change_aio_context()
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.ebner@proxmox.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Message-ID: <20250530151125.955508-10-f.ebner@proxmox.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/commit.c')
0 files changed, 0 insertions, 0 deletions