* [GIT PULL 00/12 for v7.1] v7.1
@ 2026-04-10 15:15 Christian Brauner
2026-04-10 15:16 ` [GIT PULL 01/12 for v7.1] vfs writeback Christian Brauner
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:15 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
This is the batch of pull requests for the v7.1 merge window.
This cycle has several new features and a good amount of infrastructure
work.
There are three new clone3() flags for pidfd-based process lifecycle
management. CLONE_AUTOREAP makes a child auto-reap on exit without
becoming a zombie. Unlike SA_NOCLDWAIT or SIG_IGN on SIGCHLD this is a
per-process property on the child, not a parent-scoped setting affecting
all children. The flag survives reparenting so subreaper or init won't
need to deal with it. CLONE_NNP sets no_new_privs on the child at clone
time, allowing the parent to impose it without affecting itself.
CLONE_PIDFD_AUTOKILL ties a child's lifetime to the pidfd returned from
clone3() - when the last reference to that struct file is closed the
kernel sends SIGKILL to the child. This is useful for container
runtimes, service managers, and sandboxed subprocess execution where the
child must die if the parent crashes. CLONE_PIDFD_AUTOKILL requires both
CLONE_PIDFD and CLONE_AUTOREAP. The pidfd_info struct also gains a
coredump_code field.
The mount namespace work introduces FSMOUNT_NAMESPACE for fsmount()
which creates a new mount namespace with the newly created filesystem
attached, returning a namespace fd instead of an O_PATH mount fd. This
accompanies last cycle's OPEN_TREE_NAMESPACE and is especially useful
when mounting a real filesystem to serve as a container rootfs.
Also new is support for creating empty mount namespaces via
CLONE_EMPTY_MNTNS for clone3() and UNSHARE_EMPTY_MNTNS for unshare().
These create a namespace containing only a single nullfs root mount with
an immutable empty directory. The intended workflow is to mount a real
filesystem over the root and build the mount table from scratch, which
avoids copying and tearing down the entire parent mount tree.
MOVE_MOUNT_BENEATH is extended to target the caller's rootfs and to
transfer the MNT_LOCKED property from the top mount to the mount
beneath. This allows safely modifying an inherited mount table after
unprivileged namespace creation via unshare(CLONE_NEWUSER | CLONE_NEWNS)
and makes it possible to switch out the rootfs without pivot_root(2).
The simple_xattr subsystem is reworked from an rbtree protected by a
reader-writer spinlock to an rhashtable with RCU-based lockless reads.
All consumers (shmem, kernfs, pidfs) are converted and the rbtree code
is removed. On top of this, user.* extended attributes are now supported
on sockets. Sockfs sockets get per-inode limits of 128 xattrs and 128KB
total value size. The practical motivation comes from systemd and GNOME
expanding their use of Varlink as an IPC mechanism - with user.* xattrs
a service can label its socket with the IPC protocol it speaks and eBPF
programs can selectively capture traffic on those sockets.
The inode->i_ino field is widened from unsigned long to u64. This is a
treewide change affecting format strings and tracepoints across 222
files. On 64-bit hosts this makes no material difference but it
eliminates the 32-bit hashing hacks various filesystems had to use.
Filesystem-level T10 protection information support is added. The
existing block layer PI code is refactored to be reusable and wired up
through iomap into XFS. This increases read performance up to 15% for
4k I/O compared to the automatic below-the-covers block layer approach.
The metadata buffer_head tracking accumulated in struct address_space
over the years is cleaned up and moved into filesystem-private inode
structures. The private_list, private_data, and private_lock fields are
removed from struct address_space, saving 3 longs in struct inode for
the vast majority of inodes.
The audit subsystem's excessive dput/dget calls during context setup and
reset are addressed by adding a pool of extra fs->pwd references to
fs_struct. This avoids the spinlock contention on the pwd dentry lock
that was causing noticeable performance regressions on systems with many
CPUs doing open/close with audit enabled.
The directory locking centralization continues. The remaining places
where explicit inode_lock(), lock_rename(), or similar are used outside
the core VFS are converted to use the start_creating/start_removing/
start_renaming interfaces. The biggest changes are in overlayfs,
with smaller conversions in cachefiles, nfsd, apparmor, and selinux.
lock_rename(), lock_rename_child(), and unlock_rename() are unexported.
The writeback subsystem gets new helper APIs and f2fs, gfs2, and nfs are
converted to stop accessing writeback internals directly.
Smaller items include namespace helper macros (FOR_EACH_NS_TYPE(),
CLONE_NS_ALL), FAT timestamp conversion KUnit tests, removal of unused
fs_context infrastructure now that the conversion is finished, a fix
for architecture-specific compat_ftruncate64 enforcing the non-LFS file
size limit, trivial ->setattr rename cleanups, dcache bucket count
fixes, mbcache shrink work ordering fix, omfs superblock validation,
a coredump tracepoint, dirent_size() helper, scoped user access
conversion, runtime const for file/bfile caches, and permitting
dynamic_dname()s up to NAME_MAX.
Thanks!
Christian
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 01/12 for v7.1] vfs writeback
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
@ 2026-04-10 15:16 ` Christian Brauner
2026-04-10 15:16 ` [GIT PULL 02/12 for v7.1] vfs xattr Christian Brauner
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:16 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
The series introduces writeback helper APIs and converts f2fs, gfs2
and nfs to stop accessing writeback internals directly.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 9702969978695d9a699a1f34771580cdbb153b33:
Merge tag 'slab-for-7.0-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab (2026-02-16 13:41:38 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.writeback
for you to fetch changes up to 86566865986c4fa1963aace4ef5181501b2974c7:
Merge patch series "Avoid filesystem references to writeback internals" (2026-02-17 13:25:19 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.writeback
Please consider pulling these changes from the signed vfs-7.1-rc1.writeback tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (1):
Merge patch series "Avoid filesystem references to writeback internals"
Kundan Kumar (4):
writeback: prep helpers for dirty-limit and writeback accounting
f2fs: stop using writeback internals for dirty_exceeded checks
gfs2: stop using writeback internals for dirty_exceeded check
nfs: stop using writeback internals for WB_WRITEBACK accounting
fs/f2fs/node.c | 4 ++--
fs/f2fs/segment.h | 2 +-
fs/gfs2/super.c | 2 +-
fs/nfs/internal.h | 2 +-
fs/nfs/write.c | 3 +--
include/linux/backing-dev.h | 13 +++++++++++++
6 files changed, 19 insertions(+), 7 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 02/12 for v7.1] vfs xattr
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
2026-04-10 15:16 ` [GIT PULL 01/12 for v7.1] vfs writeback Christian Brauner
@ 2026-04-10 15:16 ` Christian Brauner
2026-04-10 15:16 ` [GIT PULL 03/12 for v7.1] vfs directory Christian Brauner
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:16 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Rework simple xattrs and support user.* xattrs on sockets
This reworks the simple_xattr infrastructure and adds support for
user.* extended attributes on sockets.
The simple_xattr subsystem currently uses an rbtree protected by a
reader-writer spinlock. This series replaces the rbtree with an
rhashtable giving O(1) average-case lookup with RCU-based lockless
reads. This sped up concurrent access patterns on tmpfs quite a bit
and it's an overall easy enough conversion to do and gets rid or
rwlock_t.
The conversion is done incrementally: a new rhashtable path is added
alongside the existing rbtree, consumers are migrated one at a time
(shmem, kernfs, pidfs), and then the rbtree code is removed. All three
consumers switch from embedded structs to pointer-based lazy
allocation so the rhashtable overhead is only paid for inodes that
actually use xattrs.
With this infrastructure in place the series adds support for user.*
xattrs on sockets. Path-based AF_UNIX sockets inherit xattr support
from the underlying filesystem (e.g. tmpfs) but sockets in sockfs -
that is everything created via socket() including abstract namespace
AF_UNIX sockets - had no xattr support at all.
The xattr_permission() checks are reworked to allow user.* xattrs on
S_IFSOCK inodes. Sockfs sockets get per-inode limits of 128 xattrs and
128KB total value size matching the limits already in use for kernfs.
The practical motivation comes from several directions. systemd and
GNOME are expanding their use of Varlink as an IPC mechanism. For
D-Bus there are tools like dbus-monitor that can observe IPC traffic
across the system but this only works because D-Bus has a central
broker. For Varlink there is no broker and there is currently no way
to identify which sockets speak Varlink. With user.* xattrs on sockets
a service can label its socket with the IPC protocol it speaks (e.g.,
user.varlink=1) and an eBPF program can then selectively capture
traffic on those sockets. Enumerating bound sockets via netlink
combined with these xattr labels gives a way to discover all Varlink
IPC entrypoints for debugging and introspection.
Similarly, systemd-journald wants to use xattrs on the /dev/log socket
for protocol negotiation to indicate whether RFC 5424 structured
syslog is supported or whether only the legacy RFC 3164 format should
be used.
In containers these labels are particularly useful as high-privilege
or more complicated solutions for socket identification aren't
available.
The series comes with comprehensive selftests covering path-based
AF_UNIX sockets, sockfs socket operations, per-inode limit
enforcement, and xattr operations across multiple address families
(AF_INET, AF_INET6, AF_NETLINK, AF_PACKET).
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f:
Linux 7.0-rc1 (2026-02-22 13:18:59 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.xattr
for you to fetch changes up to 98779186aa0b3367489a87c6d8bc0911f577444e:
Merge patch series "xattr: rework simple xattrs and support user.* xattrs on sockets" (2026-03-02 11:06:43 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.xattr
Please consider pulling these changes from the signed vfs-7.1-rc1.xattr tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (15):
xattr: add rcu_head and rhash_head to struct simple_xattr
xattr: add rhashtable-based simple_xattr infrastructure
shmem: adapt to rhashtable-based simple_xattrs with lazy allocation
kernfs: adapt to rhashtable-based simple_xattrs with lazy allocation
pidfs: adapt to rhashtable-based simple_xattrs
xattr: remove rbtree-based simple_xattr infrastructure
xattr: add xattr_permission_error()
xattr: switch xattr_permission() to switch statement
xattr: move user limits for xattrs to generic infra
xattr,net: support limited amount of extended attributes on sockfs sockets
xattr: support extended attributes on sockets
selftests/xattr: path-based AF_UNIX socket xattr tests
selftests/xattr: sockfs socket xattr tests
selftests/xattr: test xattrs on various socket families
Merge patch series "xattr: rework simple xattrs and support user.* xattrs on sockets"
fs/kernfs/dir.c | 15 +-
fs/kernfs/inode.c | 99 +----
fs/kernfs/kernfs-internal.h | 5 +-
fs/pidfs.c | 64 +--
fs/xattr.c | 423 +++++++++++++------
include/linux/kernfs.h | 2 -
include/linux/shmem_fs.h | 2 +-
include/linux/xattr.h | 47 ++-
mm/shmem.c | 46 +-
net/socket.c | 119 ++++--
.../testing/selftests/filesystems/xattr/.gitignore | 3 +
tools/testing/selftests/filesystems/xattr/Makefile | 6 +
.../filesystems/xattr/xattr_socket_test.c | 470 +++++++++++++++++++++
.../filesystems/xattr/xattr_socket_types_test.c | 177 ++++++++
.../filesystems/xattr/xattr_sockfs_test.c | 363 ++++++++++++++++
15 files changed, 1546 insertions(+), 295 deletions(-)
create mode 100644 tools/testing/selftests/filesystems/xattr/.gitignore
create mode 100644 tools/testing/selftests/filesystems/xattr/Makefile
create mode 100644 tools/testing/selftests/filesystems/xattr/xattr_socket_test.c
create mode 100644 tools/testing/selftests/filesystems/xattr/xattr_socket_types_test.c
create mode 100644 tools/testing/selftests/filesystems/xattr/xattr_sockfs_test.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 03/12 for v7.1] vfs directory
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
2026-04-10 15:16 ` [GIT PULL 01/12 for v7.1] vfs writeback Christian Brauner
2026-04-10 15:16 ` [GIT PULL 02/12 for v7.1] vfs xattr Christian Brauner
@ 2026-04-10 15:16 ` Christian Brauner
2026-04-10 15:17 ` [GIT PULL 04/12 for v7.1] vfs integrity Christian Brauner
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:16 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Recently "start_creating", "start_removing", "start_renaming" and
related interaces were added which combine the locking and the lookup.
At that time many callers were changed to use the new interfaces.
However there are still an assortment of places out side of the core vfs
where the directory is locked explictly, whether with inode_lock() or
lock_rename() or similar. These were missed in the first pass for an
assortment of uninteresting reasons.
This series addresses the remaining places where explicit locking is
used, and changes them to use the new interfaces, or otherwise removes
the explicit locking.
The biggest changes are in overlayfs. The other changes are quite
simple, though maybe the cachefiles changes is the least simple of
those.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
diff --cc security/apparmor/apparmorfs.c
index 242c71b3fb6e,f93c4f31d02a..000000000000
--- a/security/apparmor/apparmorfs.c
+++ b/security/apparmor/apparmorfs.c
@@@ -364,22 -289,13 +358,17 @@@ static struct dentry *aafs_create(cons
}
error = __aafs_setup_d_inode(dir, dentry, mode, data, link, fops, iops);
+ simple_done_creating(dentry);
if (error)
- goto fail_dentry;
- inode_unlock(dir);
+ goto fail;
+
+ if (data)
+ aa_get_common_ref(data);
+
return dentry;
- fail_dentry:
- dput(dentry);
-
- fail_lock:
- inode_unlock(dir);
+ fail:
simple_release_fs(&aafs_mnt, &aafs_count);
-
return ERR_PTR(error);
}
Merge conflicts with other trees
================================
[1]: https://lore.kernel.org/linux-next/adZNhv68QCxJt00c@sirena.org.uk
The following changes since commit 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f:
Linux 7.0-rc1 (2026-02-22 13:18:59 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.directory
for you to fetch changes up to 9c62536a958ffef246b6f7c01125ebac962158f8:
Merge patch series "Further centralising of directory locking for name ops." (2026-03-09 09:43:04 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.directory
Please consider pulling these changes from the signed vfs-7.1-rc1.directory tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (1):
Merge patch series "Further centralising of directory locking for name ops."
NeilBrown (15):
VFS: note error returns in documentation for various lookup functions
fs/proc: Don't lock root inode when creating "self" and "thread-self"
VFS: move the start_dirop() kerndoc comment to before start_dirop()
libfs: change simple_done_creating() to use end_creating()
Apparmor: Use simple_start_creating() / simple_done_creating()
selinux: Use simple_start_creating() / simple_done_creating()
nfsd: switch purge_old() to use start_removing_noperm()
VFS: make lookup_one_qstr_excl() static.
ovl: Simplify ovl_lookup_real_one()
cachefiles: change cachefiles_bury_object to use start_renaming_dentry()
ovl: pass name buffer to ovl_start_creating_temp()
ovl: change ovl_create_real() to get a new lock when re-opening created file.
ovl: use is_subdir() for testing if one thing is a subdir of another
ovl: remove ovl_lock_rename_workdir()
VFS: unexport lock_rename(), lock_rename_child(), unlock_rename()
Documentation/filesystems/porting.rst | 14 ++++++
fs/cachefiles/namei.c | 93 ++++++++++++-----------------------
fs/libfs.c | 3 +-
fs/namei.c | 70 +++++++++++++++++---------
fs/nfsd/nfs4recover.c | 6 +--
fs/overlayfs/dir.c | 51 ++++++++++++-------
fs/overlayfs/export.c | 71 +++++++++++++-------------
fs/overlayfs/overlayfs.h | 10 +---
fs/overlayfs/super.c | 16 +++---
fs/overlayfs/util.c | 25 ----------
fs/proc/self.c | 3 --
fs/proc/thread_self.c | 3 --
include/linux/namei.h | 6 ---
security/apparmor/apparmorfs.c | 35 +++----------
security/selinux/selinuxfs.c | 17 +++----
15 files changed, 184 insertions(+), 239 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 04/12 for v7.1] vfs integrity
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (2 preceding siblings ...)
2026-04-10 15:16 ` [GIT PULL 03/12 for v7.1] vfs directory Christian Brauner
@ 2026-04-10 15:17 ` Christian Brauner
2026-04-10 15:18 ` [GIT PULL 05/12 for v7.1] vfs fs_struct Christian Brauner
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:17 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
This adds support to generate and verify integrity information (aka T10
PI) in the file system, instead of the automatic below the covers
support that is currently used.
The implementation is based on refactoring the existing block layer PI
code to be reusable for this use case, and then adding relatively
small wrappers for the file system use case. These are then used in
iomap to implement the semantics, and wired up in XFS with a small
amount of glue code.
Compared to the baseline this does not change performance for writes,
but increases read performance up to 15% for 4k I/O, with the benefit
decreasing with larger I/O sizes as even the baseline maxes out the
device quickly on my older enterprise SSD.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
diff --cc fs/iomap/bio.c
index edd908183058,f989ffcaac96..000000000000
--- a/fs/iomap/bio.c
+++ b/fs/iomap/bio.c
@@@ -8,66 -9,33 +9,77 @@@
#include "internal.h"
#include "trace.h"
+static DEFINE_SPINLOCK(failed_read_lock);
+static struct bio_list failed_read_list = BIO_EMPTY_LIST;
+
- static void __iomap_read_end_io(struct bio *bio)
+ static u32 __iomap_read_end_io(struct bio *bio, int error)
{
- int error = blk_status_to_errno(bio->bi_status);
struct folio_iter fi;
+ u32 folio_count = 0;
- bio_for_each_folio_all(fi, bio)
+ bio_for_each_folio_all(fi, bio) {
iomap_finish_folio_read(fi.folio, fi.offset, fi.length, error);
+ folio_count++;
+ }
+ if (bio_integrity(bio))
+ fs_bio_integrity_free(bio);
bio_put(bio);
+ return folio_count;
}
+static void
+iomap_fail_reads(
+ struct work_struct *work)
+{
+ struct bio *bio;
+ struct bio_list tmp = BIO_EMPTY_LIST;
+ unsigned long flags;
+
+ spin_lock_irqsave(&failed_read_lock, flags);
+ bio_list_merge_init(&tmp, &failed_read_list);
+ spin_unlock_irqrestore(&failed_read_lock, flags);
+
+ while ((bio = bio_list_pop(&tmp)) != NULL) {
- __iomap_read_end_io(bio);
++ __iomap_read_end_io(bio, blk_status_to_errno(bio->bi_status));
+ cond_resched();
+ }
+}
+
+static DECLARE_WORK(failed_read_work, iomap_fail_reads);
+
+static void iomap_fail_buffered_read(struct bio *bio)
+{
+ unsigned long flags;
+
+ /*
+ * Bounce I/O errors to a workqueue to avoid nested i_lock acquisitions
+ * in the fserror code. The caller no longer owns the bio reference
+ * after the spinlock drops.
+ */
+ spin_lock_irqsave(&failed_read_lock, flags);
+ if (bio_list_empty(&failed_read_list))
+ WARN_ON_ONCE(!schedule_work(&failed_read_work));
+ bio_list_add(&failed_read_list, bio);
+ spin_unlock_irqrestore(&failed_read_lock, flags);
+}
+
static void iomap_read_end_io(struct bio *bio)
{
- __iomap_read_end_io(bio, blk_status_to_errno(bio->bi_status));
+ if (bio->bi_status) {
+ iomap_fail_buffered_read(bio);
+ return;
+ }
+
- __iomap_read_end_io(bio);
++ __iomap_read_end_io(bio, 0);
+ }
+
+ u32 iomap_finish_ioend_buffered_read(struct iomap_ioend *ioend)
+ {
+ return __iomap_read_end_io(&ioend->io_bio, ioend->io_error);
}
- static void iomap_bio_submit_read(struct iomap_read_folio_ctx *ctx)
+ static void iomap_bio_submit_read(const struct iomap_iter *iter,
+ struct iomap_read_folio_ctx *ctx)
{
struct bio *bio = ctx->read_ctx;
Merge conflicts with other trees
================================
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.integrity
for you to fetch changes up to 1b63f91d1c9013629fb2005ace48b7aeead32330:
Merge patch series "support file system generated / verified integrity information v4" (2026-03-10 10:29:18 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.integrity
Please consider pulling these changes from the signed vfs-7.1-rc1.integrity tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (2):
Merge branch 'for-7.1/block-integrity'
Merge patch series "support file system generated / verified integrity information v4"
Christoph Hellwig (16):
block: factor out a bio_integrity_action helper
block: factor out a bio_integrity_setup_default helper
block: add a bdev_has_integrity_csum helper
block: prepare generation / verification helpers for fs usage
block: make max_integrity_io_size public
block: add fs_bio_integrity helpers
block: pass a maxlen argument to bio_iov_iter_bounce
iomap: refactor iomap_bio_read_folio_range
iomap: pass the iomap_iter to ->submit_read
iomap: only call into ->submit_read when there is a read_ctx
iomap: allow file systems to hook into buffered read bio submission
ntfs3: remove copy and pasted iomap code
iomap: add a bioset pointer to iomap_read_folio_ops
iomap: support ioends for buffered reads
iomap: support T10 protection information
xfs: support T10 protection information
block/Makefile | 2 +-
block/bio-integrity-auto.c | 80 ++++---------------------
block/bio-integrity-fs.c | 81 +++++++++++++++++++++++++
block/bio-integrity.c | 64 ++++++++++++++++++++
block/bio.c | 17 +++---
block/blk-mq.c | 6 +-
block/blk-settings.c | 13 ----
block/blk.h | 6 +-
block/t10-pi.c | 12 ++--
drivers/nvdimm/btt.c | 6 +-
fs/fuse/file.c | 5 +-
fs/iomap/bio.c | 135 ++++++++++++++++++++++++++++--------------
fs/iomap/buffered-io.c | 8 +--
fs/iomap/direct-io.c | 15 ++++-
fs/iomap/internal.h | 14 +++++
fs/iomap/ioend.c | 30 ++++++++--
fs/ntfs3/inode.c | 57 ++----------------
fs/xfs/xfs_aops.c | 47 +++++++++++++--
fs/xfs/xfs_iomap.c | 9 ++-
include/linux/bio-integrity.h | 12 +++-
include/linux/bio.h | 2 +-
include/linux/blk-integrity.h | 28 +++++++--
include/linux/blkdev.h | 34 +++++++++--
include/linux/iomap.h | 20 ++++++-
24 files changed, 470 insertions(+), 233 deletions(-)
create mode 100644 block/bio-integrity-fs.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 05/12 for v7.1] vfs fs_struct
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (3 preceding siblings ...)
2026-04-10 15:17 ` [GIT PULL 04/12 for v7.1] vfs integrity Christian Brauner
@ 2026-04-10 15:18 ` Christian Brauner
2026-04-10 15:18 ` [GIT PULL 06/12 for v7.1] vfs kino Christian Brauner
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:18 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Avoid excessive dput/dget in audit_context setup and reset paths When
the audit subsystem is enabled, it can do a lot of get_fs_pwd() calls to
get references to fs->pwd and then releasing those references back with
path_put() later. That may cause a lot of spinlock contention on a
single pwd's dentry lock because of the constant changes to the
reference count when there are many processes on the same working
directory actively doing open/close system calls. This can cause
noticeable performance regresssion when compared with the case where the
audit subsystem is turned off especially on systems with a lot of CPUs
which is becoming more common these days.
Avoid this type of performance regression caused by audit by adding a
new set of fs_struct helpers to reduce unncessary path_get() and
path_put() calls and the audit code is modified to use these new
helpers.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.fs_struct
for you to fetch changes up to 9eecc28ec595bfc0a8af3306b57f566027b3560c:
fs: factor out get_fs_pwd_pool_locked() for lock-held callers (2026-03-12 13:41:45 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.fs_struct
Please consider pulling these changes from the signed vfs-7.1-rc1.fs_struct tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (5):
Merge patch series "fs, audit: Avoid excessive dput/dget in audit_context setup and reset paths"
fs: use path_equal() in fs_struct helpers
fs: document seqlock usage in pwd pool APIs
fs: add drain_fs_pwd_pool() helper
fs: factor out get_fs_pwd_pool_locked() for lock-held callers
Waiman Long (2):
fs: Add a pool of extra fs->pwd references to fs_struct
audit: Use the new {get,put}_fs_pwd_pool() APIs to get/put pwd references
fs/fs_struct.c | 34 ++++++++++++++++++++++++++++------
fs/namespace.c | 10 ++++++++++
include/linux/fs_struct.h | 43 ++++++++++++++++++++++++++++++++++++++++++-
kernel/auditsc.c | 7 +++++--
4 files changed, 85 insertions(+), 9 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 06/12 for v7.1] vfs kino
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (4 preceding siblings ...)
2026-04-10 15:18 ` [GIT PULL 05/12 for v7.1] vfs fs_struct Christian Brauner
@ 2026-04-10 15:18 ` Christian Brauner
2026-04-10 15:19 ` [GIT PULL 07/12 for v7.1] vfs fat Christian Brauner
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:18 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
For historical reasons, the inode->i_ino field is an unsigned long,
which means that it's 32 bits on 32 bit architectures. This has caused a
number of filesystems to implement hacks to hash a 64-bit identifier
into a 32-bit field, and deprives us of a universal identifier field for
an inode.
The work in this pr changes the inode->i_ino field from an unsigned long
to a u64. This shouldn't make any material difference on 64-bit hosts,
but 32-bit hosts will see struct inode grow by at least 4 bytes. This
could have effects on slabcache sizes and field alignment.
The bulk of the changes are to format strings and tracepoints, since the
kernel itself doesn't care that much about the i_ino field. The first
patch changes some vfs function arguments, so check that one out
carefully.
With this change, we may be able to shrink some inode structures. For
instance, struct nfs_inode has a fileid field that holds the 64-bit
inode number. With this set of changes, that field could be eliminated.
I'd rather leave that sort of cleanups for later just to keep this
simple.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
[1]: https://lore.kernel.org/linux-next/CAHC9VhRndi9kMUNQFA9J1exr2G0uQ-A-wKDqJLhUntMYdnUrsQ@mail.gmail.com
The following changes since commit 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f:
Linux 7.0-rc1 (2026-02-22 13:18:59 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.kino
for you to fetch changes up to 2e43ca1a4f949e4beb763f8196695da02b17bd77:
Merge patch series "vfs: follow-on fixes for i_ino widening" (2026-03-17 15:38:54 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.kino
Please consider pulling these changes from the signed vfs-7.1-rc1.kino tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (4):
Merge patch series "vfs: change inode->i_ino from unsigned long to u64"
ext4: fix signed format specifier in ext4_load_inode trace event
treewide: fix missed i_ino format specifier conversions
Merge patch series "vfs: follow-on fixes for i_ino widening"
Jeff Layton (15):
vfs: widen inode hash/lookup functions to u64
audit: widen ino fields to u64
net: change sock.sk_ino and sock_i_ino() to u64
vfs: widen trace event i_ino fields to u64
cachefiles: widen trace event i_ino fields to u64
ext2: widen trace event i_ino fields to u64
hugetlbfs: widen trace event i_ino fields to u64
zonefs: widen trace event i_ino fields to u64
ext4: widen trace event i_ino fields to u64
f2fs: widen trace event i_ino fields to u64
nilfs2: widen trace event i_ino fields to u64
treewide: change inode->i_ino from unsigned long to u64
vfs: remove externs from fs.h on functions modified by i_ino widening
EVM: add comment describing why ino field is still unsigned long
nilfs2: fix 64-bit division operations in nilfs_bmap_find_target_in_group()
drivers/dma-buf/dma-buf.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 +-
fs/9p/vfs_addr.c | 4 +-
fs/9p/vfs_inode.c | 6 +-
fs/9p/vfs_inode_dotl.c | 6 +-
fs/affs/amigaffs.c | 10 +-
fs/affs/bitmap.c | 2 +-
fs/affs/dir.c | 2 +-
fs/affs/file.c | 20 +-
fs/affs/inode.c | 12 +-
fs/affs/namei.c | 14 +-
fs/affs/symlink.c | 2 +-
fs/afs/dir.c | 10 +-
fs/afs/dir_search.c | 2 +-
fs/afs/dynroot.c | 2 +-
fs/afs/inode.c | 2 +-
fs/autofs/inode.c | 2 +-
fs/befs/linuxvfs.c | 28 +-
fs/bfs/dir.c | 4 +-
fs/binfmt_elf_fdpic.c | 2 +-
fs/cachefiles/io.c | 6 +-
fs/cachefiles/namei.c | 12 +-
fs/cachefiles/xattr.c | 2 +-
fs/ceph/crypto.c | 4 +-
fs/coda/dir.c | 2 +-
fs/coda/inode.c | 2 +-
fs/cramfs/inode.c | 2 +-
fs/crypto/crypto.c | 2 +-
fs/crypto/hooks.c | 2 +-
fs/crypto/keyring.c | 4 +-
fs/crypto/keysetup.c | 2 +-
fs/dcache.c | 4 +-
fs/ecryptfs/crypto.c | 6 +-
fs/ecryptfs/file.c | 2 +-
fs/efs/inode.c | 6 +-
fs/eventpoll.c | 2 +-
fs/exportfs/expfs.c | 4 +-
fs/ext2/dir.c | 10 +-
fs/ext2/ialloc.c | 9 +-
fs/ext2/inode.c | 2 +-
fs/ext2/trace.h | 8 +-
fs/ext2/xattr.c | 16 +-
fs/ext4/dir.c | 2 +-
fs/ext4/ext4.h | 4 +-
fs/ext4/extents.c | 8 +-
fs/ext4/extents_status.c | 28 +-
fs/ext4/fast_commit.c | 8 +-
fs/ext4/ialloc.c | 10 +-
fs/ext4/indirect.c | 2 +-
fs/ext4/inline.c | 14 +-
fs/ext4/inode.c | 22 +-
fs/ext4/ioctl.c | 4 +-
fs/ext4/mballoc.c | 6 +-
fs/ext4/migrate.c | 2 +-
fs/ext4/move_extent.c | 20 +-
fs/ext4/namei.c | 10 +-
fs/ext4/orphan.c | 16 +-
fs/ext4/page-io.c | 10 +-
fs/ext4/super.c | 22 +-
fs/ext4/xattr.c | 10 +-
fs/f2fs/compress.c | 4 +-
fs/f2fs/dir.c | 2 +-
fs/f2fs/extent_cache.c | 8 +-
fs/f2fs/f2fs.h | 6 +-
fs/f2fs/file.c | 12 +-
fs/f2fs/gc.c | 2 +-
fs/f2fs/inline.c | 4 +-
fs/f2fs/inode.c | 48 +--
fs/f2fs/namei.c | 8 +-
fs/f2fs/node.c | 12 +-
fs/f2fs/recovery.c | 10 +-
fs/f2fs/xattr.c | 10 +-
fs/freevxfs/vxfs_bmap.c | 4 +-
fs/fserror.c | 2 +-
fs/hfs/catalog.c | 2 +-
fs/hfs/extent.c | 4 +-
fs/hfs/inode.c | 4 +-
fs/hfsplus/attributes.c | 10 +-
fs/hfsplus/catalog.c | 2 +-
fs/hfsplus/dir.c | 6 +-
fs/hfsplus/extents.c | 6 +-
fs/hfsplus/inode.c | 8 +-
fs/hfsplus/super.c | 6 +-
fs/hfsplus/xattr.c | 10 +-
fs/hpfs/dir.c | 4 +-
fs/hpfs/dnode.c | 4 +-
fs/hpfs/ea.c | 4 +-
fs/hpfs/inode.c | 4 +-
fs/inode.c | 49 ++-
fs/iomap/ioend.c | 2 +-
fs/iomap/trace.h | 8 +-
fs/isofs/compress.c | 2 +-
fs/isofs/dir.c | 2 +-
fs/isofs/inode.c | 8 +-
fs/isofs/namei.c | 2 +-
fs/jbd2/journal.c | 4 +-
fs/jbd2/transaction.c | 2 +-
fs/jffs2/dir.c | 4 +-
fs/jffs2/file.c | 4 +-
fs/jffs2/fs.c | 18 +-
fs/jfs/inode.c | 2 +-
fs/jfs/jfs_imap.c | 2 +-
fs/jfs/jfs_metapage.c | 2 +-
fs/lockd/svclock.c | 8 +-
fs/lockd/svcsubs.c | 2 +-
fs/locks.c | 6 +-
fs/minix/inode.c | 10 +-
fs/nfs/dir.c | 20 +-
fs/nfs/file.c | 8 +-
fs/nfs/filelayout/filelayout.c | 8 +-
fs/nfs/flexfilelayout/flexfilelayout.c | 8 +-
fs/nfs/inode.c | 6 +-
fs/nfs/nfs4proc.c | 4 +-
fs/nfs/pnfs.c | 12 +-
fs/nfsd/export.c | 2 +-
fs/nfsd/nfs4state.c | 4 +-
fs/nfsd/nfsfh.c | 4 +-
fs/nfsd/vfs.c | 2 +-
fs/nilfs2/alloc.c | 10 +-
fs/nilfs2/bmap.c | 17 +-
fs/nilfs2/btnode.c | 2 +-
fs/nilfs2/btree.c | 12 +-
fs/nilfs2/dir.c | 12 +-
fs/nilfs2/direct.c | 4 +-
fs/nilfs2/gcinode.c | 2 +-
fs/nilfs2/inode.c | 8 +-
fs/nilfs2/mdt.c | 2 +-
fs/nilfs2/namei.c | 2 +-
fs/nilfs2/segment.c | 2 +-
fs/notify/fdinfo.c | 4 +-
fs/nsfs.c | 4 +-
fs/ntfs3/super.c | 2 +-
fs/ocfs2/alloc.c | 2 +-
fs/ocfs2/aops.c | 4 +-
fs/ocfs2/dir.c | 8 +-
fs/ocfs2/dlmfs/dlmfs.c | 10 +-
fs/ocfs2/extent_map.c | 12 +-
fs/ocfs2/inode.c | 2 +-
fs/ocfs2/quota_local.c | 2 +-
fs/ocfs2/refcounttree.c | 10 +-
fs/ocfs2/xattr.c | 4 +-
fs/orangefs/inode.c | 2 +-
fs/overlayfs/export.c | 2 +-
fs/overlayfs/namei.c | 4 +-
fs/overlayfs/util.c | 2 +-
fs/pipe.c | 2 +-
fs/proc/fd.c | 2 +-
fs/proc/task_mmu.c | 4 +-
fs/qnx4/inode.c | 4 +-
fs/qnx6/inode.c | 2 +-
fs/ubifs/debug.c | 8 +-
fs/ubifs/dir.c | 28 +-
fs/ubifs/file.c | 28 +-
fs/ubifs/journal.c | 6 +-
fs/ubifs/super.c | 16 +-
fs/ubifs/tnc.c | 4 +-
fs/ubifs/xattr.c | 14 +-
fs/udf/directory.c | 18 +-
fs/udf/file.c | 2 +-
fs/udf/inode.c | 12 +-
fs/udf/namei.c | 8 +-
fs/udf/super.c | 2 +-
fs/ufs/balloc.c | 6 +-
fs/ufs/dir.c | 10 +-
fs/ufs/ialloc.c | 6 +-
fs/ufs/inode.c | 18 +-
fs/ufs/ufs_fs.h | 6 +-
fs/ufs/util.c | 2 +-
fs/verity/init.c | 2 +-
fs/zonefs/super.c | 8 +-
fs/zonefs/trace.h | 18 +-
include/linux/audit.h | 2 +-
include/linux/fs.h | 88 +++--
include/net/sock.h | 4 +-
include/trace/events/cachefiles.h | 18 +-
include/trace/events/ext4.h | 544 ++++++++++++++---------------
include/trace/events/f2fs.h | 242 ++++++-------
include/trace/events/filelock.h | 34 +-
include/trace/events/filemap.h | 20 +-
include/trace/events/fs_dax.h | 20 +-
include/trace/events/fsverity.h | 30 +-
include/trace/events/hugetlbfs.h | 42 +--
include/trace/events/netfs.h | 8 +-
include/trace/events/nilfs2.h | 12 +-
include/trace/events/readahead.h | 18 +-
include/trace/events/timestamp.h | 16 +-
include/trace/events/writeback.h | 162 ++++-----
kernel/audit.h | 13 +-
kernel/audit_fsnotify.c | 4 +-
kernel/audit_watch.c | 12 +-
kernel/auditsc.c | 4 +-
kernel/events/uprobes.c | 4 +-
net/ax25/af_ax25.c | 2 +-
net/bluetooth/af_bluetooth.c | 4 +-
net/can/bcm.c | 2 +-
net/ipv4/ping.c | 2 +-
net/ipv4/raw.c | 2 +-
net/ipv4/tcp_ipv4.c | 2 +-
net/ipv4/udp.c | 2 +-
net/ipv6/datagram.c | 2 +-
net/ipv6/tcp_ipv6.c | 2 +-
net/key/af_key.c | 2 +-
net/netlink/af_netlink.c | 2 +-
net/netlink/diag.c | 2 +-
net/netrom/af_netrom.c | 4 +-
net/packet/af_packet.c | 2 +-
net/packet/diag.c | 2 +-
net/phonet/socket.c | 4 +-
net/rose/af_rose.c | 4 +-
net/sctp/proc.c | 4 +-
net/socket.c | 2 +-
net/unix/af_unix.c | 2 +-
net/unix/diag.c | 6 +-
net/x25/x25_proc.c | 4 +-
net/xdp/xsk_diag.c | 2 +-
security/apparmor/apparmorfs.c | 4 +-
security/integrity/evm/evm_crypto.c | 6 +
security/integrity/integrity_audit.c | 2 +-
security/ipe/audit.c | 2 +-
security/lsm_audit.c | 10 +-
security/selinux/hooks.c | 10 +-
security/smack/smack_lsm.c | 12 +-
222 files changed, 1331 insertions(+), 1321 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 07/12 for v7.1] vfs fat
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (5 preceding siblings ...)
2026-04-10 15:18 ` [GIT PULL 06/12 for v7.1] vfs kino Christian Brauner
@ 2026-04-10 15:19 ` Christian Brauner
2026-04-10 15:19 ` [GIT PULL 08/12 for v7.1] vfs bh metadata Christian Brauner
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:19 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
This contains minor fixes for the fat filesystem.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.fat
for you to fetch changes up to 94505767bd32f8a240cf3590776b16a12d75d98e:
fat: fix stack frame size warnings in KUnit tests (2026-03-26 14:36:03 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.fat
Please consider pulling these changes from the signed vfs-7.1-rc1.fat tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (1):
fat: fix stack frame size warnings in KUnit tests
avivdaum (1):
fat: add KUnit tests for timestamp conversion helpers
fs/fat/fat_test.c | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++---
fs/fat/misc.c | 2 +
2 files changed, 175 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 08/12 for v7.1] vfs bh metadata
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (6 preceding siblings ...)
2026-04-10 15:19 ` [GIT PULL 07/12 for v7.1] vfs fat Christian Brauner
@ 2026-04-10 15:19 ` Christian Brauner
2026-04-10 15:19 ` [GIT PULL 09/12 for v7.1] namespaces misc Christian Brauner
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:19 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
The work in this pr cleans up the mess that has accumulated over the
years in metadata buffer_head tracking for inodes, moves the tracking
into dedicated structure in filesystem-private part of the inode (so
that we don't use private_list, private_data, and private_lock in struct
address_space), and also moves couple other users of private_data and
private_list so these are removed from struct address_space saving 3
longs in struct inode for 99% of inodes.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
diff --cc fs/ext4/fsync.c
index bd8f230fa507,aa80af2b4eea..000000000000
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@@ -83,23 -83,12 +83,23 @@@ static int ext4_fsync_nojournal(struct
int datasync, bool *needs_barrier)
{
struct inode *inode = file->f_inode;
+ struct writeback_control wbc = {
+ .sync_mode = WB_SYNC_ALL,
+ .nr_to_write = 0,
+ };
int ret;
- ret = generic_buffers_fsync_noflush(file, start, end, datasync);
+ ret = mmb_fsync_noflush(file, &EXT4_I(inode)->i_metadata_bhs,
+ start, end, datasync);
- if (!ret)
- ret = ext4_sync_parent(inode);
+ if (ret)
+ return ret;
+
+ /* Force writeout of inode table buffer to disk */
+ ret = ext4_write_inode(inode, &wbc);
+ if (ret)
+ return ret;
+
+ ret = ext4_sync_parent(inode);
-
if (test_opt(inode->i_sb, BARRIER))
*needs_barrier = true;
Merge conflicts with other trees
================================
[1]: https://lore.kernel.org/linux-next/aca_9wyB29931jgP@sirena.co.uk
[2]: https://lore.kernel.org/linux-next/acbAlnfUcjBSLNpt@sirena.co.uk
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.bh.metadata
for you to fetch changes up to 6e22726900ea54d72cbc6f053c0fa581de023de6:
Merge patch series "fs: Move metadata bh tracking from address_space" (2026-03-26 15:03:38 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.bh.metadata
Please consider pulling these changes from the signed vfs-7.1-rc1.bh.metadata tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (1):
Merge patch series "fs: Move metadata bh tracking from address_space"
Jan Kara (42):
ext4: Use inode_has_buffers()
gfs2: Don't zero i_private_data
ntfs3: Drop pointless sync_mapping_buffers() and invalidate_inode_buffers() calls
ocfs2: Drop pointless sync_mapping_buffers() calls
bdev: Drop pointless invalidate_inode_buffers() call
ufs: Drop pointless invalidate_mapping_buffers() call
exfat: Drop pointless invalidate_inode_buffers() call
fs: Remove inode lock from __generic_file_fsync()
udf: Switch to generic_buffers_fsync()
minix: Switch to generic_buffers_fsync()
bfs: Switch to generic_buffers_fsync()
fat: Switch to generic_buffers_fsync_noflush()
fs: Drop sync_mapping_buffers() from __generic_file_fsync()
fs: Rename generic_file_fsync() to simple_fsync()
fat: Sync and invalidate metadata buffers from fat_evict_inode()
udf: Sync and invalidate metadata buffers from udf_evict_inode()
minix: Sync and invalidate metadata buffers from minix_evict_inode()
ext2: Sync and invalidate metadata buffers from ext2_evict_inode()
ext4: Sync and invalidate metadata buffers from ext4_evict_inode()
bfs: Sync and invalidate metadata buffers from bfs_evict_inode()
affs: Sync and invalidate metadata buffers from affs_evict_inode()
fs: Ignore inode metadata buffers in inode_lru_isolate()
fs: Stop using i_private_data for metadata bh tracking
hugetlbfs: Stop using i_private_data
aio: Stop using i_private_data and i_private_lock
fs: Remove i_private_data
kvm: Use private inode list instead of i_private_list
fs: Drop osync_buffers_list()
fs: Fold fsync_buffers_list() into sync_mapping_buffers()
fs: Move metadata bhs tracking to a separate struct
fs: Make bhs point to mapping_metadata_bhs
fs: Switch inode_has_buffers() to take mapping_metadata_bhs
fs: Provide functions for handling mapping_metadata_bhs directly
ext2: Track metadata bhs in fs-private inode part
affs: Track metadata bhs in fs-private inode part
bfs: Track metadata bhs in fs-private inode part
fat: Track metadata bhs in fs-private inode part
udf: Track metadata bhs in fs-private inode part
minix: Track metadata bhs in fs-private inode part
ext4: Track metadata bhs in fs-private inode part
fs: Drop mapping_metadata_bhs from address space
fs: Drop i_private_list from address_space
block/bdev.c | 8 -
fs/adfs/dir.c | 2 +-
fs/adfs/file.c | 2 +-
fs/affs/affs.h | 2 +
fs/affs/amigaffs.c | 12 +-
fs/affs/file.c | 25 +--
fs/affs/inode.c | 14 +-
fs/affs/namei.c | 9 +-
fs/affs/super.c | 1 +
fs/aio.c | 78 ++++++--
fs/bfs/bfs.h | 1 +
fs/bfs/dir.c | 16 +-
fs/bfs/inode.c | 6 +-
fs/buffer.c | 454 +++++++++++++++++---------------------------
fs/exfat/file.c | 2 +-
fs/exfat/inode.c | 1 -
fs/ext2/ext2.h | 1 +
fs/ext2/file.c | 6 +-
fs/ext2/inode.c | 17 +-
fs/ext2/super.c | 1 +
fs/ext4/ext4.h | 1 +
fs/ext4/ext4_jbd2.c | 3 +-
fs/ext4/fsync.c | 5 +-
fs/ext4/inode.c | 9 +-
fs/ext4/super.c | 4 +-
fs/fat/dir.c | 17 +-
fs/fat/fat.h | 1 +
fs/fat/fatent.c | 15 +-
fs/fat/file.c | 8 +-
fs/fat/inode.c | 7 +-
fs/fat/namei_msdos.c | 6 +-
fs/fat/namei_vfat.c | 2 +-
fs/gfs2/glock.c | 1 -
fs/hugetlbfs/inode.c | 11 +-
fs/inode.c | 24 +--
fs/libfs.c | 37 ++--
fs/minix/dir.c | 2 +-
fs/minix/file.c | 10 +-
fs/minix/inode.c | 6 +-
fs/minix/itree_common.c | 11 +-
fs/minix/minix.h | 3 +
fs/ntfs3/file.c | 3 -
fs/ntfs3/inode.c | 1 -
fs/ocfs2/dlmglue.c | 1 -
fs/ocfs2/namei.c | 3 -
fs/omfs/file.c | 2 +-
fs/qnx4/dir.c | 2 +-
fs/qnx6/dir.c | 2 +-
fs/udf/dir.c | 2 +-
fs/udf/directory.c | 5 +-
fs/udf/file.c | 9 +-
fs/udf/inode.c | 16 +-
fs/udf/namei.c | 2 +-
fs/udf/super.c | 1 +
fs/udf/truncate.c | 2 +-
fs/udf/udf_i.h | 1 +
fs/udf/udfdecl.h | 1 +
fs/ufs/dir.c | 2 +-
fs/ufs/file.c | 2 +-
fs/ufs/inode.c | 1 -
include/linux/buffer_head.h | 29 ++-
include/linux/fs.h | 15 +-
include/linux/hugetlb.h | 1 +
mm/hugetlb.c | 10 +-
virt/kvm/guest_memfd.c | 12 +-
65 files changed, 474 insertions(+), 492 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 09/12 for v7.1] namespaces misc
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (7 preceding siblings ...)
2026-04-10 15:19 ` [GIT PULL 08/12 for v7.1] vfs bh metadata Christian Brauner
@ 2026-04-10 15:19 ` Christian Brauner
2026-04-10 15:21 ` [GIT PULL 10/12 for v7.1] vfs pidfs Christian Brauner
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:19 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Add two simple helper macros for the namespace infrastructure.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/namespaces-7.1-rc1.misc
for you to fetch changes up to 935a04923ad293cd89bf6ec23fc4efc9cf1a0142:
nsproxy: Add FOR_EACH_NS_TYPE() X-macro and CLONE_NS_ALL (2026-03-26 15:22:41 +0100)
----------------------------------------------------------------
namespaces-7.1-rc1.misc
Please consider pulling these changes from the signed namespaces-7.1-rc1.misc tag.
Thanks!
Christian
----------------------------------------------------------------
Mickaël Salaün (1):
nsproxy: Add FOR_EACH_NS_TYPE() X-macro and CLONE_NS_ALL
include/linux/ns/ns_common_types.h | 44 +++++++++++++++++++++++++++++---------
kernel/fork.c | 7 +++---
kernel/nsproxy.c | 13 ++++-------
3 files changed, 41 insertions(+), 23 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 10/12 for v7.1] vfs pidfs
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (8 preceding siblings ...)
2026-04-10 15:19 ` [GIT PULL 09/12 for v7.1] namespaces misc Christian Brauner
@ 2026-04-10 15:21 ` Christian Brauner
2026-04-10 15:21 ` [GIT PULL 11/12 for v7.1] vfs mount Christian Brauner
2026-04-10 15:23 ` [GIT PULL 12/12 for v7.1] vfs misc Christian Brauner
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:21 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Add three new clone3() flags for pidfd-based process lifecycle
management.
=== CLONE_AUTOREAP ===
CLONE_AUTOREAP makes a child process auto-reap on exit without ever
becoming a zombie. This is a per-process property in contrast to the
existing auto-reap mechanism via SA_NOCLDWAIT or SIG_IGN for SIGCHLD
which applies to all children of a given parent.
Currently the only way to automatically reap children is to set
SA_NOCLDWAIT or SIG_IGN on SIGCHLD. This is a parent-scoped property
affecting all children which makes it unsuitable for libraries or
applications that need selective auto-reaping of specific children
while still being able to wait() on others.
CLONE_AUTOREAP stores an autoreap flag in the child's signal_struct.
When the child exits do_notify_parent() checks this flag and causes
exit_notify() to transition the task directly to EXIT_DEAD. Since the
flag lives on the child it survives reparenting: if the original
parent exits and the child is reparented to a subreaper or init the
child still auto-reaps when it eventually exits. This is cleaner than
forcing the subreaper to get SIGCHLD and then reaping it. If the
parent doesn't care the subreaper won't care. If there's a subreaper
that would care it would be easy enough to add a prctl() that either
just turns back on SIGCHLD and turns off auto-reaping or a prctl()
that just notifies the subreaper whenever a child is reparented to it.
CLONE_AUTOREAP can be combined with CLONE_PIDFD to allow the parent to
monitor the child's exit via poll() and retrieve exit status via
PIDFD_GET_INFO. Without CLONE_PIDFD it provides a fire-and-forget
pattern. No exit signal is delivered so exit_signal must be zero.
CLONE_THREAD and CLONE_PARENT are rejected: CLONE_THREAD because
autoreap is a process-level property, and CLONE_PARENT because an
autoreap child reparented via CLONE_PARENT could become an invisible
zombie under a parent that never calls wait().
The flag is not inherited by the autoreap process's own children. Each
child that should be autoreaped must be explicitly created with
CLONE_AUTOREAP.
=== CLONE_NNP ===
CLONE_NNP sets no_new_privs on the child at clone time. Unlike
prctl(PR_SET_NO_NEW_PRIVS) which a process sets on itself, CLONE_NNP
allows the parent to impose no_new_privs on the child at creation
without affecting the parent's own privileges. CLONE_THREAD is
rejected because threads share credentials. CLONE_NNP is useful on its
own for any spawn-and-sandbox pattern but was specifically introduced
to enable unprivileged usage of CLONE_PIDFD_AUTOKILL.
=== CLONE_PIDFD_AUTOKILL ===
This flag ties a child's lifetime to the pidfd returned from clone3().
When the last reference to the struct file created by clone3() is
closed the kernel sends SIGKILL to the child. A pidfd obtained via
pidfd_open() for the same process does not keep the child alive and
does not trigger autokill - only the specific struct file from
clone3() has this property. This is useful for container runtimes,
service managers, and sandboxed subprocess execution - any scenario
where the child must die if the parent crashes or abandons the pidfd
or just wants a throwaway helper process.
CLONE_PIDFD_AUTOKILL requires both CLONE_PIDFD and CLONE_AUTOREAP. It
requires CLONE_PIDFD because the whole point is tying the child's
lifetime to the pidfd. It requires CLONE_AUTOREAP because a killed
child with no one to reap it would become a zombie - the primary use
case is the parent crashing or abandoning the pidfd so no one is
around to call waitpid(). CLONE_THREAD is rejected because autokill
targets a process not a thread.
If CLONE_NNP is specified together with CLONE_PIDFD_AUTOKILL an
unprivileged user may spawn a process that is autokilled. The child
cannot escalate privileges via setuid/setgid exec after being spawned.
If CLONE_PIDFD_AUTOKILL is specified without CLONE_NNP the caller must
have have CAP_SYS_ADMIN in its user namespace.
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
The following changes since commit 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f:
Linux 7.0-rc1 (2026-02-22 13:18:59 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.pidfs
for you to fetch changes up to d29eb5f0ce674cfe71b93f8ff67dc0f66e6a9371:
Merge patch series "pidfds: add coredump_code field to pidfd_info" (2026-03-23 16:29:22 +0100)
----------------------------------------------------------------
vfs-7.1-rc1.pidfs
Please consider pulling these changes from the signed vfs-7.1-rc1.pidfs tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (8):
clone: add CLONE_AUTOREAP
clone: add CLONE_NNP
pidfd: add CLONE_PIDFD_AUTOKILL
selftests/pidfd: add CLONE_AUTOREAP tests
selftests/pidfd: add CLONE_NNP tests
selftests/pidfd: add CLONE_PIDFD_AUTOKILL tests
Merge patch series "pidfd: add CLONE_AUTOREAP, CLONE_NNP, and CLONE_PIDFD_AUTOKILL"
Merge patch series "pidfds: add coredump_code field to pidfd_info"
Emanuele Rocca (3):
kselftest/coredump: reintroduce null pointer dereference
pidfds: add coredump_code field to pidfd_info
selftests: check pidfd_info->coredump_code correctness
fs/pidfs.c | 50 +-
include/linux/sched/signal.h | 1 +
include/uapi/linux/pidfd.h | 5 +
include/uapi/linux/sched.h | 7 +-
kernel/fork.c | 52 +-
kernel/ptrace.c | 3 +-
kernel/signal.c | 4 +
.../coredump/coredump_socket_protocol_test.c | 26 +
.../selftests/coredump/coredump_socket_test.c | 32 +
.../selftests/coredump/coredump_test_helpers.c | 6 +-
tools/testing/selftests/pidfd/.gitignore | 1 +
tools/testing/selftests/pidfd/Makefile | 2 +-
tools/testing/selftests/pidfd/pidfd.h | 5 +
.../testing/selftests/pidfd/pidfd_autoreap_test.c | 900 +++++++++++++++++++++
tools/testing/selftests/pidfd/pidfd_info_test.c | 1 +
15 files changed, 1075 insertions(+), 20 deletions(-)
create mode 100644 tools/testing/selftests/pidfd/pidfd_autoreap_test.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 11/12 for v7.1] vfs mount
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (9 preceding siblings ...)
2026-04-10 15:21 ` [GIT PULL 10/12 for v7.1] vfs pidfs Christian Brauner
@ 2026-04-10 15:21 ` Christian Brauner
2026-04-10 15:23 ` [GIT PULL 12/12 for v7.1] vfs misc Christian Brauner
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:21 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
* Add FSMOUNT_NAMESPACE flag to fsmount() that creates a new mount
namespace with the newly created filesystem attached to a copy of the
real rootfs. This returns a namespace file descriptor instead of an
O_PATH mount fd, similar to how OPEN_TREE_NAMESPACE works for
open_tree().
This allows creating a new filesystem and immediately placing it in a
new mount namespace in a single operation, which is useful for
container runtimes and other namespace-based isolation mechanisms.
This accompanies OPEN_TREE_NAMESPACE and avoids a needless detour via
OPEN_TREE_NAMESPACE to get the same effect. Will be especially useful
when you mount an actual filesystem to be used as the container
rootfs.
* Currently, creating a new mount namespace always copies the entire
mount tree from the caller's namespace. For containers and sandboxes
that intend to build their mount table from scratch this is wasteful:
they inherit a potentially large mount tree only to immediately tear
it down.
This series adds support for creating a mount namespace that contains
only a clone of the root mount, with none of the child mounts. Two new
flags are introduced:
- CLONE_EMPTY_MNTNS (0x400000000) for clone3(), using the 64-bit flag space.
- UNSHARE_EMPTY_MNTNS (0x00100000) for unshare()
Both flags imply CLONE_NEWNS. The resulting namespace contains a
single nullfs root mount with an immutable empty directory. The
intended workflow is to then mount a real filesystem (e.g., tmpfs)
over the root and build the mount table from there.
* Allow MOVE_MOUNT_BENEATH to target the caller's rootfs, allowing to
switch out the rootfs without pivot_root(2).
The traditional approach to switching the rootfs involves
pivot_root(2) or a chroot_fs_refs()-based mechanism that atomically
updates fs->root for all tasks sharing the same fs_struct. This has
consequences for fork(), unshare(CLONE_FS), and setns().
This series instead decomposes root-switching into individually
atomic, locally-scoped steps:
fd_tree = open_tree(-EBADF, "/newroot", OPEN_TREE_CLONE |
OPEN_TREE_CLOEXEC); fchdir(fd_tree); move_mount(fd_tree, "", AT_FDCWD,
"/", MOVE_MOUNT_BENEATH | MOVE_MOUNT_F_EMPTY_PATH); chroot(".");
umount2(".", MNT_DETACH);
Since each step only modifies the caller's own state, the
fork/unshare/setns races are eliminated by design.
A key step to making this possible is to remove the locked mount
restriction. Originally MOVE_MOUNT_BENEATH doesn't support mounting
beneath a mount that is locked. The locked mount protects the
underlying mount from being revealed. This is a core mechanism of
unshare(CLONE_NEWUSER | CLONE_NEWNS). The mounts in the new mount
namespace become locked. That effectively makes the new mount table
useless as the caller cannot ever get rid of any of the mounts no
matter how useless they are.
We can lift this restriction though. We simply transfer the locked
property from the top mount to the mount beneath. This works because
what we care about is to protect the underlying mount aka the parent.
The mount mounted between the parent and the top mount takes over the
job of protecting the parent mount from the top mount mount. This
leaves us free to remove the locked property from the top mount which
can consequently be unmounted:
unshare(CLONE_NEWUSER | CLONE_NEWNS)
and we inherit a clone of procfs on /proc then currently we cannot
unmount it as:
umount -l /proc
will fail with EINVAL because the procfs mount is locked.
After this series we can now do:
mount --beneath -t tmpfs tmpfs /proc umount -l /proc
after which a tmpfs mount has been placed beneath the procfs mount.
The tmpfs mount has become locked and the procfs mount has become
unlocked.
This means you can safely modify an inherited mount table after
unprivileged namespace creation.
Afterwards we simply make it possible to move a mount beneath the
rootfs allowing to upgrade the rootfs.
Removing the locked restriction makes this very useful for containers
created with unshare(CLONE_NEWUSER | CLONE_NEWNS) to reshuffle an
inherited mount table safely and MOVE_MOUNT_BENEATH makes it possible
to switch out the rootfs instead of using the costly pivot_root(2).
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
This will have a merge conflict with:
[1]: https://lore.kernel.org/20260410-namespaces-misc-v71-000ced4f8b7a@brauner
[2]: https://lore.kernel.org/20260410-vfs-pidfs-v71-b736f79a20b9@brauner
It can be resolved as follows:
diff --cc include/uapi/linux/sched.h
index 149dbc64923b,4e76fce9f777..000000000000
--- a/include/uapi/linux/sched.h
+++ b/include/uapi/linux/sched.h
@@@ -34,11 -34,9 +34,12 @@@
#define CLONE_IO 0x80000000 /* Clone io context */
/* Flags for the clone3() syscall. */
-#define CLONE_CLEAR_SIGHAND 0x100000000ULL /* Clear any signal handler and reset to SIG_DFL. */
-#define CLONE_INTO_CGROUP 0x200000000ULL /* Clone into a specific cgroup given the right permissions. */
+#define CLONE_CLEAR_SIGHAND (1ULL << 32) /* Clear any signal handler and reset to SIG_DFL. */
+#define CLONE_INTO_CGROUP (1ULL << 33) /* Clone into a specific cgroup given the right permissions. */
+#define CLONE_AUTOREAP (1ULL << 34) /* Auto-reap child on exit. */
+#define CLONE_NNP (1ULL << 35) /* Set no_new_privs on child. */
+#define CLONE_PIDFD_AUTOKILL (1ULL << 36) /* Kill child when clone pidfd closes. */
+ #define CLONE_EMPTY_MNTNS (1ULL << 37) /* Create an empty mount namespace. */
/*
* cloning flags intersect with CSIGNAL so can be used with unshare and clone3
diff --cc kernel/fork.c
index 55a6906d3014,dea6b3454447..000000000000
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@@ -2941,9 -2906,9 +2951,9 @@@ static inline bool clone3_stack_valid(s
static bool clone3_args_valid(struct kernel_clone_args *kargs)
{
/* Verify that no unknown flags are passed along. */
-- if (kargs->flags &
- ~(CLONE_LEGACY_FLAGS | CLONE_CLEAR_SIGHAND | CLONE_INTO_CGROUP |
- CLONE_AUTOREAP | CLONE_NNP | CLONE_PIDFD_AUTOKILL))
- ~(CLONE_LEGACY_FLAGS | CLONE_CLEAR_SIGHAND |
- CLONE_INTO_CGROUP | CLONE_EMPTY_MNTNS))
++ if (kargs->flags & ~(CLONE_LEGACY_FLAGS | CLONE_CLEAR_SIGHAND |
++ CLONE_INTO_CGROUP | CLONE_AUTOREAP | CLONE_NNP |
++ CLONE_PIDFD_AUTOKILL | CLONE_EMPTY_MNTNS))
return false;
/*
@@@ -3092,9 -3057,11 +3102,9 @@@ void __init proc_caches_init(void
*/
static int check_unshare_flags(unsigned long unshare_flags)
{
- if (unshare_flags & ~(CLONE_THREAD|CLONE_FS|CLONE_NEWNS|CLONE_SIGHAND|
+ if (unshare_flags & ~(CLONE_THREAD|CLONE_FS|CLONE_SIGHAND|
CLONE_VM|CLONE_FILES|CLONE_SYSVSEM|
- CLONE_NS_ALL))
- CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWNET|
- CLONE_NEWUSER|CLONE_NEWPID|CLONE_NEWCGROUP|
- CLONE_NEWTIME | UNSHARE_EMPTY_MNTNS))
++ CLONE_NS_ALL|UNSHARE_EMPTY_MNTNS))
return -EINVAL;
/*
* Not implemented, but pretend it works if there is nothing
diff --cc kernel/nsproxy.c
index 63b44ee79847,1bdc5be2dd20..000000000000
--- a/kernel/nsproxy.c
+++ b/kernel/nsproxy.c
@@@ -211,9 -213,12 +212,10 @@@ int unshare_nsproxy_namespaces(unsigne
struct nsproxy **new_nsp, struct cred *new_cred, struct fs_struct *new_fs)
{
struct user_namespace *user_ns;
+ u64 flags = unshare_flags;
int err = 0;
- if (!(unshare_flags & (CLONE_NS_ALL & ~CLONE_NEWUSER)))
- if (!(flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
- CLONE_NEWNET | CLONE_NEWPID | CLONE_NEWCGROUP |
- CLONE_NEWTIME)))
++ if (!(flags & (CLONE_NS_ALL & ~CLONE_NEWUSER)))
return 0;
user_ns = new_cred ? new_cred->user_ns : current_user_ns();
The following changes since commit 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681:
Linux 7.0-rc3 (2026-03-08 16:56:54 -0700)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.mount
for you to fetch changes up to ef6960362e5b33402b9977972ab2a9fabc4c8cb9:
selftests/namespaces: remove unused utils.h include from listns_efault_test (2026-03-31 10:58:58 +0200)
----------------------------------------------------------------
vfs-7.1-rc1.mount
Please consider pulling these changes from the signed vfs-7.1-rc1.mount tag.
Thanks!
Christian
----------------------------------------------------------------
Christian Brauner (27):
mount: start iterating from start of rbtree
mount: simplify __do_loopback()
mount: add FSMOUNT_NAMESPACE
tools: update mount.h header
selftests/statmount: add statmount_alloc() helper
selftests: add FSMOUNT_NAMESPACE tests
Merge patch series "fsmount: add FSMOUNT_NAMESPACE"
namespace: allow creating empty mount namespaces
selftests/filesystems: add tests for empty mount namespaces
selftests/filesystems: add clone3 tests for empty mount namespaces
Merge patch series "namespace: allow creating empty mount namespaces"
move_mount: transfer MNT_LOCKED
move_mount: allow MOVE_MOUNT_BENEATH on the rootfs
selftests/filesystems: add MOVE_MOUNT_BENEATH rootfs tests
Merge patch series "move_mount: expand MOVE_MOUNT_BENEATH"
Merge patch series "fs, audit: Avoid excessive dput/dget in audit_context setup and reset paths"
fs: use path_equal() in fs_struct helpers
fs: document seqlock usage in pwd pool APIs
fs: add drain_fs_pwd_pool() helper
fs: factor out get_fs_pwd_pool_locked() for lock-held callers
Merge branch 'vfs-7.1.fs_struct'
mount: always duplicate mount
selftests/statmount: remove duplicate wait_for_pid()
selftests/empty_mntns: fix statmount_alloc() signature mismatch
selftests/empty_mntns: fix wrong CLONE_EMPTY_MNTNS hex value in comment
selftests/fsmount_ns: add missing TARGETS and fix cap test
selftests/namespaces: remove unused utils.h include from listns_efault_test
Waiman Long (2):
fs: Add a pool of extra fs->pwd references to fs_struct
audit: Use the new {get,put}_fs_pwd_pool() APIs to get/put pwd references
fs/fs_struct.c | 34 +-
fs/namespace.c | 206 ++--
include/linux/fs_struct.h | 43 +-
include/uapi/linux/mount.h | 1 +
include/uapi/linux/sched.h | 7 +
kernel/auditsc.c | 7 +-
kernel/fork.c | 17 +-
kernel/nsproxy.c | 21 +-
tools/include/uapi/linux/mount.h | 14 +-
tools/testing/selftests/Makefile | 3 +
.../selftests/filesystems/empty_mntns/.gitignore | 4 +
.../selftests/filesystems/empty_mntns/Makefile | 12 +
.../empty_mntns/clone3_empty_mntns_test.c | 938 ++++++++++++++++
.../filesystems/empty_mntns/empty_mntns.h | 25 +
.../filesystems/empty_mntns/empty_mntns_test.c | 725 +++++++++++++
.../empty_mntns/overmount_chroot_test.c | 225 ++++
.../selftests/filesystems/fsmount_ns/.gitignore | 1 +
.../selftests/filesystems/fsmount_ns/Makefile | 10 +
.../filesystems/fsmount_ns/fsmount_ns_test.c | 1135 ++++++++++++++++++++
.../selftests/filesystems/move_mount/.gitignore | 2 +
.../selftests/filesystems/move_mount/Makefile | 10 +
.../filesystems/move_mount/move_mount_test.c | 492 +++++++++
.../selftests/filesystems/open_tree_ns/Makefile | 2 +-
.../filesystems/open_tree_ns/open_tree_ns_test.c | 43 +-
.../selftests/filesystems/statmount/statmount.h | 51 +
.../filesystems/statmount/statmount_test.c | 45 +-
.../filesystems/statmount/statmount_test_ns.c | 25 -
tools/testing/selftests/filesystems/utils.c | 4 +-
tools/testing/selftests/filesystems/utils.h | 2 +
.../selftests/namespaces/listns_efault_test.c | 1 -
30 files changed, 3903 insertions(+), 202 deletions(-)
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/.gitignore
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/Makefile
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/clone3_empty_mntns_test.c
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/empty_mntns.h
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/empty_mntns_test.c
create mode 100644 tools/testing/selftests/filesystems/empty_mntns/overmount_chroot_test.c
create mode 100644 tools/testing/selftests/filesystems/fsmount_ns/.gitignore
create mode 100644 tools/testing/selftests/filesystems/fsmount_ns/Makefile
create mode 100644 tools/testing/selftests/filesystems/fsmount_ns/fsmount_ns_test.c
create mode 100644 tools/testing/selftests/filesystems/move_mount/.gitignore
create mode 100644 tools/testing/selftests/filesystems/move_mount/Makefile
create mode 100644 tools/testing/selftests/filesystems/move_mount/move_mount_test.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* [GIT PULL 12/12 for v7.1] vfs misc
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
` (10 preceding siblings ...)
2026-04-10 15:21 ` [GIT PULL 11/12 for v7.1] vfs mount Christian Brauner
@ 2026-04-10 15:23 ` Christian Brauner
11 siblings, 0 replies; 13+ messages in thread
From: Christian Brauner @ 2026-04-10 15:23 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel, linux-kernel
Hey Linus,
/* Summary */
Features
- coredump: add tracepoint for coredump events
- fs: hide file and bfile caches behind runtime const machinery
Fixes
- fix architecture-specific compat_ftruncate64 implementations
- dcache: Limit the minimal number of bucket to two
- fs/omfs: reject s_sys_blocksize smaller than OMFS_DIR_START
- fs/mbcache: cancel shrink work before destroying the cache
- dcache: permit dynamic_dname()s up to NAME_MAX
Cleanups
- remove or unexport unused fs_context infrastructure
- trivial ->setattr cleanups
- selftests/filesystems: Assume that TIOCGPTPEER is defined
- writeback: fix kernel-doc function name mismatch for wb_put_many()
- autofs: replace manual symlink buffer allocation in autofs_dir_symlink
- init/initramfs.c: trivial fix: FSM -> Finite-state machine
- fs: remove stale and duplicate forward declarations
- readdir: Introduce dirent_size()
- fs: Replace user_access_{begin/end} by scoped user access
- kernel: acct: fix duplicate word in comment
- fs: write a better comment in step_into() concerning .mnt assignment
- fs: attr: fix comment formatting and spelling issues
/* Testing */
gcc (Debian 14.2.0-19) 14.2.0
Debian clang version 19.1.7 (3+b1)
No build failures or warnings were observed.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
[1]: https://lore.kernel.org/linux-next/adO9szS5_I7TmAjz@sirena.org.uk
This has a merge conflict with:
[1]: https://lore.kernel.org/20260410-vfs-kino-v71-672d31bc705c@brauner
diff --cc fs/affs/inode.c
index e03e9f109ff9,f660e76584b3..000000000000
--- a/fs/affs/inode.c
+++ b/fs/affs/inode.c
@@@ -219,7 -218,7 +218,7 @@@ affs_setattr(struct mnt_idmap *idmap, s
struct inode *inode = d_inode(dentry);
int error;
- pr_debug("notify_change(%llu,0x%x)\n", inode->i_ino, attr->ia_valid);
- pr_debug("setattr(%lu,0x%x)\n", inode->i_ino, attr->ia_valid);
++ pr_debug("setattr(%llu,0x%x)\n", inode->i_ino, attr->ia_valid);
error = setattr_prepare(&nop_mnt_idmap, dentry, attr);
if (error)
The following changes since commit 9702969978695d9a699a1f34771580cdbb153b33:
Merge tag 'slab-for-7.0-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab (2026-02-16 13:41:38 -0800)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.1-rc1.misc
for you to fetch changes up to 97b67e64affb0e709eeecc50f6a9222fc20bd14b:
dcache: permit dynamic_dname()s up to NAME_MAX (2026-04-07 12:32:22 +0200)
----------------------------------------------------------------
vfs-7.1-rc1.misc
Please consider pulling these changes from the signed vfs-7.1-rc1.misc tag.
Thanks!
Christian
----------------------------------------------------------------
Aleksa Sarai (1):
dcache: permit dynamic_dname()s up to NAME_MAX
Askar Safin (1):
init/initramfs.c: trivial fix: FSM -> Finite-state machine
Breno Leitao (1):
coredump: add tracepoint for coredump events
Chelsy Ratnawat (1):
fs: attr: fix comment formatting and spelling issues
Christian Brauner (3):
Merge patch series "remove or unexport unused fs_conext infrastructure"
Merge patch series "fix architecture-specific compat_ftruncate64 implementations"
Merge patch series "trivial ->setattr cleanups"
Christoph Hellwig (12):
fs: mark bool_names static
fs: remove fsparam_blob / fs_param_is_blob
fs: remove fsparam_path / fs_param_is_path
fs: unexport fs_context_for_reconfigure
fs: fix archiecture-specific compat_ftruncate64
fs: pass on FTRUNCATE_* flags to do_truncate
fs: remove do_sys_truncate
hfs: update comments on hfs_inode_setattr
adfs: rename adfs_notify_change to adfs_setattr
affs: rename affs_notify_change to affs_setattr
proc: rename proc_setattr to proc_nochmod_setattr
proc: rename proc_notify_change to proc_setattr
Christophe Leroy (CS GROUP) (2):
readdir: Introduce dirent_size()
fs: Replace user_access_{begin/end} by scoped user access
HyungJung Joo (2):
fs/omfs: reject s_sys_blocksize smaller than OMFS_DIR_START
fs/mbcache: cancel shrink work before destroying the cache
Kit Dallege (1):
writeback: fix kernel-doc function name mismatch for wb_put_many()
Mark Brown (1):
selftests/filesystems: Assume that TIOCGPTPEER is defined
Mateusz Guzik (2):
fs: write a better comment in step_into() concerning .mnt assignment
fs: hide file and bfile caches behind runtime const machinery
Thorsten Blum (1):
autofs: replace manual symlink buffer allocation in autofs_dir_symlink
Yuto Ohnuki (1):
fs: remove stale and duplicate forward declarations
Zhihao Cheng (1):
dcache: Limit the minimal number of bucket to two
haoyu.lu (1):
kernel: acct: fix duplicate word in comment
Documentation/filesystems/mount_api.rst | 4 -
arch/arm64/kernel/sys32.c | 2 +-
arch/mips/kernel/linux32.c | 2 +-
arch/parisc/kernel/sys_parisc.c | 4 +-
arch/powerpc/kernel/sys_ppc32.c | 2 +-
arch/sparc/kernel/sys_sparc32.c | 2 +-
arch/x86/kernel/sys_ia32.c | 3 +-
fs/adfs/adfs.h | 4 +-
fs/adfs/dir.c | 2 +-
fs/adfs/file.c | 2 +-
fs/adfs/inode.c | 6 +-
fs/affs/affs.h | 2 +-
fs/affs/dir.c | 2 +-
fs/affs/file.c | 2 +-
fs/affs/inode.c | 5 +-
fs/affs/symlink.c | 2 +-
fs/attr.c | 6 +-
fs/autofs/root.c | 8 +-
fs/coredump.c | 5 ++
fs/d_path.c | 11 +--
fs/dcache.c | 4 +-
fs/file.c | 2 +-
fs/file_table.c | 31 ++++---
fs/fs_context.c | 1 -
fs/fs_parser.c | 19 +----
fs/hfs/inode.c | 21 +----
fs/internal.h | 3 +-
fs/mbcache.c | 1 +
fs/namei.c | 2 +-
fs/omfs/inode.c | 6 ++
fs/open.c | 40 +++++----
fs/proc/base.c | 22 ++---
fs/proc/fd.c | 6 +-
fs/proc/generic.c | 8 +-
fs/proc/internal.h | 4 +-
fs/proc/namespaces.c | 4 +-
fs/proc/proc_net.c | 2 +-
fs/readdir.c | 103 +++++++++--------------
fs/select.c | 35 +++-----
include/asm-generic/vmlinux.lds.h | 4 +-
include/linux/backing-dev-defs.h | 2 +-
include/linux/blkdev.h | 1 +
include/linux/fs.h | 3 -
include/linux/fs_parser.h | 8 +-
include/linux/syscalls.h | 16 +---
include/trace/events/coredump.h | 45 ++++++++++
init/initramfs.c | 2 +-
io_uring/truncate.c | 2 +-
kernel/acct.c | 2 +-
tools/testing/selftests/filesystems/devpts_pts.c | 2 -
50 files changed, 225 insertions(+), 252 deletions(-)
create mode 100644 include/trace/events/coredump.h
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-04-10 15:23 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-10 15:15 [GIT PULL 00/12 for v7.1] v7.1 Christian Brauner
2026-04-10 15:16 ` [GIT PULL 01/12 for v7.1] vfs writeback Christian Brauner
2026-04-10 15:16 ` [GIT PULL 02/12 for v7.1] vfs xattr Christian Brauner
2026-04-10 15:16 ` [GIT PULL 03/12 for v7.1] vfs directory Christian Brauner
2026-04-10 15:17 ` [GIT PULL 04/12 for v7.1] vfs integrity Christian Brauner
2026-04-10 15:18 ` [GIT PULL 05/12 for v7.1] vfs fs_struct Christian Brauner
2026-04-10 15:18 ` [GIT PULL 06/12 for v7.1] vfs kino Christian Brauner
2026-04-10 15:19 ` [GIT PULL 07/12 for v7.1] vfs fat Christian Brauner
2026-04-10 15:19 ` [GIT PULL 08/12 for v7.1] vfs bh metadata Christian Brauner
2026-04-10 15:19 ` [GIT PULL 09/12 for v7.1] namespaces misc Christian Brauner
2026-04-10 15:21 ` [GIT PULL 10/12 for v7.1] vfs pidfs Christian Brauner
2026-04-10 15:21 ` [GIT PULL 11/12 for v7.1] vfs mount Christian Brauner
2026-04-10 15:23 ` [GIT PULL 12/12 for v7.1] vfs misc Christian Brauner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox