]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
Merge tag 'pull-dcache-busy-wait' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Apr 2026 14:30:44 +0000 (07:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Apr 2026 14:30:44 +0000 (07:30 -0700)
commit292a2bcd172662c7f281a7d79b095c91101c2e32
treecdf73bc18496915cd8e8deb1eea1746a8bc491be
parentb4e07588e743c989499ca24d49e752c074924a9a
parent14a51045e10d3087b8374deef02a9d3a694132d6
Merge tag 'pull-dcache-busy-wait' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull dcache busy loop updates from Al Viro:
 "Fix livelocks in shrink_dcache_tree()

  If shrink_dcache_tree() finds a dentry in the middle of being killed
  by another thread, it has to wait until the victim finishes dying,
  gets detached from the tree and ceases to pin its parent.

  The way we used to deal with that amounted to busy-wait;
  unfortunately, it's not just inefficient but can lead to reliably
  reproducible hard livelocks.

  Solved by having shrink_dentry_tree() attach a completion to such
  dentry, with dentry_unlist() calling complete() on all objects
  attached to it. With a bit of care it can be done without growing
  struct dentry or adding overhead in normal case"

* tag 'pull-dcache-busy-wait' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  get rid of busy-waiting in shrink_dcache_tree()
  dcache.c: more idiomatic "positives are not allowed" sanity checks
  struct dentry: make ->d_u anonymous
  for_each_alias(): helper macro for iterating through dentries of given inode
Documentation/filesystems/porting.rst
fs/affs/amigaffs.c
fs/dcache.c
fs/exportfs/expfs.c
fs/inode.c
fs/nfs/dir.c
fs/overlayfs/dir.c
fs/smb/client/inode.c
include/linux/dcache.h