[PATCH v2 0/7] btrfs: fix io_uring encoded IO cleanup and compat

Yang Xiuwei <[email protected]>
Newsgroups org.kernel.vger.linux-btrfs,org.kernel.vger.io-uring,org.kernel.vger.linux-block,org.kernel.vger.linux-fsdevel
Message-ID <[email protected]>
Fixes for the io_uring ENCODED_READ / ENCODED_WRITE paths:

1. Fast bio completion could call endio and still return a negative
   errno, so the caller and btrfs_uring_read_finished() both cleaned
   up.  Always return -EIOCBQUEUED after endio.

   Link: https://lore.kernel.org/linux-btrfs/[email protected]/

2. btrfs_uring_read_extent() failure skipped kfree(data->iov).

3. SQPOLL / io-wq leave in_compat_syscall() false; export
   __import_iovec() and pass IO_URING_F_COMPAT for the iovec import.

4. Unlock inode/extent in the caller on read-extent failure, including
   the pages alloc -ENOMEM path.

5. Do not leave btrfs_uring_encoded_data in the cmd PDU across
   -EAGAIN (leak on cancel); drop the unused REISSUE restore.

v1: https://lore.kernel.org/linux-btrfs/[email protected]/

Changes in v2:
- unlock in the caller (Qu Wenruo)
- address further error-path issues raised on the v1 review
- export __import_iovec(); use IO_URING_F_COMPAT
- no PDU stash across -EAGAIN; drop REISSUE helpers

Testing: xfstests btrfs/333 passed.

Yang Xiuwei (7):
  btrfs: always return -EIOCBQUEUED after btrfs_uring_read_extent_endio
  btrfs: free iov when btrfs_uring_read_extent fails
  iov_iter: export __import_iovec
  btrfs: use IO_URING_F_COMPAT for uring encoded iovec import
  btrfs: unlock inode and extent in caller when uring read extent fails
  btrfs: don't stash uring encoded data across -EAGAIN
  btrfs: drop unused uring encoded IO REISSUE stash helpers

 fs/btrfs/inode.c |  7 +++---
 fs/btrfs/ioctl.c | 67 ++++++++++++++++++++++++++------------------------------
 lib/iov_iter.c   |  1 +
 3 files changed, 35 insertions(+), 40 deletions(-)

-- 
2.25.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.