The aim of this series is to reorganize bdrv_try_set_aio_context and drop BDS ->set_aio_context and ->can_set_aio_ctx callbacks in favour of a new one, ->change_aio_ctx.
More informations in patch 3 (which is also RFC, due to the doubts I have with AioContext locks). Patch 1 just add assertions in the code, 2 extends the transactions API to be able to add also transactions in the tail of the list. Patch 3 is the core of this series, and introduces the new callback. It is marked as RFC and the reason is explained in the commit message. Patches 4-5-6 implement ->change_aio_ctx in the various block, blockjob and block-backend BDSes. Patch 7 substitutes ->change_aio_ctx with the old callbacks, and patch 8 takes care of deleting the old callbacks and unused code. This series is based on "job: replace AioContext lock with job_mutex", but just because it uses job_set_aio_context() introduced there. Suggested-by: Paolo Bonzini <pbonz...@redhat.com> Based-on: <20220706201533.289775-1-eespo...@redhat.com> Emanuele Giuseppe Esposito (8): block.c: assert bs->aio_context is written under BQL and drains transactions: add tran_add_back RFC: block: use transactions as a replacement of ->{can_}set_aio_context() blockjob: implement .change_aio_ctx in child_job block: implement .change_aio_ctx in child_of_bds block-backend: implement .change_aio_ctx in child_root block: use the new _change_ API instead of _can_set_ and _set_ block: remove all unused ->can_set_aio_ctx and ->set_aio_ctx callbacks block.c | 288 +++++++++++++++-------------- block/block-backend.c | 65 +++++-- blockjob.c | 50 +++-- include/block/block-global-state.h | 16 +- include/block/block_int-common.h | 5 +- include/qemu/transactions.h | 9 + util/transactions.c | 29 ++- 7 files changed, 266 insertions(+), 196 deletions(-) -- 2.31.1