The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL 15/16 for v7.2] vfs misc
Date: Fri, 12 Jun 2026 17:16:01 +0200	[thread overview]
Message-ID: <20260612-vfs-misc-v72-13d57389d260@brauner> (raw)
In-Reply-To: <20260612-vfs-v72-20facee87e19@brauner>

Hey Linus,

/* Summary */

Features

- Reduce pipe->mutex contention by pre-allocating pages outside the
  lock in anon_pipe_write().

  anon_pipe_write() called alloc_page() once per page while holding
  pipe->mutex. The allocation can sleep doing direct reclaim and runs
  memcg charging, which extends the critical section and stalls any
  concurrent reader on the same mutex. Now up to 8 pages are
  pre-allocated before the mutex is taken, leftovers are recycled into
  the per-pipe tmp_page[] cache before unlock, and any remainder is
  released after unlock, keeping the allocator out of the critical
  section on both sides. On a writers x readers sweep with 64KB writes
  against a 1 MB pipe throughput improves 6-28% and average write
  latency drops 5-22%; under memory pressure - when the cost of
  holding the mutex across reclaim is highest - throughput improves
  21-48% and latency drops 17-33%. The microbenchmark is added to
  selftests.

- uaccess/sockptr: fix the ignored_trailing logic in
  copy_struct_to_user() to behave as documented and the usize check in
  copy_struct_from_sockptr() for user pointers, and add
  copy_struct_{from,to}_bounce_buffer() and copy_struct_to_sockptr()
  helpers for upcoming users (IPPROTO_SMBDIRECT, IPPROTO_QUIC).

- bpf: add a sleepable bpf_real_inode() kfunc that resolves the real
  inode backing a dentry via d_real_inode(). On overlayfs the inode
  attached to the dentry doesn't carry the underlying device
  information; this is used by the filesystem restriction BPF program
  that was merged into systemd.

- docs: add guidelines for submitting new filesystems, motivated by
  the maintenance burden abandoned and untestable filesystems impose
  on VFS developers, blocking infrastructure work like folio
  conversions and iomap migration.

Fixes

- libfs: set SB_I_NOEXEC and SB_I_NODEV by default in init_pseudo()
  and drop the now-redundant assignments in callers. This began as a
  one-line dma-buf fix for a path_noexec() warning; a pseudo
  filesystem has no reason not to set SB_I_NOEXEC. All init_pseudo()
  callers were audited: the only visible effect is on dma-buf where
  SB_I_NOEXEC silences the warning.

- Handle set_blocksize() failures in legacy filesystems (bfs, hpfs,
  qnx4, jfs, befs, affs, isofs, minix, ntfs3, omfs). Mounting a device
  with a sector size > PAGE_SIZE crashed roughly half of them; the
  rest had the same missing error handling pattern. Plus a follow-up
  releasing the superblock buffer_head when setting the minix v3 block
  size fails.

- mount: honour SB_NOUSER in the new mount API.

- fs/fcntl: fix a SOFTIRQ-unsafe lock order in fasync signaling by
  switching the process-group paths of send_sigio() and send_sigurg()
  from read_lock(&tasklist_lock) to RCU, matching the single-PID path.

- vfs: add an FS_USERNS_DELEGATABLE flag and set it for NFS, fixing
  delegated NFS mounts (fsopen() in a container with the mount
  performed by a privileged daemon) that broke when non-init s_user_ns
  was tied to FS_USERNS_MOUNT.

- selftests/namespaces: fix a hang in nsid_test where an unreaped
  grandchild kept the TAP pipe write-end open, a waitpid(-1) race in
  listns_efault_test, and a false FAIL on kernels without listns()
  where the tests should SKIP.

- filelock: fix the break_lease() stub signature for
  CONFIG_FILE_LOCKING=n.

- init/initramfs_test: wait for the async initramfs unpacking before
  running; the test and do_populate_rootfs() share the parser state.

- fs/coredump: reduce redundant log noise in
  validate_coredump_safety().

- iomap: pass the correct length to fserror_report_io() in
  __iomap_write_begin().

