From: Christian Brauner <brauner@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Brauner <brauner@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL for v7.4] vfs fixes
Date: Wed, 11 Nov 2026 23:36:23 +0100 [thread overview]
Message-ID: <20261111-vfs-7.4-rc3.fixes.2-6660a456a8e2@brauner> (raw)
Hey Linus,
/* Summary */
This contains another round of fixes for the current development cycle:
- inode: Let the shrinker reclaim inodes with I_METADATA_WRITEBACK like
any other clean inode and have evict() write out what the bit tracks
unless the inode is being deleted.
Since v7.3 ext2, ext4 without a journal, fat, udf and minix set
I_METADATA_WRITEBACK when they copy an inode into its buffer and only
fsync() and friends clear it again. inode_lru_isolate() took such
inodes off the LRU expecting something to put them back once the bit
was gone but nothing ever did. So they couldn't be reclaimed until
something fsynced them or the filesystem was unmounted. On ext4
without a journal an atime update was enough to pin an inode, and
creating 60000 small files in a memory cgroup limited to 96M got the
task OOM killed after about 43000 of them. Now all 60000 get created.
- dcache:
* Give d_set_mounted() a seqlock of its own that d_invalidate() waits
on after unhashing the dentry. Since v6.17 d_set_mounted() doesn't
bump the seqcount of rename_lock anymore, so a mount racing
d_invalidate() could end up below the unhashed directory. Nobody
can reach it there and it pins the subtree until the mount
namespace goes away. With a FUSE directory 3000 levels deep 151 of
200 bind mounts racing FUSE_NOTIFY_INVAL_ENTRY ended up there.
* Only take busy secondary roots off ->s_roots in do_one_tree() so
that umount waits for a racing eviction of an idle one. Since v7.3
it didn't, which ended in busy inodes after unmount and an iput()
on a dead superblock.
* Make a disconnected dentry a secondary root when the mount on it
goes away so that umount finds it and waits for its eviction. With
CAP_DAC_READ_SEARCH such a dentry can be mounted on via
open_by_handle_at() and move_mount() and umount racing its eviction
ended the same way.
- splice:
* Remove pipe buffer stealing as you and David suggested. fuse and
virtio_console were the only users of ->try_steal() and now always
copy, as they already did when a steal failed. Stealing took page
cache folios out of their files and turned pages into page cache
folios and back. SPLICE_F_GIFT and SPLICE_F_MOVE are still accepted
and fuse still advertises FUSE_SPLICE_MOVE so servers that ask for
it mount as before.
* Clamp a ->write_iter() result that is larger than the iterator in
iter_file_splice_write() instead of only warning about it.
Otherwise the pipe releases buffers past its head.
- ns:
* Allocate the namespace id before calling the namespace_init LSM hook
that was added this merge window. Landlock now logs the allocated id
instead of zero when it denies the creation of a namespace.
* Don't mark the arguments of the namespace_init and namespace_free
hooks as trusted for bpf LSM programs. Both see namespaces that are
only partially set up or on their way out.
- proc: Don't let proc_sys_call_handler() report more bytes written than
it was passed when a cgroup/sysctl bpf program replaced the value with
a longer one. A splice() into the sysctl file then walked past the
pipe head.
- coda: Pass the append state of each write on to the container file
with RWF_APPEND or RWF_NOAPPEND. coda_open() sets O_APPEND on the
container file after its iocb flags were cached, so an O_APPEND write
overwrote existing data instead of appending.
- adfs: Reject big directory entries in adfs_fplus_getnext() whose name
doesn't fit into the name buffer. A crafted image overflowed it on the
stack.
/* Conflicts */
Merge conflicts with mainline
=============================
No known conflicts.
Merge conflicts with other trees
================================
No known conflicts.
The following changes since commit 1448959fe3d013ffdb8302d17e4a8fdad2d2da95:
fs: fix the SEEK_CUR f_lock condition (2026-11-09 16:04:55 +0100)
are available in the Git repository at:
git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-7.4-rc3.fixes.2
for you to fetch changes up to 2cca8a6f6ae690755862f5b633125119dcf6bd0c:
Merge patch series "ns: fixes identifier fixes" (2026-11-11 12:41:49 +0100)
----------------------------------------------------------------
vfs-7.4-rc3.fixes.2
Please consider pulling these changes from the signed vfs-7.4-rc3.fixes.2 tag.
Thanks!
Christian
----------------------------------------------------------------
Cheng Yongkang (2):
fs/proc: fix the write length returned by proc_sys_call_handler()
fs/splice: clamp an over-reported write_iter result
Christian Brauner (22):
ext2: add ext2_inode_block() helper
ext2: don't read the inode block in ext2_sync_inode_metadata()
ext4: use sb_find_get_block_nonatomic() in ext4_get_inode_loc_noio()
ext4: don't read the inode block in ext4_sync_inode_metadata()
minix: add minix_inode_block() helper
minix: don't read the inode block in minix_sync_inode_metadata()
udf: don't allocate the inode block in udf_sync_inode_metadata()
fs: set I_METADATA_WRITEBACK in mmb_mark_buffer_dirty()
fs: don't strand I_METADATA_WRITEBACK inodes outside the LRU
ext2: drop mmb_sync() from ext2_evict_inode()
ext4: drop mmb_sync() from ext4_evict_inode()
minix: drop mmb_sync() from minix_evict_inode()
udf: drop mmb_sync() from udf_evict_inode()
fat: drop mmb_sync() from fat_evict_inode()
Merge patch series "fs: reclaim inodes with I_METADATA_WRITEBACK"
dcache: let d_invalidate() wait for a d_set_mounted() in flight
Merge patch series "dcache: fixes for mountpoints racing d_invalidate() and umount"
Merge patch series "splice: remove pipe buffer stealing"
bpf: don't mark namespace_init and namespace_free arguments as trusted
ns: allocate the namespace id before the namespace_init hook
nstree: drop ns_tree_add_raw()
Merge patch series "ns: fixes identifier fixes"
Hungyu Lin (1):
coda: honor the append state of each write
HyeongJun An (1):
fs/adfs: bound directory entry name length in adfs_fplus_getnext()
Josef Bacik (2):
dcache: wait for a racing eviction of a secondary root
dcache: let umount find a disconnected ex-mountpoint
Kiryl Shutsemau (Meta) (4):
virtio_console: copy pipe buffers in splice_write()
fuse: don't move pipe buffers into the page cache
splice: remove pipe buffer stealing
splice: replace nosteal_pipe_buf_ops with default_pipe_buf_ops
Documentation/admin-guide/LSM/landlock.rst | 5 +-
Documentation/trace/events-landlock.rst | 5 +-
drivers/char/virtio_console.c | 39 +++-----
fs/adfs/dir_fplus.c | 2 +
fs/buffer.c | 16 +++-
fs/coda/file.c | 3 +-
fs/dcache.c | 44 +++++++--
fs/ext2/inode.c | 63 ++++++++-----
fs/ext4/inode.c | 22 ++---
fs/fat/inode.c | 1 -
fs/fuse/args.h | 1 -
fs/fuse/dev.c | 146 +----------------------------
fs/fuse/file.c | 1 -
fs/fuse/fuse_dev_i.h | 1 -
fs/inode.c | 13 ++-
fs/minix/bitmap.c | 37 +++++---
fs/minix/inode.c | 18 ++--
fs/minix/minix.h | 1 +
fs/namespace.c | 6 +-
fs/pipe.c | 43 ---------
fs/proc/proc_sysctl.c | 5 +-
fs/splice.c | 113 +++-------------------
fs/udf/inode.c | 33 +++----
include/linux/fs/super_types.h | 2 +-
include/linux/ns_common.h | 16 ++--
include/linux/nstree.h | 29 +-----
include/linux/pipe_fs_i.h | 38 --------
include/trace/events/landlock.h | 3 +-
ipc/namespace.c | 3 +-
kernel/bpf/bpf_lsm.c | 2 +
kernel/nscommon.c | 7 +-
kernel/nstree.c | 2 +-
kernel/watch_queue.c | 4 -
mm/shmem.c | 7 --
net/core/net_namespace.c | 4 +-
net/core/skbuff.c | 2 +-
security/landlock/ns.c | 3 +-
tools/testing/selftests/landlock/ns_test.c | 7 +-
38 files changed, 239 insertions(+), 508 deletions(-)
next reply other threads:[~2026-11-11 22:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 22:36 Christian Brauner [this message]
2026-11-12 2:57 ` pr-tracker-bot
-- strict thread matches above, loose matches on Subject: below --
2026-11-10 10:47 Christian Brauner
2026-11-10 17:50 ` pr-tracker-bot
2026-10-30 17:20 Christian Brauner
2026-10-30 23:10 ` pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261111-vfs-7.4-rc3.fixes.2-6660a456a8e2@brauner \
--to=brauner@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®