fast_dput(): having ->d_delete() is not reason to delay refcount decrement
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 30 Oct 2023 04:02:14 +0000 (00:02 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 25 Nov 2023 07:33:42 +0000 (02:33 -0500)
commit15220fbf187100e1cc1ad553b7d21633bdc27e76
tree32413f7b3641d3eaea6f52ceb5f6056b34d60e76
parentcd9f84f35c2eaaf4da7e111021b604662326d8aa
fast_dput(): having ->d_delete() is not reason to delay refcount decrement

->d_delete() is a way for filesystem to tell that dentry is not worth
keeping cached.  It is not guaranteed to be called every time a dentry
has refcount drop down to zero; it is not guaranteed to be called before
dentry gets evicted.  In other words, it is not suitable for any kind
of keeping track of dentry state.

None of the in-tree filesystems attempt to use it that way, fortunately.

So the contortions done by fast_dput() (as well as dentry_kill()) are
not warranted.  fast_dput() certainly should treat having ->d_delete()
instance as "can't assume we'll be keeping it", but that's not different
from the way we treat e.g. DCACHE_DONTCACHE (which is rather similar
to making ->d_delete() returns true when called).

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c