Ok, as I expected simple changes in a previous based-on serie provoke a cascade of changes that inevitably affect these patches too.
While I strongly suggest to have an initial look at these patches because it gives an idea on what am I trying to accomplish, I would not go looking at nitpicks and trivial errors that came up from the based-on series (ie "just as in the previous serie, fix this"). The order of the series is: 1. Still more coroutine and various fixes in block layer 2. Protect the block layer with a rwlock: part 1 3. Protect the block layer with a rwlock: part 2 4. Protect the block layer with a rwlock: part 3 Thank you, Emanuele Am 16/11/2022 um 15:07 schrieb Emanuele Giuseppe Esposito: > Please read "Protect the block layer with a rwlock: part 1" and > "Protect the block layer with a rwlock: part 2" for an > additional introduction and aim of this series. > > In this serie, we cover the remaining BlockDriver IO callbacks that were not > running in coroutine, therefore not using the graph rdlock. > Therefore convert them to coroutines, using either g_c_w or a new > variant introduced in this serie (see below). > > We need to convert these callbacks into coroutine because non-coroutine code > is tied to the main thread, even though it will still delegate I/O accesses to > the iothread (via the bdrv_coroutine_enter call in generated_co_wrappers). > Making callbacks run in coroutines provides more flexibility, because they run > entirely in iothreads and can use CoMutexes for mutual exclusion. > > Here we introduce generated_co_wrapper_simple, a simplification of g_c_w that > only considers the case where the caller is not in a coroutine. > This simplifies and clarifies a lot when the caller is a coroutine or not, and > in the future will hopefully replace g_c_w. > > While we are at it, try to directly call the _co_ counterpart of a g_c_w when > we know already that the function always run in a coroutine. > > Based-on: <20221116135331.3052923-1-eespo...@redhat.com> > > Thank you, > Emanuele > > Emanuele Giuseppe Esposito (15): > block/qed: add missing graph rdlock in qed_need_check_timer_entry > block: rename refresh_total_sectors in bdrv_refresh_total_sectors > block-backend: use bdrv_getlength instead of blk_getlength > block: convert bdrv_refresh_total_sectors in generated_co_wrapper > block: use bdrv_co_refresh_total_sectors when possible > block: convert bdrv_get_allocated_file_size in > generated_co_wrapper_simple > block: convert bdrv_get_info in generated_co_wrapper > block: convert bdrv_is_inserted in generated_co_wrapper_simple > block-coroutine-wrapper: support void functions > block: convert bdrv_eject in generated_co_wrapper_simple > block: convert bdrv_lock_medium in generated_co_wrapper_simple > block: convert bdrv_debug_event in generated_co_wrapper > block: convert bdrv_io_plug in generated_co_wrapper_simple > block: convert bdrv_io_unplug in generated_co_wrapper_simple > block: rename newly converted BlockDriver IO coroutine functions > > block.c | 93 +++++++++++++++++++----------- > block/blkdebug.c | 4 +- > block/blkio.c | 6 +- > block/blklogwrites.c | 2 +- > block/blkreplay.c | 2 +- > block/blkverify.c | 2 +- > block/block-backend.c | 43 ++++++++------ > block/commit.c | 4 +- > block/copy-on-read.c | 12 ++-- > block/crypto.c | 6 +- > block/curl.c | 8 +-- > block/file-posix.c | 48 +++++++-------- > block/file-win32.c | 8 +-- > block/filter-compress.c | 10 ++-- > block/gluster.c | 16 ++--- > block/io.c | 78 +++++++++++++------------ > block/iscsi.c | 8 +-- > block/meson.build | 1 + > block/mirror.c | 17 ++++-- > block/nbd.c | 6 +- > block/nfs.c | 2 +- > block/null.c | 8 +-- > block/nvme.c | 6 +- > block/preallocate.c | 2 +- > block/qcow.c | 2 +- > block/qcow2-refcount.c | 2 +- > block/qcow2.c | 6 +- > block/qed.c | 7 ++- > block/quorum.c | 2 +- > block/raw-format.c | 14 ++--- > block/rbd.c | 4 +- > block/replication.c | 2 +- > block/ssh.c | 2 +- > block/stream.c | 4 +- > block/throttle.c | 2 +- > block/vdi.c | 2 +- > block/vhdx.c | 2 +- > block/vmdk.c | 4 +- > block/vpc.c | 2 +- > blockdev.c | 8 ++- > hw/scsi/scsi-disk.c | 5 ++ > include/block/block-io.h | 40 +++++++++---- > include/block/block_int-common.h | 37 +++++++----- > include/block/block_int-io.h | 5 +- > include/sysemu/block-backend-io.h | 32 +++++++--- > scripts/block-coroutine-wrapper.py | 19 ++++-- > tests/unit/test-block-iothread.c | 7 +++ > 47 files changed, 364 insertions(+), 238 deletions(-) >