diff options
| author | Fiona Ebner <f.ebner@proxmox.com> | 2025-05-30 17:10:51 +0200 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2025-06-04 18:16:34 +0200 |
| commit | 0414930d3adfa89299eaea5ce92accab15d9fba5 (patch) | |
| tree | 3ca552e9969145c057ac4954a165f036183f2170 /include | |
| parent | 77f3965ba7fed5b35212171a1e41c20c05a7ef11 (diff) | |
| download | focaccia-qemu-0414930d3adfa89299eaea5ce92accab15d9fba5.tar.gz focaccia-qemu-0414930d3adfa89299eaea5ce92accab15d9fba5.zip | |
block: move drain outside of quorum_add_child()
This is part of resolving the deadlock mentioned in commit "block: move draining out of bdrv_change_aio_context() and mark GRAPH_RDLOCK". The quorum_add_child() callback runs under the graph lock, so it is not allowed to drain. It is only called as the .bdrv_add_child() callback, which is only called in the bdrv_add_child() function, which also runs under the graph lock. The bdrv_add_child() function is called by qmp_x_blockdev_change(), where a drained section is introduced. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Message-ID: <20250530151125.955508-15-f.ebner@proxmox.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/block/block_int-common.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h index 168f703fa1..f9e742f812 100644 --- a/include/block/block_int-common.h +++ b/include/block/block_int-common.h @@ -396,6 +396,13 @@ struct BlockDriver { int GRAPH_RDLOCK_PTR (*bdrv_probe_geometry)( BlockDriverState *bs, HDGeometry *geo); + /** + * Hot add a BDS's child. Used in combination with bdrv_del_child, so the + * user can take a child offline when it is broken and take a new child + * online. + * + * All block nodes must be drained. + */ void GRAPH_WRLOCK_PTR (*bdrv_add_child)( BlockDriverState *parent, BlockDriverState *child, Error **errp); |