[GIT PULL 00/12 for v7.0] v7.0

Christian Brauner posted 12 patches 14 hours ago
Only 4 patches received!
[GIT PULL 00/12 for v7.0] v7.0
Posted by Christian Brauner 14 hours ago
Hey Linus,

This is the batch of pull requests for the v7.0 merge window.

This cycle has a few infrastructure pieces worth highlighting.

There's nullfs, a completely catatonic minimal pseudo filesystem that
serves as the immutable root of the mount hierarchy. The mutable rootfs
(tmpfs/ramfs) is mounted on top of it. This allows userspace to simply
pivot_root() in the initramfs without the traditional switch_root
workarounds. nullfs is enabled unconditionally. If we see any real
regression we'll hide it behind a boot option. There's an easy to revert
change to make that happen. It will also serve as a foundation for
creating completely empty mount namespaces in a future cycle.

Along with nullfs, we remove the deprecated linuxrc-based initrd code
path is removed. It was deprecated in 2020 and this completes the
removal. Initramfs is entirely unaffected. The non-linuxrc initrd path
(root=/dev/ram0) is preserved but now carries a deprecation warning
targeting January 2027 removal.

There a new OPEN_TREE_NAMESPACE extension for open_tree(). Container
runtimes currently use CLONE_NEWNS to copy the caller's entire mount
namespace only to then pivot_root() and recursively unmount everything
they just copied. With large mount tables and thousands of parallel
container launches this creates significant contention on the namespace
semaphore. OPEN_TREE_NAMESPACE copies only the specified mount tree and
returns a mount namespace fd instead of a detached mount fd —
functioning as a combined unshare(CLONE_NEWNS) + pivot_root() in a
single syscall. Using it for container creation brings about a 40%
increase in throughput.

We added a new STATMOUNT_BY_FD extension to statmount(). It now accepts
a file descriptor as a parameter, returning mount information for the
mount the fd resides on, including detached mounts.

With every in-tree filesystem now converted to the new mount API, we can
remove all the legacy code in fs_context.c for unconverted filesystems -
about 280 lines including legacy_init_fs_context() and friends. The
mount(2) syscall path for userspace is untouched.

The timestamp update path is reworked to propagate IOCB_NOWAIT through
->update_time so that filesystems which can update timestamps without
blocking are no longer penalized. Previously, file_update_time_flags()
unconditionally returned -EAGAIN when IOCB_NOWAIT was set, making
non-blocking direct writes impossible on essentially all filesystems.
XFS implements non-blocking timestamp updates as the first user.

Lease support is changed to require explicit opt-in. Previously
kernel_setlease() fell through to generic_setlease() when a filesystem
did not define ->setlease(), silently granting lease support to every
filesystem. The new default returns -EINVAL when ->setlease is NULL.
With the new default simple_nosetlease() becomes redundant and is
removed.

There's a new generic fserror infrastructure for reporting metadata
corruption and file I/O errors to userspace via fsnotify. EFSCORRUPTED
and EUCLEAN are promoted from private per-filesystem definitions to
canonical errno.h values across all architectures. A new
super_operations::report_error callback lets filesystem drivers respond
to file I/O errors themselves.

knfsd can now use atomic_open() via dentry_create(), eliminating the
racy vfs_create() + vfs_open() sequence for combined exclusive create
and open operations.

Btrfs drops its private copies of may_delete() and may_create() in
favor of newly exported may_delete_dentry() and may_create_dentry(),
removing ~70 lines of duplicated code that had drifted out of sync with
the VFS originals.

On the scalability side, pid allocation is reworked to only take
pidmap_lock once instead of twice during alloc_pid(), improving thread
creation/teardown throughput by 10-16%. File lock presence is tracked
via a flag in ->i_opflags instead of reading ->i_flctx, avoiding
false-sharing on open/close hot paths with a measured 4-16% improvement.
A redundant DCACHE_MANAGED_DENTRY check in __follow_mount_rcu() that
caused a 100% mispredicted branch is removed.

