On Mon, Jul 07, 2025 at 10:52:38PM +0200, Max Kellermann wrote: > On Mon, Jul 7, 2025 at 10:49 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > Yes, but where does that ceph_evict_inode() come from? What's in its call chain? > > Is it several shrink_dcache_parent() fighting each other on the same tree, or...? > > I described that already in my first email, but here you have a full > kernel call stack (in this example, the shrinker is invoked from a > user process due to memcg pressure): Umm... Note that further in that loop we'll be actively stealing the stuff from that shrink list that hasn't gotten to __dentry_kill(). Does your busy loop go into if (data.victim) after the second d_walk()? IOW, does it manage to pull anything out of that shrink list?