]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ovl: stop using d_alloc_anon()/d_instantiate_anon()
authorAmir Goldstein <amir73il@gmail.com>
Sun, 12 Nov 2023 06:55:57 +0000 (08:55 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 18 Nov 2023 21:15:19 +0000 (16:15 -0500)
Commit f9c34674bc60 ("vfs: factor out helpers d_instantiate_anon() and
d_alloc_anon()") was introduced so overlayfs could initialize a non-dir
disconnected overlay dentry before overlay inode is attached to it.

Since commit ("0af950f57fef ovl: move ovl_entry into ovl_inode"), all
ovl_obtain_alias() can do is set DCACHE_OP_*REVALIDATE flags in ->d_flags
and OVL_E_UPPER_ALIAS flag in ->d_fsdata.

The DCACHE_OP_*REVALIDATE flags and OVL_E_UPPER_ALIAS flag are irrelevant
for a disconnected non-dir dentry, so it is better to use d_obtain_alias()
instead of open coding it.

Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/overlayfs/export.c

index 7e16bbcad95e631921b5fe5fe97d220dc10fa08a..9e316d5f936e9134258bd34fcae97554b15703b8 100644 (file)
@@ -289,7 +289,6 @@ static struct dentry *ovl_obtain_alias(struct super_block *sb,
 {
        struct dentry *lower = lowerpath ? lowerpath->dentry : NULL;
        struct dentry *upper = upper_alias ?: index;
-       struct dentry *dentry;
        struct inode *inode = NULL;
        struct ovl_entry *oe;
        struct ovl_inode_params oip = {
@@ -320,27 +319,7 @@ static struct dentry *ovl_obtain_alias(struct super_block *sb,
        if (upper)
                ovl_set_flag(OVL_UPPERDATA, inode);
 
-       dentry = d_find_any_alias(inode);
-       if (dentry)
-               goto out_iput;
-
-       dentry = d_alloc_anon(inode->i_sb);
-       if (unlikely(!dentry))
-               goto nomem;
-
-       if (upper_alias)
-               ovl_dentry_set_upper_alias(dentry);
-
-       ovl_dentry_init_reval(dentry, upper, OVL_I_E(inode));
-
-       return d_instantiate_anon(dentry, inode);
-
-nomem:
-       dput(dentry);
-       dentry = ERR_PTR(-ENOMEM);
-out_iput:
-       iput(inode);
-       return dentry;
+       return d_obtain_alias(inode);
 }
 
 /* Get the upper or lower dentry in stack whose on layer @idx */