The following changes since commit 4a0b33f771db2b82fdfad08b9f34def786162865: selinux: saner handling of policy reloads (2023-11-16 12:45:33 -0500) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git tags/pull-dcache for you to fetch changes up to 1b6ae9f6e6c3e3c35aad0f11b116a81780b8aa03: dcache: remove unnecessary NULL check in dget_dlock() (2023-11-25 02:51:56 -0500) Two conflicts - one is the usual append vs. append in D/f/porting.rst; a slightly more interesting one in fs/tracefs/inode.c, where the switch of d_child/d_subdirs to hlist runs into changes made in mainline by "eventfs: Fix file and directory uid and gid ownership". Pretty straightforward; I've pushed my resolution variant into #resolution-candidate. Note that subsequent changes in tracefs tree eliminate the entire "walk the tree and flip ->i_gid" thing, so the entire clone of d_walk() in set_gid() will be gone anyway... ---------------------------------------------------------------- dcache stuff for this cycle change of locking rules for __dentry_kill(), regularized refcounting rules in that area, assorted cleanups and removal of weird corner cases (e.g. now ->d_iput() on child is always called before the parent might hit __dentry_kill(), etc.) Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> ---------------------------------------------------------------- Al Viro (41): struct dentry: get rid of randomize_layout idiocy get rid of __dget() DCACHE_... ->d_flags bits: switch to BIT() DCACHE_COOKIE: RIP kill d_{is,set}_fallthru() dentry.h: trim externs [software coproarchaeology] dentry.h: kill a mysterious comment kill d_backing_dentry() Merge branch 'no-rebase-overlayfs' into work.dcache-misc switch nfsd_client_rmdir() to use of simple_recursive_removal() coda_flag_children(): cope with dentries turning negative dentry: switch the lists of children to hlist centralize killing dentry from shrink list shrink_dentry_list(): no need to check that dentry refcount is marked dead fast_dput(): having ->d_delete() is not reason to delay refcount decrement fast_dput(): handle underflows gracefully fast_dput(): new rules for refcount __dput_to_list(): do decrement of refcount in the callers make retain_dentry() neutral with respect to refcounting __dentry_kill(): get consistent rules for victim's refcount dentry_kill(): don't bother with retain_dentry() on slow path Call retain_dentry() with refcount 0 fold the call of retain_dentry() into fast_dput() don't try to cut corners in shrink_lock_dentry() fold dentry_kill() into dput() to_shrink_list(): call only if refcount is 0 switch select_collect{,2}() to use of to_shrink_list() d_prune_aliases(): use a shrink list __dentry_kill(): new locking scheme retain_dentry(): introduce a trimmed-down lockless variant kill d_instantate_anon(), fold __d_instantiate_anon() into remaining caller d_alloc_pseudo(): move setting ->d_op there from the (sole) caller nsfs: use d_make_root() Merge branch 'merged-selinux' into work.dcache-misc simple_fill_super(): don't bother with d_genocide() on failure d_genocide(): move the extern into fs/internal.h get rid of DCACHE_GENOCIDE d_alloc_parallel(): in-lookup hash insertion doesn't need an RCU variant __d_unalias() doesn't use inode argument Merge branches 'work.dcache-misc' and 'work.dcache2' into work.dcache kill DCACHE_MAY_FREE Amir Goldstein (1): ovl: stop using d_alloc_anon()/d_instantiate_anon() Vegard Nossum (1): dcache: remove unnecessary NULL check in dget_dlock() Documentation/filesystems/porting.rst | 34 ++ arch/powerpc/platforms/cell/spufs/inode.c | 5 +- fs/afs/dynroot.c | 5 +- fs/autofs/expire.c | 7 +- fs/ceph/dir.c | 2 +- fs/ceph/mds_client.c | 2 +- fs/coda/cache.c | 8 +- fs/dcache.c | 650 +++++++++++------------------- fs/file_table.c | 5 - fs/internal.h | 5 + fs/libfs.c | 62 ++- fs/nfsd/nfsctl.c | 70 +--- fs/notify/fsnotify.c | 2 +- fs/nsfs.c | 7 +- fs/overlayfs/export.c | 23 +- fs/tracefs/inode.c | 34 +- include/linux/dcache.h | 162 ++++---- 17 files changed, 425 insertions(+), 658 deletions(-)