]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: make file_dentry() a simple accessor
authorAmir Goldstein <amir73il@gmail.com>
Fri, 2 Feb 2024 11:01:31 +0000 (13:01 +0200)
committerChristian Brauner <brauner@kernel.org>
Tue, 6 Feb 2024 15:54:45 +0000 (16:54 +0100)
file_dentry() is a relic from the days that overlayfs was using files with
a "fake" path, meaning, f_path on overlayfs and f_inode on underlying fs.

In those days, file_dentry() was needed to get the underlying fs dentry
that matches f_inode.

Files with "fake" path should not exist nowadays, so make file_dentry() a
simple accessor and use an assertion to make sure that file_dentry() was
not papering over filesystem bugs.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Link: https://lore.kernel.org/r/20240202110132.1584111-2-amir73il@gmail.com
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
include/linux/fs.h

index 9efd6220b7c64b583ff8ef1663ab12db528701e8..2e07cbbf92e3d6022fa55d00d1d10c82572f0fef 100644 (file)
@@ -1084,9 +1084,20 @@ static inline struct inode *file_inode(const struct file *f)
        return f->f_inode;
 }
 
+/*
+ * file_dentry() is a relic from the days that overlayfs was using files with a
+ * "fake" path, meaning, f_path on overlayfs and f_inode on underlying fs.
+ * In those days, file_dentry() was needed to get the underlying fs dentry that
+ * matches f_inode.
+ * Files with "fake" path should not exist nowadays, so use an assertion to make
+ * sure that file_dentry() was not papering over filesystem bugs.
+ */
 static inline struct dentry *file_dentry(const struct file *file)
 {
-       return d_real(file->f_path.dentry, file_inode(file));
+       struct dentry *dentry = file->f_path.dentry;
+
+       WARN_ON_ONCE(d_inode(dentry) != file_inode(file));
+       return dentry;
 }
 
 struct fasync_struct {