On Fri, Jan 10, 2025 at 05:23:52PM +0000, Mark Harmstone wrote: > Add an io_uring interface for encoded writes, with the same parameters > as the BTRFS_IOC_ENCODED_WRITE ioctl. > > As with the encoded reads code, there's a test program for this at > https://github.com/maharmstone/io_uring-encoded, and I'll get this > worked into an fstest. > > How io_uring works is that it initially calls btrfs_uring_cmd with the > IO_URING_F_NONBLOCK flag set, and if we return -EAGAIN it tries again in > a kthread with the flag cleared. > > Ideally we'd honour this and call try_lock etc., but there's still a lot > of work to be done to create non-blocking versions of all the functions > in our write path. Instead, just validate the input in > btrfs_uring_encoded_write() on the first pass and return -EAGAIN, with a > view to properly optimizing the happy path later on. > > Signed-off-by: Mark Harmstone <maharmstone@xxxxxx> > --- > Changelog: > * Version 2: switched to using io_uring_cmd_get_async_data, so that we > only copy from userspace once I've added this to for-next now, it hasn't been in linux-next so far but we have at least one week before the merge window. The io_uring+read is about to be released and there's no reason to delay the write for one whole dev cycle. Any fixups please send as separate patches. Thanks.