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
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(-)
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(-)
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
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
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
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(+)
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
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(-)
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(-)
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
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(-)
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
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
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
© 2016 - 2026 Red Hat, Inc.