The previous parts of the graph locking changes focussed mostly on the BlockDriver side and taking reader locks while performing I/O. This series focusses more on the functions managing the graph structure, i.e adding, removing and replacing nodes and updating their permissions.
Many of these places actually need to take the writer lock to avoid readers seeing an inconsistent half-updated graph state. Therefore taking the writer lock is now moved from the very low-level function bdrv_replace_child_noperm() into its more high level callers. v2: - Patch 5: Improved comments, added one for bdrv_schedule_unref() Kevin Wolf (21): block: Remove unused BlockReopenQueueEntry.perms_checked preallocate: Factor out preallocate_truncate_to_real_size() preallocate: Don't poll during permission updates block: Take AioContext lock for bdrv_append() more consistently block: Introduce bdrv_schedule_unref() block-coroutine-wrapper: Add no_co_wrapper_bdrv_wrlock functions block-coroutine-wrapper: Allow arbitrary parameter names block: Mark bdrv_replace_child_noperm() GRAPH_WRLOCK block: Mark bdrv_replace_child_tran() GRAPH_WRLOCK block: Mark bdrv_attach_child_common() GRAPH_WRLOCK block: Call transaction callbacks with lock held block: Mark bdrv_attach_child() GRAPH_WRLOCK block: Mark bdrv_parent_perms_conflict() and callers GRAPH_RDLOCK block: Mark bdrv_get_cumulative_perm() and callers GRAPH_RDLOCK block: Mark bdrv_child_perm() GRAPH_RDLOCK block: Mark bdrv_parent_cb_change_media() GRAPH_RDLOCK block: Take graph rdlock in bdrv_drop_intermediate() block: Take graph rdlock in bdrv_change_aio_context() block: Mark bdrv_root_unref_child() GRAPH_WRLOCK block: Mark bdrv_unref_child() GRAPH_WRLOCK block: Mark bdrv_add/del_child() and caller GRAPH_WRLOCK include/block/block-common.h | 4 + include/block/block-global-state.h | 30 +- include/block/block_int-common.h | 34 +- include/block/block_int-global-state.h | 14 +- include/sysemu/block-backend-global-state.h | 4 +- block.c | 348 ++++++++++++++------ block/blklogwrites.c | 4 + block/blkverify.c | 2 + block/block-backend.c | 29 +- block/copy-before-write.c | 10 +- block/crypto.c | 6 +- block/graph-lock.c | 26 +- block/mirror.c | 8 + block/preallocate.c | 133 +++++--- block/qcow2.c | 4 +- block/quorum.c | 23 +- block/replication.c | 9 + block/snapshot.c | 2 + block/stream.c | 20 +- block/vmdk.c | 13 + blockdev.c | 23 +- blockjob.c | 2 + tests/unit/test-bdrv-drain.c | 23 +- tests/unit/test-bdrv-graph-mod.c | 20 ++ tests/unit/test-block-iothread.c | 3 + scripts/block-coroutine-wrapper.py | 18 +- tests/qemu-iotests/051.pc.out | 6 +- 27 files changed, 591 insertions(+), 227 deletions(-) -- 2.41.0