]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
d_make_discardable(): warn if given a non-persistent dentry
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 27 Oct 2025 22:32:21 +0000 (18:32 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Nov 2025 04:59:27 +0000 (23:59 -0500)
commiteb028c33451af08bb34f45c6be6967ef1c98cbd1
treed9045e8e5304e020baeeb7ce2652723bc14a9108
parentca459ca70f60ce05445845eca74c788b0d5ddb1b
d_make_discardable(): warn if given a non-persistent dentry

At this point there are very few call chains that might lead to
d_make_discardable() on a dentry that hadn't been made persistent:
calls of simple_unlink() and simple_rmdir() in configfs and
apparmorfs.

Both filesystems do pin (part of) their contents in dcache, but
they are currently playing very unusual games with that.  Converting
them to more usual patterns might be possible, but it's definitely
going to be a long series of changes in both cases.

For now the easiest solution is to have both stop using simple_unlink()
and simple_rmdir() - that allows to make d_make_discardable() warn
when given a non-persistent dentry.

Rather than giving them full-blown private copies (with calls of
d_make_discardable() replaced with dput()), let's pull the parts of
simple_unlink() and simple_rmdir() that deal with timestamps and link
counts into separate helpers (__simple_unlink() and __simple_rmdir()
resp.) and have those used by configfs and apparmorfs.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/configfs/dir.c
fs/configfs/inode.c
fs/dcache.c
fs/libfs.c
include/linux/fs.h
security/apparmor/apparmorfs.c