In essence, it's about two features. The first one is implemented by 1-2 and saves ->uring_lock lock/unlock in a single call of tctx_task_work(). Should be useful for links, apolls and BPF requests at some moment. The second feature (3/3) is batching freeing and completing of IRQ-based read/write requests. Haven't got numbers yet, but just throwing it for public discussion. P.S. for the new horrendous part of io_req_task_complete() placing state->compl_reqs and flushing is temporary, will be killed by other planned patches. Pavel Begunkov (3): io_uring: flush completions for fallbacks io_uring: batch task work locking io_uring: IRQ rw completion batching fs/io_uring.c | 103 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 34 deletions(-) -- 2.32.0