- backing-file: fix the backing_file_open() kerneldoc.

Cleanups

- initramfs: refactor the cpio hex header parsing to use hex2bin()
  instead of the hand-rolled simple_strntoul() which is reverted, and
  extend the initramfs KUnit tests to cover header fields with 0x
  prefixes.

- Replace __get_free_pages() and friends with kmalloc()/kzalloc()
  across quota, proc, ocfs2/dlm, nilfs2, nfs, nfsd, libfs, jfs, jbd2,
  isofs, fuse, select, namespace, configfs, binfmt_misc, bfs, and the
  do_mounts init code - part of the larger work of replacing page
  allocator calls with kmalloc().

- Use clear_and_wake_up_bit() in unlock_buffer() and
  journal_end_buffer_io_sync() instead of open-coding the sequence.

- Drop unused VFS exports: unexport drop_super_exclusive(), remove
  start_removing_user_path_at(), and fold __start_removing_path() into
  start_removing_path().

- fs/read_write: narrow the __kernel_write() export with
  EXPORT_SYMBOL_FOR_MODULES().

- vfs: uapi: retire octal and hex constants in favor of (1 << n) for
  the O_ flags. Finding a free bit for a new flag across the
  architectures was needlessly hard with the mixed bases.

- dcache: add extra sanity checks of dead dentries in dentry_free()
  via a new DENTRY_WARN_ONCE() that also prints d_flags.

- iov_iter: use kmemdup_array() in dup_iter() to harden the allocation
  against multiplication overflow.

- fs/pipe: write to ->poll_usage only once.

- vfs: remove an always-taken if-branch in find_next_fd().

- dcache: use kmalloc_flex() for struct external_name in __d_alloc().

- namei: use QSTR() instead of QSTR_INIT() in path_pts().

- sync_file_range: delete dead S_ISLNK code.

- Comment fixes: retire a stale comment in fget_task_next() and fix
  assorted spelling mistakes.

/* Testing */

gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)

No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with mainline
=============================

No known conflicts.

Merge conflicts with other trees
================================

