Hi, This series builds to adding support for a different way of doing provided buffers. The interesting bits here are patch 16, which also has some performance numbers an an explanation of it. Patches 1..6 are cleanups that should just applied separately, I think the clean up the existing code quite nicely. Patch 7 switches provided buffers from the hashed list approach to using an array (for up to 64 groups), and using an xarray for a larger sparse space. Patches 8..13 are just cleanups and generic optimizations. Patch 14 adds NOP support for provided buffers, just so that we can benchmark the last change. Patch 15 just abstracts out the pinning code. Patch 16 finally adds the feature. This passes the full liburing suite, and various test cases I adopted to use ring provided buffers. v4: - Shrink io_kiocb compared to before this series (-8 bytes) - Save some space in io_buffer_list - Add patch moving provided buffers to array + xarray - Add comments - Unify cflags handling for classic/ring buffers - Fix bid/bgid types 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 | 599 ++++++++++++++++++++++++---------- include/uapi/linux/io_uring.h | 28 ++ 2 files changed, 462 insertions(+), 165 deletions(-) -- Jens Axboe