[GIT PULL 00/18 for v7.3] v7.3

Christian Brauner posted 18 patches an hour ago
Only 4 patches received!
[GIT PULL 00/18 for v7.3] v7.3
Posted by Christian Brauner an hour ago
Hey Linus,

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

We remove three subsystems taking about five thousand lines with them.
These are very old filesystem drivers. EFS, the read-only SGI IRIX
format that predates XFS, has been orphaned and goes. freevxfs goes too.
Cachefiles ondemand mode also goes out now that EROFS over fscache,
its only in-tree user, has been removed.

I've sent the pull request that makes kernel threads stop sharing
filesystem state with userspace which I've kept in -next continously for
multiple cycles. So kernel threads no longer share filesystem state with
PID 1. Since the beginning, init_task, PID 1 and every kthread have
shared one fs_struct, which is why pivot_root() rewrites the fs_struct
of all kthreads and why userspace can move the ground out from under the
kernel.

PID 1 now gets its own fs_struct and kthreads are anchored in a private
nullfs instance that cannot be mounted on and cannot be used to follow
other mounts. So path lookup from a kthread fails by default. Anything
that legitimately needs to look something up in init's filesystem state
must opt-in explicitly via scoped_with_init_fs().

This also sees the addition of a minimal new pseudofs called "failfs"
which came out of some requests to shed fs state for lookup purposes
without having to resort to any namespace shenanigans. In failfs every
operation fails and is the counterpart to nullfs. Its root cannot be
opened at all. A single instance is mounted during early boot and
belongs to no mount namespace. This lets a task shed its filesystem
state completely. With its root or working directory in failfs it must
anchor every lookup at an explicit file descriptor. failfs is reachable
through FD_FAILFS_ROOT which is understood by fchdir() and by the new
fchroot() system call.

Overlayfs learns to support idmapped mounts itself so a whole merged
tree can be shown under a different ownership.

We now make it possible to share a block device between multiple
superblocks. erofs can mount read-only blob devices shared between many
superblocks. Because we only tracked a single superblock a freeze, thaw,
removal or sync on such a device was never propagated to all the
superblocks using it. And there was no way to find them. So add an
efficient table to lookup all superblocks using a given block device. A
bunch of pre-existing fixes fell out of this work as well.

Another chunk is iomap's conversion to a single ->iomap_next() callback
which finishes the move to an iterator model. Every iomap operation
drove its iteration through a struct iomap_ops holding ->iomap_begin()
and ->iomap_end(). That means every step of every iteration is an
indirect call. The work this cycle collapses both into one
->iomap_next() callback that finishes the previous mapping and produces
the next one. This lets callers inline the iteration loop and pass its
->iomap_next() as a compile time constant. That means the compiler can
turn it into a direct and hence inlineable call.

We've also changed sync_inode_metadata() and
writeback_single_inode(). They now persist not only the inode but all
metadata associated with it. A new .sync_inode_metadata superblock
operation is called from __writeback_single_inode(). Alongside it a new
I_METADATA_WRITEBACK state flag is added. So filesystems no longer need
their own mmb_fsync() implementations and can just use simple_fsync().
All metadata is now written for IS_SYNC and IS_DIRSYNC inodes. Races
where several fsyncs raced and mmb_sync() could return before all
buffers were really persisted are fixed since I_SYNC now serializes
properly. The I_METADATA_WRITEBACK scheme also fixes the case where a
WB_SYNC_NONE writeback landing between write(2) and fsync(2) left
fsync(2) failing to persist the inode. That problem is not specific to
filesystems using the generic metadata bh tracking, and the ones that do
not are left alone.

lookup_open() is refactored so that mnt_want_write(), the parent
locking and the delegated_inode retry loop live inside it. nfsd gets a
vfs_lookup_open() to reuse and thus stops open-coding the helper.
audit_inode_child() is now also called on failure there. This matches
what vfs_create() and vfs_mkdir() have always done. And the excl
argument to ->create() is removed.

binfmt_misc sees the largest rework. I've upstreamed a bunch of fixes
you merged during this cycle already. They fell out of this work (two
write access imbalances on interpreter files, an out-of-bounds flag scan
when a register string uses a flag character as its delimiter, and an
'F' entry that could pin its own instance). The new work adds support
for having dynamic policies for how to execute binaries. E.g., this
allows for the interpreter to be computed per binary. That is what
relocatable, hermetic binaries in Nix-style store layouts have needed,
where the right dynamic loader can only be determined relative to the
location of the binary itself and neither PT_INTERP nor a fixed
interpreter string can express it. But the mechanism allows for generic
policies to be expressed.

Thanks!
Christian
[GIT PULL 01/18 for v7.3] ipc misc
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This rejects mq_notify() with a zero signal number.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

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

for you to fetch changes up to 1184f5e8200902cae3e098ac68d8600ecdf6fe28:

  mqueue: reject mq_notify with signo 0 (2026-06-29 10:29:28 +0200)

----------------------------------------------------------------
ipc-7.3-rc1.misc

Please consider pulling these changes from the signed ipc-7.3-rc1.misc tag.

Thanks!
Christian

----------------------------------------------------------------
Yi Xie (1):
      mqueue: reject mq_notify with signo 0

 ipc/mqueue.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
[GIT PULL 02/18 for v7.3] kernel misc
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

- fix coding style in the exit path

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

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

for you to fetch changes up to d7337cad4dbe6caf9535d3539daed353dd425dc1:

  kernel: exit: fix coding style missing spaces (2026-06-29 10:29:22 +0200)

----------------------------------------------------------------
kernel-7.3-rc1.misc

Please consider pulling these changes from the signed kernel-7.3-rc1.misc tag.

Thanks!
Christian

----------------------------------------------------------------
mingzhu wang (1):
      kernel: exit: fix coding style missing spaces

 kernel/exit.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
[GIT PULL 03/18 for v7.3] vfs binfmt
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This contains a bunch of work for binfmt_misc. It fixes a bunch of old
bugs, reworks the locking, and then extends the format registry so a
binary type can be matched programmatically and its interpreter computed
per exec instead of being a fixed string recorded at registration time.

This allows nixos and other to e.g., implement relocatable binaries
meaning the interpreter/dynamic loader can be determined
programatically, say found relative to the binary. The mechanism is
flexible and can support other policies:

- Handler lookup is now an rcu walk. An exec that matches no binfmt_misc
  entry should now never writes to a shared cacheline.

- remove the VERBOSE_STATUS and USE_DEBUG compile time toggles

- convert the entry file to a seq_file which simplifies things quite a
  bit and kills a lot of custom logic

- make flags proper enums

- rename struct Node to binfmt_misc_entry

- allow entries to be removed with unlink(2)

- Add the ability to attach bpf programs to binfmt_misc entries so it's
  possible to dynamically choose the execution environment such as the
  loader or interpreter on a per binary basis.

  A handler is an instance of a binfmt_misc_ops struct_ops with a
  ->match() and a ->load() program. match() decides from the entry
  lookup walk whether the handler applies under the same
  registration-order. It can read file content as needed not only the
  prefetched 256 bytes in bprm->buf.

  load() then selects the interpreter and stages it through the new
  bpf_binprm_set_interp(), bpf_binprm_set_interp_arg() and
  bpf_binprm_set_flags() kfuncs.

  Handlers are published in a registry keyed by the registering task's
  user namespace and activated through the existing text interface with
  a new 'B' type carrying the handler name:

  echo ':origin:B::::nix:' > /proc/sys/fs/binfmt_misc/register

  The permission and namespacing model is unchanged. Activating a
  handler requires the same write access to an instance as any other
  registration. A container mounting its own instance escapes the host's
  entries exactly as before. The computed interpreter is opened with
  open_exec() under the caller's credentials and goes through full LSM
  vetting as the next binprm level. A program can only ever redirect the
  caller to something the caller could exec anyway.

