/proc/sys: use d_splice_alias() calling conventions to simplify failure exits
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 11 Nov 2023 06:13:08 +0000 (01:13 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 21 Dec 2023 17:51:01 +0000 (12:51 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/proc/proc_sysctl.c

index 8064ea76f80b50dd66484e3d93ed2ee5fad23ddc..1ae6486dc7d401693a94ec56f6609ac5c5bc820c 100644 (file)
@@ -534,13 +534,8 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
                        goto out;
        }
 
-       inode = proc_sys_make_inode(dir->i_sb, h ? h : head, p);
-       if (IS_ERR(inode)) {
-               err = ERR_CAST(inode);
-               goto out;
-       }
-
        d_set_d_op(dentry, &proc_sys_dentry_operations);
+       inode = proc_sys_make_inode(dir->i_sb, h ? h : head, p);
        err = d_splice_alias(inode, dentry);
 
 out:
@@ -698,13 +693,8 @@ static bool proc_sys_fill_cache(struct file *file,
                        return false;
                if (d_in_lookup(child)) {
                        struct dentry *res;
-                       inode = proc_sys_make_inode(dir->d_sb, head, table);
-                       if (IS_ERR(inode)) {
-                               d_lookup_done(child);
-                               dput(child);
-                               return false;
-                       }
                        d_set_d_op(child, &proc_sys_dentry_operations);
+                       inode = proc_sys_make_inode(dir->d_sb, head, table);
                        res = d_splice_alias(inode, child);
                        d_lookup_done(child);
                        if (unlikely(res)) {