Merge tag 'gfs2-v5.15-rc5-mmap-fault' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Nov 2021 19:25:03 +0000 (12:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Nov 2021 19:25:03 +0000 (12:25 -0700)
commitc03098d4b9ad76bca2966a8769dcfe59f7f85103
treee7e2a6a0a84ad29baa14c018e3d4dcb12bd08fd6
parentab2e7f4b46bf8fccf088ec496b3bb26b43e91340
parentb01b2d72da25c000aeb124bc78daf3fb998be2b6
Merge tag 'gfs2-v5.15-rc5-mmap-fault' of git://git./linux/kernel/git/gfs2/linux-gfs2

Pull gfs2 mmap + page fault deadlocks fixes from Andreas Gruenbacher:
 "Functions gfs2_file_read_iter and gfs2_file_write_iter are both
  accessing the user buffer to write to or read from while holding the
  inode glock.

  In the most basic deadlock scenario, that buffer will not be resident
  and it will be mapped to the same file. Accessing the buffer will
  trigger a page fault, and gfs2 will deadlock trying to take the same
  inode glock again while trying to handle that fault.

  Fix that and similar, more complex scenarios by disabling page faults
  while accessing user buffers. To make this work, introduce a small
  amount of new infrastructure and fix some bugs that didn't trigger so
  far, with page faults enabled"

* tag 'gfs2-v5.15-rc5-mmap-fault' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2:
  gfs2: Fix mmap + page fault deadlocks for direct I/O
  iov_iter: Introduce nofault flag to disable page faults
  gup: Introduce FOLL_NOFAULT flag to disable page faults
  iomap: Add done_before argument to iomap_dio_rw
  iomap: Support partial direct I/O on user copy failures
  iomap: Fix iomap_dio_rw return value for user copies
  gfs2: Fix mmap + page fault deadlocks for buffered I/O
  gfs2: Eliminate ip->i_gh
  gfs2: Move the inode glock locking to gfs2_file_buffered_write
  gfs2: Introduce flag for glock holder auto-demotion
  gfs2: Clean up function may_grant
  gfs2: Add wrapper for iomap_file_buffered_write
  iov_iter: Introduce fault_in_iov_iter_writeable
  iov_iter: Turn iov_iter_fault_in_readable into fault_in_iov_iter_readable
  gup: Turn fault_in_pages_{readable,writeable} into fault_in_{readable,writeable}
  powerpc/kvm: Fix kvm_use_magic_page
  iov_iter: Fix iov_iter_get_pages{,_alloc} page fault return value
16 files changed:
arch/x86/kernel/fpu/signal.c
fs/btrfs/file.c
fs/btrfs/ioctl.c
fs/erofs/data.c
fs/ext4/file.c
fs/fuse/file.c
fs/gfs2/file.c
fs/iomap/direct-io.c
fs/ntfs/file.c
fs/ntfs3/file.c
fs/xfs/xfs_file.c
fs/zonefs/super.c
include/linux/iomap.h
include/linux/mm.h
include/linux/pagemap.h
mm/filemap.c