Smaller items include minix superblock validation hardening (syzbot),
iomap plumbing for erofs page cache sharing preliminaries, a fix for
invalid folio access after folio_end_read(), posix_acl_to_xattr() now
allocating the buffer internally since every caller was doing it anyway,
chardev cleanup API conversion, the start of deprecating legacy BSD
process accounting (acct(2)), Rust VFS helper annotations for LTO
inlining, and the usual collection of kernel-doc fixes and cleanups.

Note that I will have some pull requests coming in during the second
half of the merge window as linux-next had to temporarily drop them last
week when a selftest build error happened. So I'm delaying them a bit.

Thanks!
Christian
[GIT PULL 01/12 for v7.0] vfs rust
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains the rust changes for this cycle.

llow inlining C helpers into Rust when using LTO: Add the __rust_helper
annotation to all VFS-related Rust helper functions.

Currently, C helpers cannot be inlined into Rust code even under LTO because
LLVM detects slightly different codegen options between the C and Rust
compilation units (differing null-pointer-check flags, builtin lists, and
target feature strings). The __rust_helper macro is the first step toward
fixing this: it is currently #defined to nothing, but a follow-up series will
change it to __always_inline when compiling with LTO (while keeping it empty
for bindgen, which ignores inline functions).

This picks up the VFS portion (fs, pid_namespace, poll) of a larger tree-wide
series.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.rust

