]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'vfs-7.0-rc1.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Feb 2026 23:13:05 +0000 (15:13 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Feb 2026 23:13:05 +0000 (15:13 -0800)
Pull misc vfs updates from Christian Brauner:
 "This contains a mix of VFS cleanups, performance improvements, API
  fixes, documentation, and a deprecation notice.

  Scalability and performance:

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

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

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

   - Annotate cdev_lock with __cacheline_aligned_in_smp to prevent
     false-sharing

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

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

  Bug fixes and correctness:

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

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

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

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

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

  API modernization:

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

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

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

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

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

  Deprecation:

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

  Documentation:

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

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

  Testing:

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

  Misc:

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

* tag 'vfs-7.0-rc1.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: (28 commits)
  posix_acl: make posix_acl_to_xattr() alloc the buffer
  fs: make insert_inode_locked() wait for inode destruction
  initramfs_test: kunit test for cpio.filesize > PATH_MAX
  fs: improve dump_inode() to safely access inode fields
  fs: add <linux/init_task.h> for 'init_fs'
  docs: exportfs: Use source code struct documentation
  fs: move initializing f_mode before file_ref_init()
  exportfs: Complete kernel-doc for struct export_operations
  exportfs: Mark struct export_operations functions at kernel-doc
  exportfs: Fix kernel-doc output for get_name()
  acct(2): begin the deprecation of legacy BSD process accounting
  device_cgroup: remove branch hint after code refactor
  VFS: fix __start_dirop() kernel-doc warnings
  fs: Describe @isnew parameter in ilookup5_nowait()
  fs/namei: Remove redundant DCACHE_MANAGED_DENTRY check in __follow_mount_rcu
  fs: only assert on LOOKUP_RCU when built with CONFIG_DEBUG_VFS
  select: store end_time as timespec64 in restart block
  chardev: Switch to guard(mutex) and __free(kfree)
  namespace: Replace simple_strtoul with kstrtoul to parse boot params
  dcache: Replace simple_strtoul with kstrtoul in set_dhash_entries
  ...

1  2 
fs/dcache.c
fs/ext4/super.c
fs/fat/dir.c
fs/fat/file.c
fs/fuse/file.c
fs/inode.c
fs/locks.c
fs/namei.c
fs/namespace.c
include/linux/filelock.h
include/linux/fs.h

diff --cc fs/dcache.c
Simple merge
diff --cc fs/ext4/super.c
Simple merge
diff --cc fs/fat/dir.c
Simple merge
diff --cc fs/fat/file.c
Simple merge
diff --cc fs/fuse/file.c
Simple merge
diff --cc fs/inode.c
Simple merge
diff --cc fs/locks.c
Simple merge
diff --cc fs/namei.c
index 76bc569ace8ee5881c9b6f8ed12309d79fb04d16,4e3a5fd370a8a480d20891480928f2c613c1dbbe..b28ecb699f3235492bc4c455c8dcaba03cb47b8a
@@@ -879,13 -881,8 +879,13 @@@ static bool try_to_unlazy(struct nameid
  {
        struct dentry *parent = nd->path.dentry;
  
-       BUG_ON(!(nd->flags & LOOKUP_RCU));
+       VFS_BUG_ON(!(nd->flags & LOOKUP_RCU));
  
 +      if (unlikely(nd->flags & LOOKUP_CACHED)) {
 +              drop_links(nd);
 +              nd->depth = 0;
 +              goto out1;
 +      }
        if (unlikely(nd->depth && !legitimize_links(nd)))
                goto out1;
        if (unlikely(!legitimize_path(nd, &nd->path, nd->seq)))
@@@ -919,13 -916,9 +919,14 @@@ out
  static bool try_to_unlazy_next(struct nameidata *nd, struct dentry *dentry)
  {
        int res;
-       BUG_ON(!(nd->flags & LOOKUP_RCU));
+       VFS_BUG_ON(!(nd->flags & LOOKUP_RCU));
  
 +      if (unlikely(nd->flags & LOOKUP_CACHED)) {
 +              drop_links(nd);
 +              nd->depth = 0;
 +              goto out2;
 +      }
        if (unlikely(nd->depth && !legitimize_links(nd)))
                goto out2;
        res = __legitimize_mnt(nd->path.mnt, nd->m_seq);
diff --cc fs/namespace.c
Simple merge
Simple merge
Simple merge