[PATCH v4 0/5] Fix easy bits of the negative dentry problem
From: NeilBrown
Date: Sun Oct 18 2026 - 20:08:40 EST
For this v4 I decided to focus on just fsnotify, as that is where I've
received the most useful review, and that is where problem reports seem
to focus.
Other places that walk the ->d_children list (and don't already use
cond_resched()) are specific to just one file-system-type. fsnotify can
affect (almost) any file-system. So it is reasonable that it gets priority.
So here we just fix the refcount overflow, and the ->d_children walk for
fsnotify.
If/when this lands, I can suggest patches to various file-system maintainers.
Thanks,
NeilBrown
Original intro - revised:
I was reading about the negative dentry problem in
https://lwn.net/Articles/1079407/ and thought I would have a go at the
easy bits. Given how involved some of that was I'm glad I didn't try
the tricky bits!
So I didn't try to reduce the number of negative dentries or handle
them differently to positive dentries. I just tried to address
specific symptoms.
This series addresses two reported symptoms.
1/ refcounts on parents can potentially overflow if there are billions
of (negative) children. This was the easiest easy bit. The first
patch is all that is needed.
2/ Walking the ->d_children list can take arbitrarily long and can
trigger soft lockups. I haven't addresses the "arbitrarily long"
part, but the "soft lockups" is relatively easy.
With this in place I would feel more confident addressing
the "arbitrarily long" part if that seemed worth while.
The core idea is to use a common helper for all walking of
->d_children, and teach it to drop the lock and schedule when needed,
inserting a cursor to keep its place. This simple idea requires that
nothing should be holding any other lock while walking ->d_children
[PATCH v4 1/5] VFS: don't count references through ->d_parent
[PATCH v4 2/5] fsnotify: update children flags only when adding mask
[PATCH v4 3/5] fsnotify: don't hold i_lock while walking d_children
[PATCH v4 4/5] Add d_for_each_positive_child family of iterators
[PATCH v4 5/5] Use d_for_each_positive_child() in fsnotify.