for you to fetch changes up to 5334fc280735dcf5882511a219a99b5759e14870:

  Merge patch series "Allow inlining C helpers into Rust when using LTO" (2025-12-15 14:13:04 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.rust

Please consider pulling these changes from the signed vfs-7.0-rc1.rust tag.

Thanks!
Christian

----------------------------------------------------------------
Alice Ryhl (3):
      rust: fs: add __rust_helper to helpers
      rust: pid_namespace: add __rust_helper to helpers
      rust: poll: add __rust_helper to helpers

Christian Brauner (1):
      Merge patch series "Allow inlining C helpers into Rust when using LTO"

 rust/helpers/fs.c            | 2 +-
 rust/helpers/pid_namespace.c | 8 +++++---
 rust/helpers/poll.c          | 5 +++--
 3 files changed, 9 insertions(+), 6 deletions(-)
[GIT PULL 03/12 for v7.0] vfs nonblocking_timestamps
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains the changes to support non-blocking timestamp updates.

Since 66fa3cedf16a ("fs: Add async write file modification handling.")
file_update_time_flags() unconditionally returns -EAGAIN when any
timestamp needs updating and IOCB_NOWAIT is set. This makes
non-blocking direct writes impossible on file systems with granular
enough timestamps, which in practice means all of them.

This series reworks the timestamp update path to propagate IOCB_NOWAIT
through ->update_time so that file systems which can update timestamps
without blocking are no longer penalized.

With that groundwork in place, the core change passes IOCB_NOWAIT into
->update_time and returns -EAGAIN only when the file system indicates it
would block. XFS implements non-blocking timestamp updates by using the
new ->sync_lazytime and open-coding generic_update_time without the
S_NOWAIT check, since the lazytime path through the generic helpers can
never block in XFS.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.nonblocking_timestamps

for you to fetch changes up to 77ef2c3ff5916d358c436911ca6a961060709f04:

  Merge patch series "re-enable IOCB_NOWAIT writes to files v6" (2026-01-12 14:01:42 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.nonblocking_timestamps

Please consider pulling these changes from the signed vfs-7.0-rc1.nonblocking_timestamps tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch series "re-enable IOCB_NOWAIT writes to files v6"

Christoph Hellwig (11):
      fs: remove inode_update_time
      fs: allow error returns from generic_update_time
      nfs: split nfs_update_timestamps
      fat: cleanup the flags for fat_truncate_time
      fs: refactor ->update_time handling
      fs: factor out a sync_lazytime helper
      fs: add a ->sync_lazytime method
      fs: add support for non-blocking timestamp updates
      fs: refactor file_update_time_flags
      xfs: implement ->sync_lazytime
      xfs: enable non-blocking timestamp updates

 Documentation/filesystems/locking.rst |   5 +-
 Documentation/filesystems/vfs.rst     |   9 +-
 fs/bad_inode.c                        |   3 +-
 fs/btrfs/inode.c                      |  13 ++-
 fs/fat/dir.c                          |   2 +-
 fs/fat/fat.h                          |  11 +-
 fs/fat/file.c                         |  14 +--
 fs/fat/inode.c                        |   2 +-
 fs/fat/misc.c                         |  59 ++++------
 fs/fat/namei_msdos.c                  |  13 +--
 fs/fat/namei_vfat.c                   |   9 +-
 fs/fs-writeback.c                     |  33 ++++--
 fs/gfs2/inode.c                       |   9 +-
 fs/inode.c                            | 202 ++++++++++++++++++----------------
 fs/internal.h                         |   3 +-
 fs/nfs/inode.c                        |  37 +++----
 fs/orangefs/inode.c                   |  29 +++--
 fs/orangefs/orangefs-kernel.h         |   3 +-
 fs/overlayfs/inode.c                  |   7 +-
 fs/overlayfs/overlayfs.h              |   3 +-
 fs/sync.c                             |   4 +-
 fs/ubifs/file.c                       |  28 ++---
 fs/ubifs/ubifs.h                      |   3 +-
 fs/xfs/xfs_iops.c                     |  49 ++++++---
 fs/xfs/xfs_super.c                    |  29 -----
 include/linux/fs.h                    |  30 +++--
 include/trace/events/writeback.h      |   6 -
 27 files changed, 325 insertions(+), 290 deletions(-)
[GIT PULL 05/12 for v7.0] vfs fserror
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains the changes to support generif I/O error reporting.

Filesystems currently have no standard mechanism for reporting metadata
corruption and file I/O errors to userspace via fsnotify. Each
filesystem (xfs, ext4, erofs, f2fs, etc.) privately defines
EFSCORRUPTED, and error reporting to fanotify is inconsistent or absent
entirely.

This series introduces a generic fserror infrastructure built around
struct super_block that gives filesystems a standard way to queue
metadata and file I/O error reports for delivery to fsnotify. Errors
are queued via mempools and queue_work to avoid holding filesystem locks
in the notification path; unmount waits for pending events to drain. A
new super_operations::report_error callback lets filesystem drivers
respond to file I/O errors themselves (to be used by an upcoming XFS
self-healing patchset).

On the uapi side, EFSCORRUPTED and EUCLEAN are promoted from private
per-filesystem definitions to canonical errno.h values across all
architectures.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.fserror

for you to fetch changes up to 347b7042fb26beaae1ea46d0f6c47251fb52985f:

  Merge patch series "fs: generic file IO error reporting" (2026-01-13 09:58:07 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.fserror

Please consider pulling these changes from the signed vfs-7.0-rc1.fserror tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch series "fs: generic file IO error reporting"

Darrick J. Wong (6):
      uapi: promote EFSCORRUPTED and EUCLEAN to errno.h
      fs: report filesystem and file I/O errors to fsnotify
      iomap: report file I/O errors to the VFS
      xfs: report fs metadata errors via fsnotify
      xfs: translate fsdax media errors into file "data lost" errors when convenient
      ext4: convert to new fserror helpers

 arch/alpha/include/uapi/asm/errno.h        |   2 +
 arch/mips/include/uapi/asm/errno.h         |   2 +
 arch/parisc/include/uapi/asm/errno.h       |   2 +
 arch/sparc/include/uapi/asm/errno.h        |   2 +
 fs/Makefile                                |   2 +-
 fs/erofs/internal.h                        |   2 -
 fs/ext2/ext2.h                             |   1 -
 fs/ext4/ext4.h                             |   3 -
 fs/ext4/ioctl.c                            |   2 +
 fs/ext4/super.c                            |  13 +-
 fs/f2fs/f2fs.h                             |   3 -
 fs/fserror.c                               | 194 +++++++++++++++++++++++++++++
 fs/iomap/buffered-io.c                     |  23 +++-
 fs/iomap/direct-io.c                       |  12 ++
 fs/iomap/ioend.c                           |   6 +
 fs/minix/minix.h                           |   2 -
 fs/super.c                                 |   3 +
 fs/udf/udf_sb.h                            |   2 -
 fs/xfs/xfs_fsops.c                         |   4 +
 fs/xfs/xfs_health.c                        |  14 +++
 fs/xfs/xfs_linux.h                         |   2 -
 fs/xfs/xfs_notify_failure.c                |   4 +
 include/linux/fs/super_types.h             |   7 ++
 include/linux/fserror.h                    |  75 +++++++++++
 include/linux/jbd2.h                       |   3 -
 include/uapi/asm-generic/errno.h           |   2 +
 tools/arch/alpha/include/uapi/asm/errno.h  |   2 +
 tools/arch/mips/include/uapi/asm/errno.h   |   2 +
 tools/arch/parisc/include/uapi/asm/errno.h |   2 +
 tools/arch/sparc/include/uapi/asm/errno.h  |   2 +
 tools/include/uapi/asm-generic/errno.h     |   2 +
 31 files changed, 373 insertions(+), 24 deletions(-)
 create mode 100644 fs/fserror.c
 create mode 100644 include/linux/fserror.h
[GIT PULL 06/12 for v7.0] vfs btrfs
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains some changes for btrfs that are taken to the vfs tree to
stop duplicating VFS code for subvolume/snapshot dentry

  Btrfs has carried private copies of the VFS may_delete() and
  may_create() functions in fs/btrfs/ioctl.c for permission checks
  during subvolume creation and snapshot destruction. These copies have
  drifted out of sync with the VFS originals — btrfs_may_delete() is
  missing the uid/gid validity check and btrfs_may_create() is missing
  the audit_inode_child() call.

  Export the VFS functions as may_create_dentry() and
  may_delete_dentry() and switch btrfs to use them, removing ~70 lines
  of duplicated code.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.btrfs

for you to fetch changes up to f97f020075e83d05695d3f86469d50e21eccffab:

  Merge patch series "btrfs: stop duplicating VFS code for subvolume/snapshot dentry" (2026-01-14 17:17:53 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.btrfs

Please consider pulling these changes from the signed vfs-7.0-rc1.btrfs tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch series "btrfs: stop duplicating VFS code for subvolume/snapshot dentry"

Filipe Manana (4):
      fs: export may_delete() as may_delete_dentry()
      fs: export may_create() as may_create_dentry()
      btrfs: use may_delete_dentry() in btrfs_ioctl_snap_destroy()
      btrfs: use may_create_dentry() in btrfs_mksubvol()

 fs/btrfs/ioctl.c   | 73 ++----------------------------------------------------
 fs/namei.c         | 36 ++++++++++++++-------------
 include/linux/fs.h |  5 ++++
 3 files changed, 26 insertions(+), 88 deletions(-)
[GIT PULL 07/12 for v7.0] vfs minix
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains minix changes for this cycle.

Add required sanity checking to minix_check_superblock() The minix
filesystem driver does not validate several superblock fields before
using them during mount, allowing a crafted filesystem image to trigger
out-of-bounds accesses (reported by syzbot).

Consolidate and strengthen superblock validation in
minix_check_superblock().

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.minix

for you to fetch changes up to 8c97a6ddc95690a938ded44b4e3202f03f15078c:

  minix: Add required sanity checking to minix_check_superblock() (2026-01-19 12:16:06 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.minix

Please consider pulling these changes from the signed vfs-7.0-rc1.minix tag.

Thanks!
Christian

----------------------------------------------------------------
Jori Koolstra (1):
      minix: Add required sanity checking to minix_check_superblock()

 fs/minix/inode.c | 50 +++++++++++++++++++++++++++++---------------------
 1 file changed, 29 insertions(+), 21 deletions(-)
[GIT PULL 09/12 for v7.0] vfs atomic_open
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

Allow knfsd to use atomic_open():

  While knfsd offers combined exclusive create and open results to
  clients, on some filesystems those results are not atomic. The
  separate vfs_create() + vfs_open() sequence in dentry_create() can
  produce races and unexpected errors. For example, open O_CREAT with
  mode 0 will succeed in creating the file but return -EACCES from
  vfs_open(). Additionally, network filesystems benefit from reducing
  remote round-trip operations by using a single atomic_open() call.

  Teach dentry_create() -- whose sole caller is knfsd -- to use
  atomic_open() for filesystems that support it.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.atomic_open

for you to fetch changes up to 6ea258d1f6895c61af212473b51477d39b8c99d2:

  fs/namei: fix kernel-doc markup for dentry_create (2026-01-20 14:54:01 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.atomic_open

Please consider pulling these changes from the signed vfs-7.0-rc1.atomic_open tag.

Thanks!
Christian

----------------------------------------------------------------
Benjamin Coddington (3):
      VFS: move dentry_create() from fs/open.c to fs/namei.c
      VFS: Prepare atomic_open() for dentry_create()
      VFS/knfsd: Teach dentry_create() to use atomic_open()

Christian Brauner (1):
      Merge patch series "Allow knfsd to use atomic_open()"

Jay Winston (1):
      fs/namei: fix kernel-doc markup for dentry_create

 fs/namei.c         | 80 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 fs/nfsd/nfs4proc.c | 11 ++++++--
 fs/open.c          | 39 --------------------------
 include/linux/fs.h |  2 +-
 4 files changed, 82 insertions(+), 50 deletions(-)
[GIT PULL 10/12 for v7.0] vfs namespace
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains the mount changes for this cycle.

statmount: accept fd as a parameter

  Extend struct mnt_id_req with a file descriptor field and a new
  STATMOUNT_BY_FD flag. When set, statmount() returns mount information for the
  mount the fd resides on — including detached mounts (unmounted via
  umount2(MNT_DETACH)). For detached mounts the STATMOUNT_MNT_POINT and
  STATMOUNT_MNT_NS_ID mask bits are cleared since neither is meaningful. The
  capability check is skipped for STATMOUNT_BY_FD since holding an fd already
  implies prior access to the mount and equivalent information is available
  through fstatfs() and /proc/pid/mountinfo without privilege. Includes
  comprehensive selftests covering both attached and detached mount cases.

fs: Remove internal old mount API code (1 patch)

  Now that every in-tree filesystem has been converted to the new mount API,
  remove all the legacy shim code in fs_context.c that handled unconverted
  filesystems. This deletes ~280 lines including legacy_init_fs_context(), the
  legacy_fs_context struct, and associated wrappers. The mount(2) syscall path
  for userspace remains untouched. Documentation references to the legacy
  callbacks are cleaned up.

mount: add OPEN_TREE_NAMESPACE (2 patches)

  Add OPEN_TREE_NAMESPACE to open_tree(). Container runtimes currently use
  CLONE_NEWNS to copy the caller's entire mount namespace — only to then
  pivot_root() and recursively unmount everything they just copied. With large
  mount tables and thousands of parallel container launches this creates
  significant contention on the namespace semaphore.

  OPEN_TREE_NAMESPACE copies only the specified mount tree (like
  OPEN_TREE_CLONE) but returns a mount namespace fd instead of a detached mount
  fd. The new namespace contains the copied tree mounted on top of a clone of
  the real rootfs. This functions as a combined unshare(CLONE_NEWNS) +
  pivot_root() in a single syscall. Works with user namespaces: an
  unshare(CLONE_NEWUSER) followed by OPEN_TREE_NAMESPACE creates a mount
  namespace owned by the new user namespace. Mount namespace file mounts are
  excluded from the copy to prevent cycles. Includes ~1000 lines of selftests.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.0-rc1.namespace

for you to fetch changes up to 1bce1a664ac25d37a327c433a01bc347f0a81bd6:

  Merge patch series "mount: add OPEN_TREE_NAMESPACE" (2026-01-16 19:21:40 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.namespace

Please consider pulling these changes from the signed vfs-7.0-rc1.namespace tag.

Thanks!
Christian

----------------------------------------------------------------
Bhavik Sachdev (3):
      statmount: permission check should return EPERM
      statmount: accept fd as a parameter
      selftests: statmount: tests for STATMOUNT_BY_FD

Christian Brauner (4):
      Merge patch series "statmount: accept fd as a parameter"
      mount: add OPEN_TREE_NAMESPACE
      selftests/open_tree: add OPEN_TREE_NAMESPACE tests
      Merge patch series "mount: add OPEN_TREE_NAMESPACE"

Eric Sandeen (1):
      fs: Remove internal old mount API code

 Documentation/filesystems/locking.rst              |    8 -
 Documentation/filesystems/mount_api.rst            |    2 -
 Documentation/filesystems/porting.rst              |    7 +-
 Documentation/filesystems/vfs.rst                  |   58 +-
 fs/fs_context.c                                    |  208 +---
 fs/fsopen.c                                        |   10 -
 fs/internal.h                                      |    2 +-
 fs/namespace.c                                     |  265 ++++-
 fs/nsfs.c                                          |   13 +
 include/linux/fs.h                                 |    2 -
 include/linux/fs/super_types.h                     |    1 -
 include/uapi/linux/mount.h                         |   13 +-
 .../selftests/filesystems/open_tree_ns/.gitignore  |    1 +
 .../selftests/filesystems/open_tree_ns/Makefile    |   10 +
 .../filesystems/open_tree_ns/open_tree_ns_test.c   | 1030 ++++++++++++++++++++
 .../selftests/filesystems/statmount/statmount.h    |   15 +-
 .../filesystems/statmount/statmount_test.c         |  261 ++++-
 .../filesystems/statmount/statmount_test_ns.c      |  101 +-
 tools/testing/selftests/filesystems/utils.c        |   26 +
 tools/testing/selftests/filesystems/utils.h        |    1 +
 20 files changed, 1669 insertions(+), 365 deletions(-)
 create mode 100644 tools/testing/selftests/filesystems/open_tree_ns/.gitignore
 create mode 100644 tools/testing/selftests/filesystems/open_tree_ns/Makefile
 create mode 100644 tools/testing/selftests/filesystems/open_tree_ns/open_tree_ns_test.c
[GIT PULL 12/12 for v7.0] vfs misc
Posted by Christian Brauner 14 hours ago
Hey Linus,

/* Summary */

This contains a mix of VFS cleanups, performance improvements, API fixes,
documentation, and a deprecation notice.

Scalability and performance:

 - Rework pid allocation to only take pidmap_lock once instead of twice
   during alloc_pid(), improving thread creation/teardown throughput by
   10-16% depending on false-sharing luck. Pad the namespace refcount to
   reduce false-sharing.

 - Track file lock presence via a flag in ->i_opflags instead of reading
   ->i_flctx, avoiding false-sharing with ->i_readcount on open/close
   hot paths. Measured 4-16% improvement on 24-core open-in-a-loop
   benchmarks.

 - Use a consume fence in locks_inode_context() to match the
   store-release/load-consume idiom, eliminating a hardware fence on
   some architectures.

 - Annotate cdev_lock with __cacheline_aligned_in_smp to prevent
   false-sharing.

 - Remove a redundant DCACHE_MANAGED_DENTRY check in
   __follow_mount_rcu() that never fires since the caller already
   verifies it, eliminating a 100% mispredicted branch.

 - Fix a 100% mispredicted likely() hint in devcgroup_inode_permission()
   that became wrong after a prior code reorder.

Bug fixes and correctness:

 - Make insert_inode_locked() wait for inode destruction instead of
   skipping, fixing a corner case where two matching inodes could exist
   in the hash.

 - Move f_mode initialization before file_ref_init() in alloc_file() to
   respect the SLAB_TYPESAFE_BY_RCU ordering contract.

 - Add a WARN_ON_ONCE guard in try_to_free_buffers() for folios with no
   buffers attached, preventing a null pointer dereference when
   AS_RELEASE_ALWAYS is set but no release_folio op exists.

 - Fix select restart_block to store end_time as timespec64, avoiding
   truncation of tv_sec on 32-bit architectures.

 - Make dump_inode() use get_kernel_nofault() to safely access inode and
   superblock fields, matching the dump_mapping() pattern.

API modernization:

 - Make posix_acl_to_xattr() allocate the buffer internally since every
   single caller was doing it anyway. Reduces boilerplate and
   unnecessary error checking across ~15 filesystems.

 - Replace deprecated simple_strtoul() with kstrtoul() for the
   ihash_entries, dhash_entries, mhash_entries, and mphash_entries boot
   parameters, adding proper error handling.

 - Convert chardev code to use guard(mutex) and __free(kfree) cleanup
   patterns.

 - Replace min_t() with min() or umin() in VFS code to avoid silently
   truncating unsigned long to unsigned int.

 - Gate LOOKUP_RCU assertions behind CONFIG_DEBUG_VFS since callers
   already check the flag.

Deprecation:

 - Begin deprecating legacy BSD process accounting (acct(2)). The
   interface has numerous footguns and better alternatives exist (eBPF).

Documentation:

 - Fix and complete kernel-doc for struct export_operations, removing
   duplicated documentation between ReST and source.

 - Fix kernel-doc warnings for __start_dirop() and ilookup5_nowait().

Testing:

 - Add a kunit test for initramfs cpio handling of entries with
   filesize > PATH_MAX.

Misc:

 - Add missing <linux/init_task.h> include in fs_struct.c.

/* 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
================================

The following changes since commit 8f0b4cce4481fb22653697cced8d0d04027cb1e8:

  Linux 6.19-rc1 (2025-12-14 16:05:07 +1200)

are available in the Git repository at:

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

for you to fetch changes up to 6cbfdf89470ef3c2110f376a507d135e7a7a7378:

  posix_acl: make posix_acl_to_xattr() alloc the buffer (2026-01-16 10:51:12 +0100)

----------------------------------------------------------------
vfs-7.0-rc1.misc

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

Thanks!
Christian

----------------------------------------------------------------
Amir Goldstein (1):
      fs: move initializing f_mode before file_ref_init()

André Almeida (4):
      exportfs: Fix kernel-doc output for get_name()
      exportfs: Mark struct export_operations functions at kernel-doc
      exportfs: Complete kernel-doc for struct export_operations
      docs: exportfs: Use source code struct documentation

Bagas Sanjaya (2):
      fs: Describe @isnew parameter in ilookup5_nowait()
      VFS: fix __start_dirop() kernel-doc warnings

Ben Dooks (1):
      fs: add <linux/init_task.h> for 'init_fs'

Breno Leitao (2):
      fs/namei: Remove redundant DCACHE_MANAGED_DENTRY check in __follow_mount_rcu
      device_cgroup: remove branch hint after code refactor

Christian Brauner (3):
      Merge patch series "further damage-control lack of clone scalability"
      Merge patch series "vfs kernel-doc fixes for 6.19"
      Merge patch series "exportfs: Some kernel-doc fixes"

David Disseldorp (1):
      initramfs_test: kunit test for cpio.filesize > PATH_MAX

David Laight (1):
      fs: use min() or umin() instead of min_t()

Deepakkumar Karn (1):
      fs/buffer: add alert in try_to_free_buffers() for folios without buffers

Jeff Layton (1):
      acct(2): begin the deprecation of legacy BSD process accounting

Mateusz Guzik (7):
      fs: annotate cdev_lock with __cacheline_aligned_in_smp
      ns: pad refcount
      filelock: use a consume fence in locks_inode_context()
      pid: only take pidmap_lock once on alloc
      fs: track the inode having file locks with a flag in ->i_opflags
      fs: only assert on LOOKUP_RCU when built with CONFIG_DEBUG_VFS
      fs: make insert_inode_locked() wait for inode destruction

Miklos Szeredi (1):
      posix_acl: make posix_acl_to_xattr() alloc the buffer

Thomas Weißschuh (1):
      select: store end_time as timespec64 in restart block

Thorsten Blum (3):
      fs: Replace simple_strtoul with kstrtoul in set_ihash_entries
      dcache: Replace simple_strtoul with kstrtoul in set_dhash_entries
      namespace: Replace simple_strtoul with kstrtoul to parse boot params

Yuto Ohnuki (1):
      fs: improve dump_inode() to safely access inode fields

chen zhang (1):
      chardev: Switch to guard(mutex) and __free(kfree)

 Documentation/filesystems/nfs/exporting.rst |  42 ++-------
 fs/9p/acl.c                                 |  16 +---
 fs/btrfs/acl.c                              |  10 +--
 fs/buffer.c                                 |   6 +-
 fs/ceph/acl.c                               |  50 +++++------
 fs/char_dev.c                               |  19 ++--
 fs/dcache.c                                 |   5 +-
 fs/exec.c                                   |   2 +-
 fs/ext4/mballoc.c                           |   3 +-
 fs/ext4/resize.c                            |   2 +-
 fs/ext4/super.c                             |   2 +-
 fs/fat/dir.c                                |   4 +-
 fs/fat/file.c                               |   3 +-
 fs/file_table.c                             |  10 +--
 fs/fs_struct.c                              |   1 +
 fs/fuse/acl.c                               |  12 +--
 fs/fuse/dev.c                               |   2 +-
 fs/fuse/file.c                              |   8 +-
 fs/gfs2/acl.c                               |  13 +--
 fs/inode.c                                  |  96 ++++++++++++--------
 fs/jfs/acl.c                                |   9 +-
 fs/locks.c                                  |  14 ++-
 fs/namei.c                                  |  11 ++-
 fs/namespace.c                              |  10 +--
 fs/ntfs3/xattr.c                            |   6 +-
 fs/orangefs/acl.c                           |   8 +-
 fs/posix_acl.c                              |  21 ++---
 fs/select.c                                 |  12 +--
 fs/splice.c                                 |   2 +-
 include/linux/device_cgroup.h               |   2 +-
 include/linux/exportfs.h                    |  33 ++++---
 include/linux/filelock.h                    |  18 +++-
 include/linux/fs.h                          |   1 +
 include/linux/ns/ns_common_types.h          |   4 +-
 include/linux/posix_acl_xattr.h             |   5 +-
 include/linux/restart_block.h               |   4 +-
 init/Kconfig                                |   7 +-
 init/initramfs_test.c                       |  48 ++++++++++
 kernel/pid.c                                | 131 ++++++++++++++++++----------
 39 files changed, 357 insertions(+), 295 deletions(-)
Re: [GIT PULL 12/12 for v7.0] vfs misc
Posted by Nathan Chancellor 2 hours ago
On Fri, Feb 06, 2026 at 05:50:08PM +0100, Christian Brauner wrote:
> David Laight (1):
>       fs: use min() or umin() instead of min_t()

This needs a fix up for 32-bit builds:

  https://lore.kernel.org/20260113192243.73983-1-david.laight.linux@gmail.com/

  $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- mrproper allmodconfig fs/fuse/file.o
  In file included from <command-line>:
  In function 'fuse_wr_pages',
      inlined from 'fuse_perform_write' at fs/fuse/file.c:1347:27:
  include/linux/compiler_types.h:705:45: error: call to '__compiletime_assert_508' declared with attribute error: min(((pos + len - 1) >> 12) - (pos >> 12) + 1, max_pages) signedness error
    705 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
        |                                             ^
  include/linux/compiler_types.h:686:25: note: in definition of macro '__compiletime_assert'
    686 |                         prefix ## suffix();                             \
        |                         ^~~~~~
  include/linux/compiler_types.h:705:9: note: in expansion of macro '_compiletime_assert'
    705 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
        |         ^~~~~~~~~~~~~~~~~~~
  include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
     39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
        |                                     ^~~~~~~~~~~~~~~~~~
  include/linux/minmax.h:93:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     93 |         BUILD_BUG_ON_MSG(!__types_ok(ux, uy),           \
        |         ^~~~~~~~~~~~~~~~
  include/linux/minmax.h:98:9: note: in expansion of macro '__careful_cmp_once'
     98 |         __careful_cmp_once(op, x, y, __UNIQUE_ID(x_), __UNIQUE_ID(y_))
        |         ^~~~~~~~~~~~~~~~~~
  include/linux/minmax.h:105:25: note: in expansion of macro '__careful_cmp'
    105 | #define min(x, y)       __careful_cmp(min, x, y)
        |                         ^~~~~~~~~~~~~
  fs/fuse/file.c:1326:16: note: in expansion of macro 'min'
   1326 |         return min(((pos + len - 1) >> PAGE_SHIFT) - (pos >> PAGE_SHIFT) + 1,
        |                ^~~

David sent another patch before that one (though it does not look like
you were explicitly sent that one). Arnd also sent one.

  https://lore.kernel.org/20251216141647.13911-1-david.laight.linux@gmail.com/
  https://lore.kernel.org/20251223215442.720828-1-arnd@kernel.org/

Cheers,
Nathan