• Linus Torvalds's avatar
    Merge tag 'vfs-6.11.inode' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs · 2aae1d67
    Linus Torvalds authored
    Pull vfs inode / dentry updates from Christian Brauner:
     "This contains smaller performance improvements to inodes and dentries:
    
      inode:
    
       - Add rcu based inode lookup variants.
    
         They avoid one inode hash lock acquire in the common case thereby
         significantly reducing contention. We already support RCU-based
         operations but didn't take advantage of them during inode
         insertion.
    
         Callers of iget_locked() get the improvement without any code
         changes. Callers that need a custom callback can switch to
         iget5_locked_rcu() as e.g., did btrfs.
    
         With 20 threads each walking a dedicated 1000 dirs * 1000 files
         directory tree to stat(2) on a 32 core + 24GB ram vm:
    
            before: 3.54s user 892.30s system 1966% cpu 45.549 total
            after:  3.28s user 738.66s system 1955% cpu 37.932 total (-16.7%)
    
         Long-term we should pick up the effort to introduce more
         fine-grained locking and possibly improve on the currently used
         hash implementation.
    
       - Start zeroing i_state in inode_init_always() instead of doing it in
         individual filesystems.
    
         This allows us to remove an unneeded lock acquire in new_inode()
         and not burden individual filesystems with this.
    
      dcache:
    
       - Move d_lockref out of the area used by RCU lookup to avoid
         cacheline ping poing because the embedded name is sharing a
         cacheline with d_lockref.
    
       - Fix dentry size on 32bit with CONFIG_SMP=y so it does actually end
         up with 128 bytes in total"
    
    * tag 'vfs-6.11.inode' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
      fs: fix dentry size
      vfs: move d_lockref out of the area used by RCU lookup
      bcachefs: remove now spurious i_state initialization
      xfs: remove now spurious i_state initialization in xfs_inode_alloc
      vfs: partially sanitize i_state zeroing on inode creation
      xfs: preserve i_state around inode_init_always in xfs_reinit_inode
      btrfs: use iget5_locked_rcu
      vfs: add rcu-based find_inode variants for iget ops
    2aae1d67
inode.c 70.7 KB