This has a merge conflict with the ext4 tree in fs/jbd2/journal.c
between commit bbe9015f23432b ("jbd2: remove special jbd2 slabs") from
the ext4 tree and commit 2f6702dc6fdcf0 ("jbd2: replace
__get_free_pages() with kmalloc()") from this tree. The change in this
tree is a subset of the ext4 tree's commit, so the conflict can be
resolved by taking the ext4 side. Reported in [1].

It was suggested in [2] to drop the patch from this tree. But the
patch is part of the merged "fs: replace __get_free_pages() call with
kmalloc()" series with a dozen commits on top of it, so dropping it
would have meant rewriting the whole branch after it had been exposed
in linux-next. Since the change is a strict subset of the ext4 commit,
taking the ext4 side during the merge yields the identical end result.

[1]: https://lore.kernel.org/linux-next/aiq8CByJNMlXo6Be@sirena.co.uk
[2]: https://lore.kernel.org/linux-next/airBGjtjTf3Yuy0X@casper.infradead.org

The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:

  Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.2-rc1.misc

for you to fetch changes up to aa5c4fe3ba0cb2af90bbcfa7a8ef4fefcd5c2370:

  backing-file: fix backing_file_open() kerneldoc parameter (2026-06-10 09:49:25 +0200)

----------------------------------------------------------------
vfs-7.2-rc1.misc

Please consider pulling these changes from the signed vfs-7.2-rc1.misc tag.

Thanks!
Christian

----------------------------------------------------------------
Agatha Isabelle Moreira (2):
      fs: buffer: use clear_and_wake_up_bit() in unlock_buffer()
      fs: jbd2: use clear_and_wake_up_bit() in journal_end_buffer_io_sync()

Al Viro (1):
      mount: honour SB_NOUSER in the new mount API

Alexey Dobriyan (1):
      sync_file_range: delete dead S_ISLNK code

Amir Goldstein (1):
      docs: add guidelines for submitting new filesystems

Andy Shevchenko (5):
      initramfs: Sort headers alphabetically
      initramfs: Refactor to use hex2bin() instead of custom approach
      vsprintf: Revert "add simple_strntoul"
      kstrtox: Drop extern keyword in the simple_strtox() declarations
      fs/read_write: Do not export __kernel_write() to the entire world

Breno Leitao (2):
      fs/pipe: pre-allocate pages outside pipe->mutex in anon_pipe_write
      selftests/pipe: add pipe_bench microbenchmark

Christian Brauner (11):
      Merge patch series "uaccess/sockptr: copy_struct_ fixes and more helpers"
      Merge patch series "selftests/namespaces: Fix test hangs and false failures"
      Merge patch series "initramfs: test and improve cpio hex header validation"
      Merge patch series "drop unused VFS exports"
      Merge patch series "fix crashes when mounting legacy file system with sector size > PAGE_SIZE"
      Merge patch series "fs: refactor code to use clear_and_wake_up_bit()"
      Merge patch series "fs: replace __get_free_pages() call with kmalloc()"
      Merge patch series "fs/pipe: reduce pipe->mutex contention by pre-allocating outside the lock"
      Merge patch series "libfs: set SB_I_NOEXEC and SB_I_NODEV in init_pseudo()"
      bpf: add bpf_real_inode() kfunc
      filelock: fix break_lease() stub signature for CONFIG_FILE_LOCKING=n

Christoph Hellwig (15):
      fs: unexport drop_super_exclusive
      fs: remove start_removing_user_path_at
      fs: fold __start_removing_path into start_removing_path
      bfs: handle set_blocksize failures
      hpfs: handle set_blocksize failures
      qnx4: handle set_blocksize failures
      jfs: handle set_blocksize failures
      befs: handle set_blocksize failures
      affs: handle set_blocksize failures
      isofs: handle set_blocksize failures
      minix: handle set_blocksize failures
      ntfs3: handle set_blocksize failures
      omfs: handle set_blocksize failures
      minix: release the sb buffer_head when setting the v3 block size fails
      iomap: pass the correct len to fserror_report_io in __iomap_write_begin

David Disseldorp (2):
      initramfs_test: add fill_cpio() inject_ox parameter
      initramfs_test: test header fields with 0x hex prefix

Jeff Layton (2):
      dcache: add extra sanity checks of the dentry in dentry_free()
      vfs: add FS_USERNS_DELEGATABLE flag and set it for NFS

Jia He (1):
      init/initramfs_test: wait_for_initramfs() before running

John Hubbard (2):
      libfs: set SB_I_NOEXEC and SB_I_NODEV by default in init_pseudo()
      libfs: drop redundant SB_I_NOEXEC/SB_I_NODEV in init_pseudo() callers

Jori Koolstra (2):
      vfs: remove always taken if-branch in find_next_fd()
      vfs: uapi: retire octal and hex numbers in favor of (1 << n) for O_ flags

Li RongQing (1):
      fs/coredump: reduce redundant log noise in validate_coredump_safety

Li Wang (1):
      backing-file: fix backing_file_open() kerneldoc parameter

Mateusz Guzik (2):
      fs/pipe: write to ->poll_usage only once
      fs: retire stale comment in fget_task_next()

Mike Rapoport (Microsoft) (18):
      init: do_mounts: use kmalloc() for allocations of temporary buffers
      quota: allocate dquot_hash with kmalloc()
      proc: replace __get_free_page() with kmalloc()
      ocfs2/dlm: replace __get_free_page() with kmalloc()
      nilfs2: replace get_zeroed_page() with kzalloc()
      NFS: replace __get_free_page() with kmalloc() in nfs_show_devname()
      NFS: remove unused page and page2 in nfs4_replace_transport()
      NFSD: replace __get_free_page() with kmalloc() in nfsd_buffered_readdir()
      libfs: simple_transaction_get(): replace get_zeroed_page() with kzalloc()
      jfs: replace __get_free_page() with kmalloc()
      jbd2: replace __get_free_pages() with kmalloc()
      isofs: replace __get_free_page() with kmalloc()
      fuse: replace __get_free_page() with kmalloc()
      fs/select: replace __get_free_page() with kmalloc()
      fs/namespace: use __getname() to allocate mntpath buffer
      configfs: replace __get_free_pages() with kzalloc()
      binfmt_misc: replace __get_free_page() with kmalloc()
      bfs: replace get_zeroed_page() with kzalloc()

Mingyu Wang (1):
      fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling

Qingshuang Fu (1):
      fs: fix spelling mistakes in comment

Ricardo B. Marlière (3):
      selftests/namespaces: Kill grandchild in nsid fixture teardown
      selftests/namespaces: Fix waitpid race in listns_efault_test cleanup
      selftests/namespaces: Skip efault tests when listns() is not available

Stefan Metzmacher (5):
      uaccess: fix ignored_trailing logic in copy_struct_to_user()
      sockptr: fix usize check in copy_struct_from_sockptr() for user pointers
      uaccess: add copy_struct_{from,to}_bounce_buffer() helpers
      sockptr: let copy_struct_from_sockptr() use copy_struct_from_bounce_buffer()
      sockptr: introduce copy_struct_to_sockptr()

Thorsten Blum (2):
      dcache: use kmalloc_flex() in __d_alloc
      namei: use QSTR() instead of QSTR_INIT() in path_pts

Wang Haoran (1):
      iov_iter: use kmemdup_array for dup_iter to harden against overflow

 .../filesystems/adding-new-filesystems.rst         | 195 +++++++
 Documentation/filesystems/index.rst                |   1 +
 Documentation/filesystems/porting.rst              |   1 -
 arch/alpha/include/uapi/asm/fcntl.h                |  34 +-
 arch/arm/include/uapi/asm/fcntl.h                  |   8 +-
 arch/arm64/include/uapi/asm/fcntl.h                |   8 +-
 arch/m68k/include/uapi/asm/fcntl.h                 |   8 +-
 arch/mips/include/uapi/asm/fcntl.h                 |  22 +-
 arch/parisc/include/uapi/asm/fcntl.h               |  28 +-
 arch/powerpc/include/uapi/asm/fcntl.h              |   8 +-
 arch/sparc/include/uapi/asm/fcntl.h                |  34 +-
 fs/affs/affs.h                                     |   5 -
 fs/affs/super.c                                    |   6 +-
 fs/aio.c                                           |   1 -
 fs/anon_inodes.c                                   |   2 -
 fs/backing-file.c                                  |  13 +-
 fs/befs/linuxvfs.c                                 |   3 +-
 fs/bfs/inode.c                                     |   7 +-
 fs/binfmt_misc.c                                   |   4 +-
 fs/bpf_fs_kfuncs.c                                 |  16 +
 fs/buffer.c                                        |   4 +-
 fs/configfs/file.c                                 |   7 +-
 fs/coredump.c                                      |   3 +-
 fs/dcache.c                                        |  18 +-
 fs/exec.c                                          |   6 +-
 fs/fcntl.c                                         |   8 +-
 fs/file.c                                          |  18 +-
 fs/file_table.c                                    |   4 +-
 fs/fuse/ioctl.c                                    |   5 +-
 fs/hpfs/super.c                                    |   3 +-
 fs/iomap/buffered-io.c                             |   2 +-
 fs/isofs/dir.c                                     |   5 +-
 fs/isofs/inode.c                                   |   3 +-
 fs/jbd2/commit.c                                   |   4 +-
 fs/jbd2/journal.c                                  |   7 +-
 fs/jfs/jfs_dtree.c                                 |  16 +-
 fs/jfs/super.c                                     |   3 +-
 fs/libfs.c                                         |   7 +-
 fs/minix/inode.c                                   |   3 +-
 fs/namei.c                                         |  25 +-
 fs/namespace.c                                     |  11 +-
 fs/nfs/fs_context.c                                |   8 +-
 fs/nfs/nfs4namespace.c                             |  15 +-
 fs/nfs/super.c                                     |   4 +-
 fs/nfsd/vfs.c                                      |   4 +-
 fs/nilfs2/ioctl.c                                  |   4 +-
 fs/nsfs.c                                          |   1 -
 fs/ntfs3/super.c                                   |   8 +-
 fs/ocfs2/dlm/dlmdebug.c                            |  24 +-
 fs/ocfs2/dlm/dlmdomain.c                           |   8 +-
 fs/ocfs2/dlm/dlmmaster.c                           |   5 +-
 fs/ocfs2/dlm/dlmrecovery.c                         |   4 +-
 fs/omfs/inode.c                                    |   6 +-
 fs/pidfs.c                                         |   2 -
 fs/pipe.c                                          | 106 +++-
 fs/proc/base.c                                     |  16 +-
 fs/qnx4/inode.c                                    |   3 +-
 fs/quota/dquot.c                                   |  11 +-
 fs/read_write.c                                    |   5 +-
 fs/select.c                                        |   4 +-
 fs/super.c                                         |  12 +-
 fs/sync.c                                          |   3 +-
 include/linux/filelock.h                           |   2 +-
 include/linux/fs.h                                 |   1 +
 include/linux/kstrtox.h                            |   9 +-
 include/linux/namei.h                              |   1 -
 include/linux/sockptr.h                            |  28 +-
 include/linux/uaccess.h                            |  65 ++-
 include/uapi/asm-generic/fcntl.h                   |  50 +-
 init/do_mounts.c                                   |  21 +-
 init/initramfs.c                                   |  68 ++-
 init/initramfs_test.c                              |  97 +++-
 lib/iov_iter.c                                     |   8 +-
 lib/vsprintf.c                                     |   7 -
 mm/secretmem.c                                     |   2 -
 tools/testing/selftests/Makefile                   |   1 +
 .../selftests/namespaces/listns_efault_test.c      |  33 +-
 tools/testing/selftests/namespaces/nsid_test.c     |  14 +-
 tools/testing/selftests/pipe/.gitignore            |   1 +
 tools/testing/selftests/pipe/Makefile              |   9 +
 tools/testing/selftests/pipe/pipe_bench.c          | 616 +++++++++++++++++++++
 virt/kvm/guest_memfd.c                             |   2 -
 82 files changed, 1464 insertions(+), 390 deletions(-)
 create mode 100644 Documentation/filesystems/adding-new-filesystems.rst
 create mode 100644 tools/testing/selftests/pipe/.gitignore
 create mode 100644 tools/testing/selftests/pipe/Makefile
 create mode 100644 tools/testing/selftests/pipe/pipe_bench.c

  parent reply	other threads:[~2026-06-12 15:16 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-12 15:10 [GIT PULL 00/16 for v7.2] v7.2 Christian Brauner
2026-06-12 15:11 ` [GIT PULL 01/16 for v7.2] vfs kfunc Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:11 ` [GIT PULL 02/16 for v7.2] vfs exportfs Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:12 ` [GIT PULL 03/16 for v7.2] vfs inode Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:12 ` [GIT PULL 04/16 for v7.2] vfs directory delegations Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:12 ` [GIT PULL 05/16 for v7.2] vfs casefold Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:13 ` [GIT PULL 06/16 for v7.2] kernel task_exec_state Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:13 ` [GIT PULL 07/16 for v7.2] kernel misc Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:13 ` [GIT PULL 08/16 for v7.2] vfs openat2 Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:14 ` [GIT PULL 09/16 for v7.2] vfs super Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:14 ` [GIT PULL 10/16 for v7.2] vfs writeback Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:14 ` [GIT PULL 11/16 for v7.2] vfs bh Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:15 ` [GIT PULL 12/16 for v7.2] vfs eventpoll Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:15 ` [GIT PULL 13/16 for v7.2] vfs iomap Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:15 ` [GIT PULL 14/16 for v7.2] vfs xattr Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot
2026-06-12 15:16 ` Christian Brauner [this message]
2026-06-15  3:45   ` [GIT PULL 15/16 for v7.2] vfs misc pr-tracker-bot
2026-06-12 15:16 ` [GIT PULL 16/16 for v7.2] vfs procfs Christian Brauner
2026-06-15  3:45   ` pr-tracker-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260612-vfs-misc-v72-13d57389d260@brauner \
    --to=brauner@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox