Hi, This series builds to adding support for a different way of doing provided buffers. The interesting bits here are patch 12, which also has some performance numbers an an explanation of it. Patches 1..5 are cleanups that should just applied separately, I think the clean up the existing code quite nicely. Patch 6 is a generic optimization for the buffer list lookups. Patch 7 has the caller use already selected buffer information rather than rely on io_buffer_select() returning it for REQ_F_BUFFER_SELECTED. Patch 8 adds NOP support for provided buffers, just so that we can benchmark the last change. Patches 9..11 are prep for patch 12. Patch 12 finally adds the feature. This passes the full liburing suite, and various test cases I adopted to use ring provided buffers. v3: - Speedups - Add patch unifying how io_buffer_select() is called when a buffer has already been selected. - Build on above change to ensure we handle async + poll retry correctly. Can also be found in my git repo, for-5.19/io_uring-pbuf branch: https://git.kernel.dk/cgit/linux-block/log/?h=for-5.19/io_uring-pbuf fs/io_uring.c | 475 +++++++++++++++++++++++++--------- include/uapi/linux/io_uring.h | 26 ++ 2 files changed, 382 insertions(+), 119 deletions(-) -- Jens Axboe