- Two dispatch modes are added. So far the chosen interpreter owns the
  whole process identity (argv[0], /proc/pid/cmdline, /proc/self/exe 
  all name interpreter information). So relocatable find the dynamic
  linker instead. Also a binary passed to execveat() as an inaccessible
  O_CLOEXEC fd cannot run at all and gdb trips because AT_ENTRY and
  AT_PHDR do not match the exe file. So PIE symbols are unrelocated.

  This adds transparent dispatch which allows the interpreter to load
  the binary through AT_EXECFD and leaves the argument vector exactly as
  the caller built it and labels mm->exe_file and comm with the binary.
  It also raises the AT_FLAGS_TRANSPARENT_INTERP aux vector bit. The
  interpreter keeps control of mapping the binary.

  The second mode is loader substitution. This allows a binary to be
  executed natively and only the interpreter to be changed.

- Last, interpreters can be bound at registration time. Each interpreter
  is opened by its own write with the credentials the entry file was
  opened with. The program picks one per exec with
  bpf_binprm_select_interp(). Ucounts are used to properly account for
  pre-opened interpreters via
  /proc/sys/user/max_binfmt_misc_interpreters.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit b8206f516fe7cbe785cf44bf09c17c438d7c3cad:

  binfmt_misc: don't leak the user namespace when the mount fails (2026-07-28 15:51:25 +0200)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.binfmt

