Re: [PATCH 00/17 stable-5.15.y] Fix mmap + page fault deadlocks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 04/04/2022 17:41, Filipe Manana wrote:
On Sat, Apr 02, 2022 at 06:25:37PM +0800, Anand Jain wrote:
This set fixes a process hang issue in btrfs and gf2 filesystems. When we
do a direct IO read or write when the buffer given by the user is
memory-mapped to the file range we are going to do IO, we end up ending
in a deadlock. This is triggered by the test case generic/647 from
fstests.

This fix depends on the iov_iter and iomap changes introduced in the
commit c03098d4b9ad ("Merge tag 'gfs2-v5.15-rc5-mmap-fault' of
git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2") and they
are part of this set for stable-5.15.y.

Please note that patch 3/17 in this patchset changes the prototype and
renames an exported symbol as below. All its references are updated as
well.

-EXPORT_SYMBOL(iov_iter_fault_in_readable);
+EXPORT_SYMBOL(fault_in_iov_iter_readable);

Andreas Gruenbacher (15):
   powerpc/kvm: Fix kvm_use_magic_page
   gup: Turn fault_in_pages_{readable,writeable} into
     fault_in_{readable,writeable}
   iov_iter: Turn iov_iter_fault_in_readable into
     fault_in_iov_iter_readable
   iov_iter: Introduce fault_in_iov_iter_writeable
   gfs2: Add wrapper for iomap_file_buffered_write
   gfs2: Clean up function may_grant
   gfs2: Move the inode glock locking to gfs2_file_buffered_write
   gfs2: Eliminate ip->i_gh
   gfs2: Fix mmap + page fault deadlocks for buffered I/O
   iomap: Fix iomap_dio_rw return value for user copies
   iomap: Support partial direct I/O on user copy failures
   iomap: Add done_before argument to iomap_dio_rw
   gup: Introduce FOLL_NOFAULT flag to disable page faults
   iov_iter: Introduce nofault flag to disable page faults
   gfs2: Fix mmap + page fault deadlocks for direct I/O

Bob Peterson (1):
   gfs2: Introduce flag for glock holder auto-demotion

Filipe Manana (1):
   btrfs: fix deadlock due to page faults during direct IO reads and
     writes

If this patchset is backported, then at least the following two commits
must also be backported:

commit fe673d3f5bf1fc50cdc4b754831db91a2ec10126
Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Date:   Tue Mar 8 11:55:48 2022 -0800

     mm: gup: make fault_in_safe_writeable() use fixup_user_fault()

commit ca93e44bfb5fd7996b76f0f544999171f647f93b
Author: Filipe Manana <fdmanana@xxxxxxxx>
Date:   Wed Mar 2 11:48:39 2022 +0000

     btrfs: fallback to blocking mode when doing async dio over multiple extents

Thanks for pointing it out.

Maybe there's more that need to be backported. So cc'ing Andreas in
case he's aware of any such other commits.

I have scanned through the commits. I didn't find any further Fixes
for this series.

I am sending these two patches in a new patch set as part2. Instead,
if it is better, I am ok to include these and send v2.

Thanks, Anand

  arch/powerpc/kernel/kvm.c           |   3 +-
  arch/powerpc/kernel/signal_32.c     |   4 +-
  arch/powerpc/kernel/signal_64.c     |   2 +-
  arch/x86/kernel/fpu/signal.c        |   7 +-
  drivers/gpu/drm/armada/armada_gem.c |   7 +-
  fs/btrfs/file.c                     | 142 ++++++++++--
  fs/btrfs/ioctl.c                    |   5 +-
  fs/erofs/data.c                     |   2 +-
  fs/ext4/file.c                      |   5 +-
  fs/f2fs/file.c                      |   2 +-
  fs/fuse/file.c                      |   2 +-
  fs/gfs2/bmap.c                      |  60 +----
  fs/gfs2/file.c                      | 252 +++++++++++++++++++--
  fs/gfs2/glock.c                     | 330 +++++++++++++++++++++-------
  fs/gfs2/glock.h                     |  20 ++
  fs/gfs2/incore.h                    |   4 +-
  fs/iomap/buffered-io.c              |   2 +-
  fs/iomap/direct-io.c                |  29 ++-
  fs/ntfs/file.c                      |   2 +-
  fs/ntfs3/file.c                     |   2 +-
  fs/xfs/xfs_file.c                   |   6 +-
  fs/zonefs/super.c                   |   4 +-
  include/linux/iomap.h               |  11 +-
  include/linux/mm.h                  |   3 +-
  include/linux/pagemap.h             |  58 +----
  include/linux/uio.h                 |   4 +-
  lib/iov_iter.c                      |  98 +++++++--
  mm/filemap.c                        |   4 +-
  mm/gup.c                            | 139 +++++++++++-
  29 files changed, 911 insertions(+), 298 deletions(-)

--
2.33.1




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux