This is version 4 of a patch series to add an io_uring interface for encoded reads. The principal use case for this is to eventually allow btrfs send and receive to operate asynchronously, the lack of io_uring encoded I/O being one of the main blockers for this. I've written a test program for this, which demonstrates the ioctl and io_uring interface produce identical results: https://github.com/maharmstone/io_uring-encoded Changelog: v4: * Rewritten to avoid taking function pointer * Removed nowait parameter, as this could be derived from iocb flags * Fixed structure not getting properly initialized * Followed ioctl by capping uncompressed reads at EOF * Rebased against btrfs/for-next * Formatting fixes * Rearranged structs to minimize holes * Published test program * Fixed potential data race with userspace * Changed to use io_uring_cmd_to_pdu helper function * Added comments for potentially confusing parts of the code v3: * Redo of previous versions Mark Harmstone (5): btrfs: remove pointless addition in btrfs_encoded_read btrfs: change btrfs_encoded_read so that reading of extent is done by caller btrfs: don't sleep in btrfs_encoded_read if IOCB_NOWAIT set btrfs: move priv off stack in btrfs_encoded_read_regular_fill_pages btrfs: add io_uring command for encoded reads fs/btrfs/btrfs_inode.h | 13 +- fs/btrfs/file.c | 1 + fs/btrfs/inode.c | 175 ++++++++++++++------- fs/btrfs/ioctl.c | 342 ++++++++++++++++++++++++++++++++++++++++- fs/btrfs/ioctl.h | 2 + fs/btrfs/send.c | 3 +- 6 files changed, 473 insertions(+), 63 deletions(-) -- 2.45.2