for you to fetch changes up to 68aabd01ddd26ced458a9e5716a640eaf8e4b7a6:

  Merge patch series "binfmt_misc: bound the interpreters an entry can pre-open" (2026-08-03 23:36:38 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.binfmt

Please consider pulling these changes from the signed vfs-7.3-rc1.binfmt tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (67):
      binfmt_misc: convert entry list to an hlist
      binfmt_misc: use RCU for the handler lookup
      binfmt_misc: annotate racy accesses to ->enabled
      binfmt_misc: turn the entry bit numbers into a proper enum
      binfmt_misc: turn the entry behavior flags into an enum
      binfmt_misc: rename Node to struct binfmt_misc_entry
      binfmt_misc: remove the VERBOSE_STATUS toggle
      binfmt_misc: use print_hex_dump_debug() for the register debug output
      binfmt_misc: convert the entry file to seq_file
      binfmt_misc: factor out the entry matching
      binfmt_misc: rename load_binfmt_misc() to current_binfmt_misc()
      binfmt_misc: return errors directly in load_misc_binary()
      binfmt_misc: give the parse_command() results names
      binfmt_misc: factor out the entry removal
      binfmt_misc: simplify check_special_flags()
      binfmt_misc: use a flexible array member for the register string
      binfmt_misc: split the field parsing out of create_entry()
      binfmt_misc: use __free(kfree) in bm_register_write()
      binfmt_misc: assorted small cleanups
      binfmt_misc: include what is used
      binfmt_misc: allow removing entries via unlink(2)
      Merge patch series "binfmt_misc: write access fixes, RCU handler lookup and cleanups"
      exec: stash bpf-selected interpreter state in struct linux_binprm
      binfmt_misc: add binfmt_misc_ops bpf struct_ops
      binfmt_misc: let the entry lookup walk sleep
      binfmt_misc: wire up bpf-backed 'B' entries
      bpf: allow fs kfuncs for binfmt_misc_ops programs
      binfmt_misc: let bpf handlers pass an argument to the interpreter
      binfmt_misc: let a bpf handler choose the invocation flags per exec
      Merge patch series "binfmt_misc: bpf-backed binary type handlers"
      binfmt_misc: require an absolute interpreter path with 'C'
      docs, binfmt_misc: keep general usage out of the handler sections
      binfmt_misc: table-drive the register string flags
      binfmt_misc: normalize the per-exec invocation flags
      binfmt_misc: split out entry_open_interpreter() and build_interp_argv()
      exec: release the replaced file with do_close_execat()
      selftests/exec: convert the binfmt_misc bpf test to the kselftest harness
      exec: add AT_FLAGS_TRANSPARENT_INTERP
      exec: label mm->exe_file with the binary for a transparent dispatch
      binfmt_misc: add transparent interpreter dispatch
      binfmt_misc: add a static transparent flag 'T'
      binfmt_misc: let a bpf handler run the interpreter transparently
      selftests/exec: test the transparent binfmt_misc mode
      binfmt_misc: document the transparent identity contract
      exec: carry a PT_INTERP substitute in struct linux_binprm
      binfmt_elf: consume a stashed PT_INTERP substitute
      binfmt_elf_fdpic: consume a stashed PT_INTERP substitute
      binfmt_misc: add the 'L' loader substitution flag
      binfmt_misc: let a bpf handler request loader substitution
      selftests/exec: test binfmt_misc loader substitution
      binfmt_misc: document loader substitution
      Merge patch series "binfmt_misc: transparent interpreters and PT_INTERP loader substitution"
      binfmt_misc: let a register string create an entry disabled
      selftests/exec: check that a binfmt_misc instance cannot be pinned
      selftests/exec: let binfmt_flag_supported() return a bool
      selftests/exec: test registering an entry disabled
      binfmt_misc: document registering an entry disabled
      selftests/exec: share the bpf handler preconditions
      binfmt_misc: carry pre-opened interpreters in struct binfmt_misc_interp
      binfmt_misc: let a 'B' entry bind its interpreters
      selftests/exec: test interpreters bound to a 'B' entry
      binfmt_misc: document interpreters bound by a 'B' entry
      Merge patch series "binfmt_misc: bind interpreters to a bpf-backed entry"
      binfmt_misc: correctly account pre-opened interpreters
      selftests/exec: test the pre-opened interpreter limit
      binfmt_misc: document the pre-opened interpreter limit
      Merge patch series "binfmt_misc: bound the interpreters an entry can pre-open"

Farid Zakaria (1):
      selftests/exec: add binfmt_misc bpf-backed handler test

 Documentation/admin-guide/binfmt-misc.rst          |  246 ++-
 fs/Kconfig.binfmt                                  |   14 +
 fs/Makefile                                        |    1 +
 fs/binfmt_elf.c                                    |   10 +-
 fs/binfmt_elf_fdpic.c                              |   11 +-
 fs/binfmt_misc.c                                   | 1618 ++++++++++++++------
 fs/binfmt_misc_bpf.c                               |  434 ++++++
 fs/bpf_fs_kfuncs.c                                 |   28 +-
 fs/exec.c                                          |   88 +-
 include/linux/binfmt_misc.h                        |  113 ++
 include/linux/binfmts.h                            |   40 +-
 include/linux/user_namespace.h                     |    3 +
 include/uapi/linux/binfmts.h                       |    7 +
 kernel/ucount.c                                    |    6 +
 kernel/user.c                                      |    4 +-
 tools/testing/selftests/exec/.gitignore            |   11 +
 tools/testing/selftests/exec/Makefile              |   93 ++
 tools/testing/selftests/exec/binfmt_bind_interp.c  |   14 +
 tools/testing/selftests/exec/binfmt_bpf_app.c      |   12 +
 tools/testing/selftests/exec/binfmt_bpf_interp.c   |   15 +
 .../testing/selftests/exec/binfmt_loader_payload.c |  146 ++
 tools/testing/selftests/exec/binfmt_misc_bpf.c     |  638 ++++++++
 tools/testing/selftests/exec/binfmt_misc_common.h  |  315 ++++
 .../testing/selftests/exec/binfmt_misc_disabled.c  |  172 +++
 .../selftests/exec/binfmt_misc_interplimit.c       |  232 +++
 tools/testing/selftests/exec/binfmt_misc_loader.c  |  372 +++++
 tools/testing/selftests/exec/binfmt_misc_selfpin.c |  158 ++
 .../selftests/exec/binfmt_misc_transparent.c       |   95 ++
 .../selftests/exec/binfmt_transparent_interp.c     |  112 ++
 tools/testing/selftests/exec/bpf_interp.bpf.c      |   61 +
 tools/testing/selftests/exec/config                |   10 +
 tools/testing/selftests/exec/interp_bind.bpf.c     |   76 +
 tools/testing/selftests/exec/loader.bpf.c          |   56 +
 tools/testing/selftests/exec/nix_origin.bpf.c      |  224 +++
 tools/testing/selftests/exec/transparent.bpf.c     |   57 +
 35 files changed, 4969 insertions(+), 523 deletions(-)
 create mode 100644 fs/binfmt_misc_bpf.c
 create mode 100644 include/linux/binfmt_misc.h
 create mode 100644 tools/testing/selftests/exec/binfmt_bind_interp.c
 create mode 100644 tools/testing/selftests/exec/binfmt_bpf_app.c
 create mode 100644 tools/testing/selftests/exec/binfmt_bpf_interp.c
 create mode 100644 tools/testing/selftests/exec/binfmt_loader_payload.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_bpf.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_common.h
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_disabled.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_interplimit.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_loader.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_selfpin.c
 create mode 100644 tools/testing/selftests/exec/binfmt_misc_transparent.c
 create mode 100644 tools/testing/selftests/exec/binfmt_transparent_interp.c
 create mode 100644 tools/testing/selftests/exec/bpf_interp.bpf.c
 create mode 100644 tools/testing/selftests/exec/interp_bind.bpf.c
 create mode 100644 tools/testing/selftests/exec/loader.bpf.c
 create mode 100644 tools/testing/selftests/exec/nix_origin.bpf.c
 create mode 100644 tools/testing/selftests/exec/transparent.bpf.c
[GIT PULL 04/18 for v7.3] vfs efs
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This removes the EFS filesystem, the read-only on-disk format SGI used
on IRIX before XFS.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

[1]: https://lore.kernel.org/linux-next/akaE4dbtwZthgqJc@sirena.org.uk

     This conflicts with the net-next tree in MAINTAINERS between commit
     eb56577ae9a5a ("ehea: remove the ehea driver") from the net-next tree and
     commit 969076f31bf63 ("efs: Remove EFS") from this tree. Both commits
     delete adjacent MAINTAINERS entries, so the conflict resolves by removing
     both the EHEA and the EFS FILESYSTEM blocks.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.efs

for you to fetch changes up to bf2fbbca5d49d07917236604837145ee9e662c41:

  Merge patch "efs: Remove EFS" (2026-06-29 10:28:52 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.efs

Please consider pulling these changes from the signed vfs-7.3-rc1.efs tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch "efs: Remove EFS"

Matthew Wilcox (Oracle) (1):
      efs: Remove EFS

 MAINTAINERS                    |   5 -
 fs/Kconfig                     |   1 -
 fs/Makefile                    |   1 -
 fs/efs/Kconfig                 |  16 --
 fs/efs/Makefile                |   8 -
 fs/efs/dir.c                   | 105 ------------
 fs/efs/efs.h                   | 144 ----------------
 fs/efs/file.c                  |  42 -----
 fs/efs/inode.c                 | 315 -----------------------------------
 fs/efs/namei.c                 | 120 --------------
 fs/efs/super.c                 | 368 -----------------------------------------
 fs/efs/symlink.c               |  50 ------
 include/linux/efs_vh.h         |  54 ------
 include/uapi/linux/efs_fs_sb.h |  63 -------
 14 files changed, 1292 deletions(-)
 delete mode 100644 fs/efs/Kconfig
 delete mode 100644 fs/efs/Makefile
 delete mode 100644 fs/efs/dir.c
 delete mode 100644 fs/efs/efs.h
 delete mode 100644 fs/efs/file.c
 delete mode 100644 fs/efs/inode.c
 delete mode 100644 fs/efs/namei.c
 delete mode 100644 fs/efs/super.c
 delete mode 100644 fs/efs/symlink.c
 delete mode 100644 include/linux/efs_vh.h
 delete mode 100644 include/uapi/linux/efs_fs_sb.h
[GIT PULL 05/18 for v7.3] vfs failfs
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

Add failfs and expose a FD_FAILFS_ROOT sentinenel. This allows userspace
to shed their filesystem state completely. A process with its root or
working directory in failfs must anchor every path lookup at an explicit
file descriptor. Absolute paths, absolute symlinks and AT_FDCWD-relative
lookups simply fail.

Failfs is the counterpart to nullfs. nullfs says adds a permanently
empty, immutable directory whose lookups fail with ENOENT but which can
be opened, read, stat'd and mounted upon. Failfs on the other hand fails
every operation. The root cannot be opened at all. A single instance is
mounted during early boot via kern_mount(), which makes it logically
distinct from every mount namespace.

This is accompanied by a new fchroot() system call which makes chrooting
via a file descriptor a first class concept. It's possible to chroot
into failfs as an unprivileged user provided the task has no new
privileges set.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit 1590cf0329716306e948a8fc29f1d3ee87d3989f:

  Linux 7.2-rc4 (2026-07-19 13:54:41 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.failfs

for you to fetch changes up to 1d38e750a389e919c1608dbc61cd5c93cd4915dc:

  Merge patch series "fs: add failfs" (2026-07-27 17:18:00 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.failfs

Please consider pulling these changes from the signed vfs-7.3-rc1.failfs tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (8):
      fs: add failfs
      fs: support FD_FAILFS_ROOT in fchdir()
      fs: add fchroot()
      fs: support FD_FAILFS_ROOT in fchroot()
      arch: hookup fchroot() system call
      selftests/filesystems: add failfs selftests
      Documentation: add failfs documentation
      Merge patch series "fs: add failfs"

 Documentation/filesystems/failfs.rst               |  73 +++
 Documentation/filesystems/index.rst                |   1 +
 arch/alpha/kernel/syscalls/syscall.tbl             |   1 +
 arch/arm/tools/syscall.tbl                         |   1 +
 arch/arm64/tools/syscall_32.tbl                    |   1 +
 arch/m68k/kernel/syscalls/syscall.tbl              |   1 +
 arch/microblaze/kernel/syscalls/syscall.tbl        |   1 +
 arch/mips/kernel/syscalls/syscall_n32.tbl          |   1 +
 arch/mips/kernel/syscalls/syscall_n64.tbl          |   1 +
 arch/mips/kernel/syscalls/syscall_o32.tbl          |   1 +
 arch/parisc/kernel/syscalls/syscall.tbl            |   1 +
 arch/powerpc/kernel/syscalls/syscall.tbl           |   1 +
 arch/s390/kernel/syscalls/syscall.tbl              |   1 +
 arch/sh/kernel/syscalls/syscall.tbl                |   1 +
 arch/sparc/kernel/syscalls/syscall.tbl             |   1 +
 arch/x86/entry/syscalls/syscall_32.tbl             |   1 +
 arch/x86/entry/syscalls/syscall_64.tbl             |   1 +
 arch/xtensa/kernel/syscalls/syscall.tbl            |   1 +
 fs/Makefile                                        |   2 +-
 fs/d_path.c                                        |   3 +-
 fs/failfs.c                                        | 166 ++++++
 fs/internal.h                                      |   4 +
 fs/namespace.c                                     |   1 +
 fs/open.c                                          |  51 +-
 include/linux/syscalls.h                           |   1 +
 include/uapi/asm-generic/unistd.h                  |   6 +-
 include/uapi/linux/fcntl.h                         |   1 +
 include/uapi/linux/magic.h                         |   1 +
 scripts/syscall.tbl                                |   1 +
 tools/include/uapi/asm-generic/unistd.h            |   6 +-
 tools/perf/arch/arm/entry/syscalls/syscall.tbl     |   1 +
 .../perf/arch/mips/entry/syscalls/syscall_n64.tbl  |   1 +
 tools/perf/arch/powerpc/entry/syscalls/syscall.tbl |   1 +
 tools/perf/arch/s390/entry/syscalls/syscall.tbl    |   1 +
 tools/perf/arch/sh/entry/syscalls/syscall.tbl      |   1 +
 tools/perf/arch/sparc/entry/syscalls/syscall.tbl   |   1 +
 tools/perf/arch/x86/entry/syscalls/syscall_32.tbl  |   1 +
 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl  |   1 +
 tools/perf/arch/xtensa/entry/syscalls/syscall.tbl  |   1 +
 tools/scripts/syscall.tbl                          |   1 +
 tools/testing/selftests/Makefile                   |   1 +
 .../selftests/filesystems/failfs/.gitignore        |   2 +
 .../testing/selftests/filesystems/failfs/Makefile  |   5 +
 .../selftests/filesystems/failfs/failfs_test.c     | 585 +++++++++++++++++++++
 44 files changed, 931 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/filesystems/failfs.rst
 create mode 100644 fs/failfs.c
 create mode 100644 tools/testing/selftests/filesystems/failfs/.gitignore
 create mode 100644 tools/testing/selftests/filesystems/failfs/Makefile
 create mode 100644 tools/testing/selftests/filesystems/failfs/failfs_test.c
[GIT PULL 06/18 for v7.3] vfs fat
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This rejects names longer than NAME_MAX in msdos_format_name(). The VFS
only enforces PATH_MAX rather than the length of an individual
component. open() on such a path component reported success for a name
far longer than NAME_MAX.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.fat

for you to fetch changes up to 9d7ed813ee5ff0d469bd99630828ed6fdef4e8da:

  fat: reject name longer than NAME_MAX in msdos_format_name() (2026-06-30 13:01:05 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.fat

Please consider pulling these changes from the signed vfs-7.3-rc1.fat tag.

Thanks!
Christian

----------------------------------------------------------------
Zizhi Wo (1):
      fat: reject name longer than NAME_MAX in msdos_format_name()

 fs/fat/namei_msdos.c | 3 +++
 1 file changed, 3 insertions(+)
[GIT PULL 07/18 for v7.3] vfs freevxfs
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This removes the freevxfs driver. Providing compatibility with
various old-school Unix systems from the 1990s was fun 25 years ago.
Today it mostly serves as fodder for automated bug checkers. There has
been only one known user and contributor in the last 15 years.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit 1590cf0329716306e948a8fc29f1d3ee87d3989f:

  Linux 7.2-rc4 (2026-07-19 13:54:41 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.freevxfs

for you to fetch changes up to a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02:

  freevxfs: remove the driver (2026-07-31 15:23:44 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.freevxfs

Please consider pulling these changes from the signed vfs-7.3-rc1.freevxfs tag.

Thanks!
Christian

----------------------------------------------------------------
Christoph Hellwig (1):
      freevxfs: remove the driver

 MAINTAINERS               |   6 -
 fs/Kconfig                |   1 -
 fs/Makefile               |   1 -
 fs/freevxfs/Kconfig       |  27 ----
 fs/freevxfs/Makefile      |   9 --
 fs/freevxfs/vxfs.h        | 257 ----------------------------------
 fs/freevxfs/vxfs_bmap.c   | 272 ------------------------------------
 fs/freevxfs/vxfs_dir.h    |  68 ---------
 fs/freevxfs/vxfs_extern.h |  49 -------
 fs/freevxfs/vxfs_fshead.c | 166 ----------------------
 fs/freevxfs/vxfs_fshead.h |  43 ------
 fs/freevxfs/vxfs_immed.c  |  53 -------
 fs/freevxfs/vxfs_inode.c  | 314 -----------------------------------------
 fs/freevxfs/vxfs_inode.h  | 169 ----------------------
 fs/freevxfs/vxfs_lookup.c | 273 ------------------------------------
 fs/freevxfs/vxfs_olt.c    | 105 --------------
 fs/freevxfs/vxfs_olt.h    | 120 ----------------
 fs/freevxfs/vxfs_subr.c   | 152 --------------------
 fs/freevxfs/vxfs_super.c  | 347 ----------------------------------------------
 19 files changed, 2432 deletions(-)
 delete mode 100644 fs/freevxfs/Kconfig
 delete mode 100644 fs/freevxfs/Makefile
 delete mode 100644 fs/freevxfs/vxfs.h
 delete mode 100644 fs/freevxfs/vxfs_bmap.c
 delete mode 100644 fs/freevxfs/vxfs_dir.h
 delete mode 100644 fs/freevxfs/vxfs_extern.h
 delete mode 100644 fs/freevxfs/vxfs_fshead.c
 delete mode 100644 fs/freevxfs/vxfs_fshead.h
 delete mode 100644 fs/freevxfs/vxfs_immed.c
 delete mode 100644 fs/freevxfs/vxfs_inode.c
 delete mode 100644 fs/freevxfs/vxfs_inode.h
 delete mode 100644 fs/freevxfs/vxfs_lookup.c
 delete mode 100644 fs/freevxfs/vxfs_olt.c
 delete mode 100644 fs/freevxfs/vxfs_olt.h
 delete mode 100644 fs/freevxfs/vxfs_subr.c
 delete mode 100644 fs/freevxfs/vxfs_super.c
[GIT PULL 10/18 for v7.3] vfs kthread
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This stops kernel threads from sharing filesystem state with userspace.
This work is about 3 cycles old and has been in -next for about that
time.

When the kernel boots init_task creates PID 1 and then kthreadd. From
that point every kthread and PID 1 share the same fs_struct. That is why
pivot_root() has to rewrite the fs_struct of all kthreads. The rewriting
exists so that kthreads can use init's filesystem state when they want
to. It also means userspace can move the ground out from under the
kernel.

PID 1 now gets a completely separate fs_struct. All kthreads are
anchored in a private SB_KERNMOUNT instance of nullfs that cannot be
mounted on and cannot be used to follow other mounts. Userspace init
can no longer affect kthread filesystem state and kthreads can no
longer affect userspace fs state without explicit opting in to that.

Path lookup from a kthread now fails by default. It makes it
deliberately hard to offload security sensitive operations into init's
filesystem state from a kthread.

Places that legitimately need to look something up there opt in through
the new scoped_with_init_fs() which temporarily overrides the caller's
fs_struct with init's. usermodehelpers remain the only kernel tasks that
genuinely share init's filesystem state, since they execute random
binaries in the root filesystem (excellent...).

The visible result is that /proc/2/root is a nullfs with an empty
mountinfo while /proc/1/root is the real root.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.kthread

for you to fetch changes up to b4343aebd3a4dd255b15b2e5b1363d6399da302f:

  initramfs_test: use test init/exit hooks to override init fs (2026-07-31 12:56:51 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.kthread

Please consider pulling these changes from the signed vfs-7.3-rc1.kthread tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (27):
      fs: add switch_fs_struct()
      fs: notice when init abandons fs sharing
      fs: add scoped_with_init_fs()
      fs: add real_fs to track task's actual fs_struct
      fs: make userspace_init_fs a dynamically-initialized pointer
      rnbd: use scoped_with_init_fs() for block device open
      crypto: ccp: use scoped_with_init_fs() for SEV file access
      scsi: target: use scoped_with_init_fs() for ALUA metadata
      scsi: target: use scoped_with_init_fs() for APTPL metadata
      btrfs: use scoped_with_init_fs() for update_dev_time()
      coredump: use scoped_with_init_fs() for coredump path resolution
      fs: use scoped_with_init_fs() for kernel_read_file_from_path_initns()
      ksmbd: use scoped_with_init_fs() for share path resolution
      ksmbd: use scoped_with_init_fs() for filesystem info path lookup
      ksmbd: use scoped_with_init_fs() for VFS path operations
      pnfs/blocklayout: use scoped_with_init_fs() for SCSI device lookup
      initramfs: use scoped_with_init_fs() for rootfs unpacking
      af_unix: use scoped_with_init_fs() for coredump socket lookup
      fs: stop sharing fs_struct between init_task and pid 1
      fs: add umh argument to struct kernel_clone_args
      devtmpfs: create private mount namespace
      nullfs: make nullfs multi-instance
      fs: start all kthreads in nullfs
      fs: stop rewriting kthread fs structs
      fs: stop rewriting paths for PF_EXITING | PF_DUMPCORE
      Merge patch series "fs,kthread: start all kthreads in nullfs"
      initramfs_test: use test init/exit hooks to override init fs

 drivers/base/devtmpfs.c           |   2 +-
 drivers/block/rnbd/rnbd-srv.c     |   4 +-
 drivers/char/misc_minor_kunit.c   |  25 +++++----
 drivers/crypto/ccp/sev-dev.c      |  12 ++---
 drivers/target/target_core_alua.c |  11 +++-
 drivers/target/target_core_pr.c   |   4 +-
 fs/btrfs/volumes.c                |  11 +++-
 fs/coredump.c                     |  11 ++--
 fs/fs_struct.c                    | 103 ++++++++++++++++++++++++++++++++++++--
 fs/kernel_read_file.c             |   9 +---
 fs/namespace.c                    |  16 +++---
 fs/nfs/blocklayout/dev.c          |  15 ++++--
 fs/nullfs.c                       |  12 ++---
 fs/proc/array.c                   |   4 +-
 fs/proc/base.c                    |   8 +--
 fs/proc_namespace.c               |   4 +-
 fs/smb/server/mgmt/share_config.c |   4 +-
 fs/smb/server/smb2pdu.c           |   4 +-
 fs/smb/server/vfs.c               |   9 ++--
 include/linux/fs_struct.h         |  34 +++++++++++++
 include/linux/init_task.h         |   1 +
 include/linux/sched.h             |   1 +
 include/linux/sched/task.h        |   1 +
 init/init_task.c                  |   1 +
 init/initramfs.c                  |  14 ++++--
 init/initramfs_test.c             |  19 ++++++-
 init/main.c                       |  10 +++-
 kernel/fork.c                     |  53 ++++++++++++--------
 kernel/kcmp.c                     |   2 +-
 kernel/umh.c                      |   6 +--
 net/unix/af_unix.c                |  17 +++----
 31 files changed, 311 insertions(+), 116 deletions(-)
[GIT PULL 11/18 for v7.3] vfs lookup
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This refactors lookup_open() and adds vfs_lookup_open() for nfsd.
mnt_want_write() and parent locking are moved into lookup_open()
itself.

audit_inode_child() is also now called in lookup_open() on failure. That
is the calling convention in vfs_create() and vfs_mkdir(), but
lookup_open() made no such call when atomic_open() should have created a
file and did not. And neither did the regular ->create() path fwiw.

This also contains work to remove the unneded excl argument from the
->create() inode op.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.lookup

for you to fetch changes up to 895741772f6ca989da565bcbe4673f12d3d0ac31:

  Merge patch series "fs/namei.c: comment and coding style fixups" (2026-07-31 10:37:40 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.lookup

Please consider pulling these changes from the signed vfs-7.3-rc1.lookup tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (6):
      Merge patch series "VFS: refactor lookup_open and add vfs_lookup()"
      Merge patch series "vfs: call audit_inode_child() in lookup_open() on failure"
      fs/namei.c: update stale comments in lookup_open()
      fs/namei.c: fix kerneldoc of atomic_open() and vfs_lookup_open()
      fs/namei.c: fix coding style in atomic_open() and lookup_open()
      Merge patch series "fs/namei.c: comment and coding style fixups"

Jori Koolstra (3):
      vfs: move create error && negative dentry case in lookup_open() up
      vfs: call audit_inode_child() in lookup_open() on failure
      fs/namei.c: update kerneldoc of atomic_open()

NeilBrown (4):
      VFS: move mnt_want_write() and locking into lookup_open()
      VFS: move delegated_inode retry loop into lookup_open()
      VFS: add vfs_lookup_open() for nfsd
      Remove excl arg to ->create inode_operation

 Documentation/filesystems/locking.rst |   2 +-
 Documentation/filesystems/porting.rst |   8 +
 Documentation/filesystems/vfs.rst     |   2 +-
 fs/9p/vfs_inode.c                     |   3 +-
 fs/9p/vfs_inode_dotl.c                |   3 +-
 fs/affs/affs.h                        |   2 +-
 fs/affs/namei.c                       |   2 +-
 fs/afs/dir.c                          |   4 +-
 fs/bad_inode.c                        |   2 +-
 fs/bfs/dir.c                          |   2 +-
 fs/btrfs/inode.c                      |   2 +-
 fs/ceph/dir.c                         |   2 +-
 fs/coda/dir.c                         |   2 +-
 fs/ecryptfs/inode.c                   |   2 +-
 fs/efivarfs/inode.c                   |   2 +-
 fs/exfat/namei.c                      |   2 +-
 fs/ext2/namei.c                       |   2 +-
 fs/ext4/namei.c                       |   2 +-
 fs/f2fs/namei.c                       |   2 +-
 fs/fat/namei_msdos.c                  |   2 +-
 fs/fat/namei_vfat.c                   |   2 +-
 fs/fuse/dir.c                         |   2 +-
 fs/gfs2/inode.c                       |   5 +-
 fs/hfs/dir.c                          |   2 +-
 fs/hfsplus/dir.c                      |   2 +-
 fs/hostfs/hostfs_kern.c               |   2 +-
 fs/hpfs/namei.c                       |   2 +-
 fs/hugetlbfs/inode.c                  |   2 +-
 fs/jffs2/dir.c                        |   4 +-
 fs/jfs/namei.c                        |   2 +-
 fs/minix/namei.c                      |   2 +-
 fs/namei.c                            | 351 ++++++++++++++++++++++++----------
 fs/nfs/dir.c                          |   4 +-
 fs/nfs/internal.h                     |   2 +-
 fs/nilfs2/namei.c                     |   2 +-
 fs/ntfs/namei.c                       |   2 +-
 fs/ntfs3/namei.c                      |   2 +-
 fs/ocfs2/dlmfs/dlmfs.c                |   3 +-
 fs/ocfs2/namei.c                      |   3 +-
 fs/omfs/dir.c                         |   2 +-
 fs/orangefs/namei.c                   |   3 +-
 fs/overlayfs/dir.c                    |   2 +-
 fs/ramfs/inode.c                      |   2 +-
 fs/smb/client/cifsfs.h                |   2 +-
 fs/smb/client/dir.c                   |   2 +-
 fs/ubifs/dir.c                        |   2 +-
 fs/udf/namei.c                        |   2 +-
 fs/ufs/namei.c                        |   3 +-
 fs/vboxsf/dir.c                       |   4 +-
 fs/xfs/xfs_iops.c                     |   5 +-
 include/linux/fs.h                    |   2 +-
 include/linux/namei.h                 |   3 +
 ipc/mqueue.c                          |   2 +-
 mm/shmem.c                            |   2 +-
 54 files changed, 313 insertions(+), 171 deletions(-)
[GIT PULL 12/18 for v7.3] vfs misc
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

- The lockref dead-count handling is tidied up. The open-coded check for
  a count below zero as the dead marker relies on information the caller should
  not have.

- make put_mnt_ns() leave mounts connected. Destroying a mount namespace
  disconnected its mounts from their mount points. So a file descriptor still
  open on the parent of a mount point could be used to peek under it.

  Locked mounts were already kept connected to prevent exactly that. But a
  mount is only locked when its tree is copied across a user namespace
  boundary. So a mount namespace set up by a privileged component had no locked
  mounts and its mounts were disconnected. Passing UMOUNT_CONNECTED keeps every
  mount connected and prevents that bug.

- vfs_prepare_mode() passes S_IFDIR for directories. I meant to fix that ago
  but didn't get to it. So now someone finally did it. That kills the exception
  where the could be 0 when a directory was created whereas every other
  creation operation passed it explicitly already.

- move long delayed work for ufs, jffs2, hfsplus, hfs and affs from the
  per-cpu system_long_wq to the new unbound system_dfl_long_wq. None of that
  work relies on per-cpu state and the work item is enqueued with
  queue_delayed_work() whose timer is global anyway. So it may as well benefit
  from scheduler task placement.

/* Smaller fixes and cleanups */

- unlock_buffer() and journal_end_buffer_io_sync() use clear_and_wake_up_bit()

- the pipe page pools are unified into a single per-pipe pool and the extra
  wake_up(rd_wait) is limited to EPOLLET consumers

- eventpoll now computes its timer slack lazily in ep_poll()

- shrink_dcache_for_umount() keeps making progress on busy roots

- excess xarray nodes are freed in clear_inode()

- romfs detects hard link cycles

- the user path of nested backing files is fixed

- pidfd holds exec_update_lock around the namespace ioctl

- non-memcg-aware nr_cached_objects is skipped during memcg slab shrink

- iomap_write_iter() always returns status

- mangle_path() is renamed to seq_mangle_path()

- inode timestamp accessors are annotated

- new regression test for pipe->poll_usage. 

- a few documentation, kernel-doc and selftest fixes

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

[1]: https://lore.kernel.org/linux-next/amnyXEARrAoFoPAj@sirena.org.uk

This conflicts with the gfs2 tree in two places. Both are caused by
commit 91e27ed8a387c ("lockref: tidy up dead count handling") from
this tree, which renames __lockref_is_dead() to lockref_is_dead() and
converts all callers, including the ones in gfs2.

The first conflict is in fs/gfs2/glock.c against commit da26828b82a45
("gfs2: Remove the glock lru list and shrinker"). Reported in [1].

[2]: https://lore.kernel.org/linux-next/an208OpVMNEI2Zfo@sirena.org.uk

The second conflict is in fs/gfs2/lock_dlm.c against commit
657e5af4fe0b9 ("gfs2: harden gfs2_glock_hold").

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

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

for you to fetch changes up to dcacab904fe78d60840ba947a104993ee9ded887:

  selftests/namespaces: Fix racy pipe handshake in timens and pidns_separate (2026-08-13 12:20:42 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.misc

Please consider pulling these changes from the signed vfs-7.3-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()

Amin Vakil (1):
      selftests: proc: include fcntl.h in proc-pidns

Baokun Li (1):
      fs: fix user path of nested backing files

Ben Dooks (1):
      fs: nullfs should include mount.h

Breno Leitao (1):
      fs/pipe: unify the page pools into a single per-pipe pool

Brian Foster (1):
      iomap: always return status from iomap_write_iter

Chen Linxuan (1):
      pidfd: hold exec_update_lock around namespace ioctl

Christian Brauner (5):
      Merge patch series "fs: refactor code to use clear_and_wake_up_bit()"
      Merge patch series "vfs: pass S_IFDIR mode to vfs_prepare_mode()"
      Merge patch series "fs: Move long delayed work on system_dfl_long_wq"
      Merge patch series "put_mnt_ns(): leave mounts connected"
      Merge patch series "lockref tidy ups + touch ups to it's usage by dcache"

Jann Horn (1):
      fs: document semantics of kstat::{uid,gid} fields

Johannes Berg (1):
      seq_file: rename mangle_path to seq_mangle_path

Jori Koolstra (31):
      vfs: pass S_IFDIR mode to vfs_prepare_mode()
      9p: drop redundant S_IFDIR from mkdir
      affs: drop redundant S_IFDIR from mkdir
      afs: drop redundant S_IFDIR from mkdir
      autofs: drop redundant S_IFDIR from mkdir
      btrfs: drop redundant S_IFDIR from mkdir
      ceph: drop redundant S_IFDIR from mkdir
      ext2: drop redundant S_IFDIR from mkdir
      ext4: drop redundant S_IFDIR from mkdir
      f2fs: drop redundant S_IFDIR from mkdir
      gfs2: drop redundant S_IFDIR from mkdir
      hfs: drop redundant S_IFDIR from mkdir
      hfsplus: drop redundant S_IFDIR from mkdir
      hpfs: drop redundant S_IFDIR from mkdir
      hugetlbfs: drop redundant S_IFDIR from mkdir
      jffs2: drop redundant S_IFDIR from mkdir
      jfs: drop redundant S_IFDIR from mkdir
      minix: drop redundant S_IFDIR from mkdir
      nilfs2: drop redundant S_IFDIR from mkdir
      ntfs3: drop redundant S_IFDIR from mkdir
      ocfs2: drop redundant S_IFDIR from mkdir
      ocfs2: dlmfs: drop redundant S_IFDIR from mkdir
      omfs: drop redundant S_IFDIR from mkdir
      orangefs: drop redundant S_IFDIR from mkdir
      ramfs: drop redundant S_IFDIR from mkdir
      udf: drop redundant S_IFDIR from mkdir
      ufs: drop redundant S_IFDIR from mkdir
      nfs: drop redundant S_IFDIR from mkdir
      ubifs: drop redundant S_IFDIR from mkdir
      xfs: drop redundant S_IFDIR from mkdir
      ntfs: drop redundant S_IFDIR from mkdir

Karl Mehltretter (1):
      dcache: keep shrink_dcache_for_umount() making progress on busy roots

Luis Henriques (1):
      posix_acl: remove useless code

Malaya Kumar Rout (1):
      selftests/statmount: Fix file descriptor leak in setup_namespace

Manush Prajwal (1):
      fs: fix switch/case indentation in sysfs() syscall

Marco Crivellari (5):
      ufs: Move long delayed work on system_dfl_long_wq
      fs/jffs2: Move long delayed work on system_dfl_long_wq
      hfsplus: Move long delayed work on system_dfl_long_wq
      hfs: Move long delayed work on system_dfl_long_wq
      affs: Move long delayed work on system_dfl_long_wq

Mateusz Guzik (2):
      lockref: tidy up dead count handling
      dcache: use lockref routines for dead count checks

Matthew Wilcox (Oracle) (1):
      fs: Free any excess xarray nodes in clear_inode()

Noah Orlando (2):
      put_mnt_ns(): leave mounts connected
      selftests/filesystems: add mntns cleanup test

Oleg Nesterov (2):
      pipe: only enable the extra wake_up(rd_wait) for EPOLLET consumers
      selftests/epoll: add a regression test for pipe->poll_usage

Randy Dunlap (1):
      nstree: add/fix struct ns_id_req kernel-doc member fields

Ricardo B. Marlière (SUSE) (1):
      selftests/namespaces: Fix racy pipe handshake in timens and pidns_separate

Shivank Sharma (1):
      initramfs: fix typo in reserve_initrd_mem comment

Usama Arif (2):
      fs/super: skip non-memcg-aware nr_cached_objects in memcg slab shrink
      eventpoll: compute timer slack lazily in ep_poll()

Wang Yan (1):
      selftests/filesystems: fix spelling error in statmount test comment

Yichong Chen (1):
      fs: remove stale inode_insert5() kernel-doc parameter

Yu Peng (1):
      fs: annotate inode timestamp accessors

Yuhong Cheng (1):
      docs: filesystems: porting: fix spelling of returned and instead

이상호 (1):
      romfs: detect hard link cycles

 Documentation/filesystems/porting.rst              |   2 +-
 fs/9p/vfs_inode.c                                  |   2 +-
 fs/9p/vfs_inode_dotl.c                             |   1 -
 fs/affs/namei.c                                    |   2 +-
 fs/affs/super.c                                    |   2 +-
 fs/afs/dir.c                                       |   2 +-
 fs/autofs/root.c                                   |   2 +-
 fs/backing-file.c                                  |   2 +-
 fs/btrfs/inode.c                                   |   2 +-
 fs/ceph/dir.c                                      |   3 +-
 fs/coda/dir.c                                      |   7 +-
 fs/dcache.c                                        |  23 ++-
 fs/erofs/zdata.c                                   |   4 +-
 fs/eventpoll.c                                     |   6 +-
 fs/ext2/namei.c                                    |   2 +-
 fs/ext4/namei.c                                    |   2 +-
 fs/f2fs/namei.c                                    |   2 +-
 fs/filesystems.c                                   |  18 +-
 fs/fuse/dir.c                                      |   8 +
 fs/gfs2/glock.c                                    |   6 +-
 fs/gfs2/inode.c                                    |   2 +-
 fs/gfs2/lock_dlm.c                                 |   6 +-
 fs/gfs2/quota.c                                    |   4 +-
 fs/hfs/dir.c                                       |   2 +-
 fs/hfs/super.c                                     |   2 +-
 fs/hfsplus/dir.c                                   |   2 +-
 fs/hfsplus/super.c                                 |   2 +-
 fs/hpfs/namei.c                                    |   4 +-
 fs/hugetlbfs/inode.c                               |   2 +-
 fs/inode.c                                         |  42 ++---
 fs/iomap/buffered-io.c                             |   4 +-
 fs/jffs2/dir.c                                     |   2 -
 fs/jffs2/wbuf.c                                    |   2 +-
 fs/jfs/namei.c                                     |   2 +-
 fs/minix/namei.c                                   |   2 +-
 fs/namei.c                                         |   7 +-
 fs/namespace.c                                     |   2 +-
 fs/nfs/dir.c                                       |   2 +-
 fs/nilfs2/namei.c                                  |   2 +-
 fs/ntfs/namei.c                                    |   2 +-
 fs/ntfs3/namei.c                                   |   2 +-
 fs/nullfs.c                                        |   2 +
 fs/ocfs2/dlmfs/dlmfs.c                             |   2 +-
 fs/ocfs2/namei.c                                   |   2 +-
 fs/omfs/dir.c                                      |   2 +-
 fs/orangefs/namei.c                                |   2 +-
 fs/pidfs.c                                         |  43 +++--
 fs/pipe.c                                          | 191 ++++++++++-----------
 fs/posix_acl.c                                     |   2 -
 fs/ramfs/inode.c                                   |   2 +-
 fs/romfs/super.c                                   |   8 +
 fs/seq_file.c                                      |  11 +-
 fs/smb/client/inode.c                              |   7 +
 fs/stat.c                                          |   2 +-
 fs/super.c                                         |  19 +-
 fs/ubifs/dir.c                                     |   2 +-
 fs/udf/namei.c                                     |   2 +-
 fs/ufs/namei.c                                     |   2 +-
 fs/ufs/super.c                                     |   2 +-
 fs/xfs/xfs_buf.c                                   |   4 +-
 fs/xfs/xfs_iops.c                                  |   2 +-
 fs/xfs/xfs_qm.c                                    |   4 +-
 include/linux/fs.h                                 |  20 +--
 include/linux/lockref.h                            |  12 +-
 include/linux/pipe_fs_i.h                          |  26 ++-
 include/linux/seq_file.h                           |   2 +-
 include/linux/stat.h                               |   4 +-
 include/uapi/linux/nsfs.h                          |   7 +-
 init/initramfs.c                                   |   2 +-
 lib/lockref.c                                      |   2 +-
 lib/seq_buf.c                                      |   2 +-
 tools/testing/selftests/Makefile                   |   1 +
 .../filesystems/epoll/epoll_wakeup_test.c          |  23 +++
 .../selftests/filesystems/mntns_cleanup/.gitignore |   2 +
 .../selftests/filesystems/mntns_cleanup/Makefile   |   6 +
 .../filesystems/mntns_cleanup/mntns_cleanup_test.c |  58 +++++++
 .../filesystems/statmount/statmount_test.c         |   5 +-
 tools/testing/selftests/namespaces/nsid_test.c     |   4 -
 tools/testing/selftests/proc/proc-pidns.c          |   1 +
 79 files changed, 419 insertions(+), 266 deletions(-)
 create mode 100644 tools/testing/selftests/filesystems/mntns_cleanup/.gitignore
 create mode 100644 tools/testing/selftests/filesystems/mntns_cleanup/Makefile
 create mode 100644 tools/testing/selftests/filesystems/mntns_cleanup/mntns_cleanup_test.c
[GIT PULL 13/18 for v7.3] vfs mount
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

- Make the legacy mount API notify pollers of propagation changes. Changing
  propagation via change_mnt_propagation() or MOVE_MOUNT_SET_GROUP update the
  propagation relationship of the target mount. Unlike mount_setattr() neither
  path touched the affected mount namespace. So pollers of
  /proc/<pid>/mountinfo were never woken.

- Also remove a redundant panic() in mnt_init().

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.mount

for you to fetch changes up to 083e8742e301a24f0c458696b45b481345888b85:

  mount: remove redundant panic() in mnt_init() (2026-07-22 17:57:45 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.mount

Please consider pulling these changes from the signed vfs-7.3-rc1.mount tag.

Thanks!
Christian

----------------------------------------------------------------
Guopeng Zhang (1):
      fs/namespace: notify pollers of legacy propagation changes

Hamza Mahfooz (1):
      mount: remove redundant panic() in mnt_init()

 fs/namespace.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
[GIT PULL 14/18 for v7.3] vfs netfs
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This sunsets cachefiles ondemand mode. It was an effort to make fscache
usable as a kernel cache for lazy pulling. EROFS over fscache was its
only in-tree user. fscache has since become netfslib-oriented while
EROFS never acts as a network filesystem and EROFS over fscache has been
removed. So this cleans up the netfs, fscache and cachefiles side as
well.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit db2ddb87143519e20a95aa36c60b36107b736a58:

  Linux 7.2-rc7 (2026-08-09 14:54:50 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.netfs

for you to fetch changes up to 949eb95d5bcc530e6ce74cc95897c1849c53ea89:

  cachefiles,netfs: sunset ondemand mode (2026-08-12 16:24:26 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.netfs

Please consider pulling these changes from the signed vfs-7.3-rc1.netfs tag.

Thanks!
Christian

----------------------------------------------------------------
Gao Xiang (1):
      cachefiles,netfs: sunset ondemand mode

 Documentation/filesystems/caching/cachefiles.rst | 179 ------
 fs/cachefiles/Kconfig                            |  12 -
 fs/cachefiles/Makefile                           |   1 -
 fs/cachefiles/daemon.c                           |  96 +--
 fs/cachefiles/interface.c                        |   8 -
 fs/cachefiles/internal.h                         | 134 ----
 fs/cachefiles/io.c                               |  26 +-
 fs/cachefiles/namei.c                            |   8 -
 fs/cachefiles/ondemand.c                         | 761 -----------------------
 include/linux/netfs.h                            |   9 -
 include/trace/events/cachefiles.h                | 184 +-----
 include/uapi/linux/cachefiles.h                  |  68 --
 kernel/bpf/btf.c                                 |   7 -
 13 files changed, 9 insertions(+), 1484 deletions(-)
 delete mode 100644 fs/cachefiles/ondemand.c
 delete mode 100644 include/uapi/linux/cachefiles.h
[GIT PULL 15/18 for v7.3] vfs nilfs2
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This converts nilfs2 O_DIRECT reads to iomap and removes its use of
blockdev_direct_IO().

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit 1590cf0329716306e948a8fc29f1d3ee87d3989f:

  Linux 7.2-rc4 (2026-07-19 13:54:41 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.nilfs2

for you to fetch changes up to d5c57d9bf03516d625521cd6cf5acfd93e3e63c7:

  Merge patch series "nilfs2: convert O_DIRECT reads to iomap" (2026-07-27 11:43:15 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.nilfs2

Please consider pulling these changes from the signed vfs-7.3-rc1.nilfs2 tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (1):
      Merge patch series "nilfs2: convert O_DIRECT reads to iomap"

Viacheslav Dubeyko (2):
      nilfs2: add iomap operations for direct I/O reads
      nilfs2: switch O_DIRECT reads to iomap

 fs/nilfs2/Kconfig  |  2 +-
 fs/nilfs2/Makefile |  2 +-
 fs/nilfs2/file.c   | 40 +++++++++++++++++++++++++++---
 fs/nilfs2/inode.c  | 13 ----------
 fs/nilfs2/iomap.c  | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 fs/nilfs2/iomap.h  | 13 ++++++++++
 6 files changed, 123 insertions(+), 18 deletions(-)
 create mode 100644 fs/nilfs2/iomap.c
 create mode 100644 fs/nilfs2/iomap.h
[GIT PULL 16/18 for v7.3] vfs ovl
Posted by Christian Brauner an hour ago
Hey Linus,

/* Summary */

This lets the merged overlayfs mount itself be idmapped through
mount_setattr(MOUNT_ATTR_IDMAP). In addition to the already supported
idmapped lower and upper layers. The same overlay tree can then be
exposed under a different ownership view.

Overlayfs already normalizes every underlying id through the relevant
layer idmap when ovl_copyattr() copies attributes into the overlay
inode. So the overlay inode's i_uid and i_gid are overlay-final ids.

The overlay mount idmap composes on top of that and is applied at the
overlay-inode boundary only while the underlying layers keep being
accessed with the mounter's credentials through their own (possibly
idmapped) mounts.

So this only changes how the caller sees the overlay inode and never
widens the mounter's access to the layers. The second,
mounter-credential check in ovl_permission() against the real inode
stays on the layer idmap.

Most paths need no change because the VFS applies the mount idmap to
the overlay inode before overlayfs runs or after it returns at the
syscall boundary. Overlayfs only has to change where it bypasses the
generic path.

This also included is a fix for a double end_creating() on the overlayfs
casefold-mismatch path.

/* Testing */

No build failures or warnings were observed.

/* Conflicts */

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

No known conflicts.

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

No known conflicts.

The following changes since commit dc59e4fea9d83f03bad6bddf3fa2e52491777482:

  Linux 7.2-rc1 (2026-06-28 12:01:31 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.3-rc1.ovl

for you to fetch changes up to 077ab8985ee278c3d8618182d335b0f0cd919e16:

  ovl: fix double end_creating() on the casefold-mismatch path (2026-08-12 11:40:35 +0200)

----------------------------------------------------------------
vfs-7.3-rc1.ovl

Please consider pulling these changes from the signed vfs-7.3-rc1.ovl tag.

Thanks!
Christian

----------------------------------------------------------------
Christian Brauner (11):
      ovl: handle idmapped mounts in ovl_create_object() and ovl_tmpfile()
      ovl: handle idmapped mounts in ovl_permission()
      ovl: handle idmapped mounts in ovl_setattr()
      ovl: handle idmapped mounts in ovl_getattr()
      ovl: handle idmapped mounts in ovl_set_acl()
      ovl: allow idmapping overlay mounts
      docs: document idmapped overlay mounts
      selftests/filesystems/overlayfs: fix set_layers_via_fds link error
      selftests/filesystems/overlayfs: test idmapped overlay mounts
      ovl: document security.capability idmapping on the xattr forward paths
      Merge patch series "ovl: support idmapped overlay mounts"

Vivek Parikh (1):
      ovl: fix double end_creating() on the casefold-mismatch path

 Documentation/filesystems/overlayfs.rst            |  16 +
 fs/overlayfs/dir.c                                 |  17 +-
 fs/overlayfs/inode.c                               |  26 +-
 fs/overlayfs/overlayfs.h                           |   1 +
 fs/overlayfs/super.c                               |   2 +-
 fs/overlayfs/xattrs.c                              |   1 +
 .../selftests/filesystems/overlayfs/.gitignore     |   1 +
 .../selftests/filesystems/overlayfs/Makefile       |   2 +
 .../filesystems/overlayfs/idmapped_mounts.c        | 501 +++++++++++++++++++++
 .../filesystems/overlayfs/set_layers_via_fds.c     |  16 +-
 10 files changed, 560 insertions(+), 23 deletions(-)
 create mode 100644 tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c