]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
switch procfs from d_set_d_op() to d_splice_alias_ops()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 24 Feb 2025 18:08:52 +0000 (13:08 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 11 Jun 2025 02:13:52 +0000 (22:13 -0400)
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/proc/base.c
fs/proc/generic.c
fs/proc/internal.h
fs/proc/namespaces.c
fs/proc/proc_sysctl.c

index c667702dc69b8ca2531e88e12ed7a18533f294dd..e93149a013413c1ff2336191d40d4c16e73e2adb 100644 (file)
@@ -2704,8 +2704,7 @@ static struct dentry *proc_pident_instantiate(struct dentry *dentry,
                inode->i_fop = p->fop;
        ei->op = p->op;
        pid_update_inode(task, inode);
-       d_set_d_op(dentry, &pid_dentry_operations);
-       return d_splice_alias(inode, dentry);
+       return d_splice_alias_ops(inode, dentry, &pid_dentry_operations);
 }
 
 static struct dentry *proc_pident_lookup(struct inode *dir, 
@@ -3501,8 +3500,7 @@ static struct dentry *proc_pid_instantiate(struct dentry * dentry,
        set_nlink(inode, nlink_tgid);
        pid_update_inode(task, inode);
 
-       d_set_d_op(dentry, &pid_dentry_operations);
-       return d_splice_alias(inode, dentry);
+       return d_splice_alias_ops(inode, dentry, &pid_dentry_operations);
 }
 
 struct dentry *proc_pid_lookup(struct dentry *dentry, unsigned int flags)
@@ -3804,8 +3802,7 @@ static struct dentry *proc_task_instantiate(struct dentry *dentry,
        set_nlink(inode, nlink_tid);
        pid_update_inode(task, inode);
 
-       d_set_d_op(dentry, &pid_dentry_operations);
-       return d_splice_alias(inode, dentry);
+       return d_splice_alias_ops(inode, dentry, &pid_dentry_operations);
 }
 
 static struct dentry *proc_task_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags)
index 38ce45ce0eb624ad7a5d8d592ae5af0713ee5e5e..5635453cd4769c8d906735c0ecab98fa1fd5ebfc 100644 (file)
@@ -255,10 +255,10 @@ struct dentry *proc_lookup_de(struct inode *dir, struct dentry *dentry,
                if (!inode)
                        return ERR_PTR(-ENOMEM);
                if (de->flags & PROC_ENTRY_FORCE_LOOKUP)
-                       d_set_d_op(dentry, &proc_net_dentry_ops);
-               else
-                       d_set_d_op(dentry, &proc_misc_dentry_ops);
-               return d_splice_alias(inode, dentry);
+                       return d_splice_alias_ops(inode, dentry,
+                                                 &proc_net_dentry_ops);
+               return d_splice_alias_ops(inode, dentry,
+                                         &proc_misc_dentry_ops);
        }
        read_unlock(&proc_subdir_lock);
        return ERR_PTR(-ENOENT);
index a4054916f6dae7d1605faffbe348dd51f20c4142..520c4742101dd2cc2837f53dc06400fd1dfb8bd9 100644 (file)
@@ -413,7 +413,6 @@ static inline void pde_force_lookup(struct proc_dir_entry *pde)
 static inline struct dentry *proc_splice_unmountable(struct inode *inode,
                struct dentry *dentry, const struct dentry_operations *d_ops)
 {
-       d_set_d_op(dentry, d_ops);
        dont_mount(dentry);
-       return d_splice_alias(inode, dentry);
+       return d_splice_alias_ops(inode, dentry, d_ops);
 }
index c610224faf109daff698004c4146d5e4e3db7399..4403a2e20c165d98a10c7632c68744066acc6128 100644 (file)
@@ -111,8 +111,7 @@ static struct dentry *proc_ns_instantiate(struct dentry *dentry,
        ei->ns_ops = ns_ops;
        pid_update_inode(task, inode);
 
-       d_set_d_op(dentry, &pid_dentry_operations);
-       return d_splice_alias(inode, dentry);
+       return d_splice_alias_ops(inode, dentry, &pid_dentry_operations);
 }
 
 static int proc_ns_dir_readdir(struct file *file, struct dir_context *ctx)
index cc9d74a06ff03c14413091579f62f8f4cdec0f62..7a8bffc03dc8f48ce000ee472f1232e5c8f59d1c 100644 (file)
@@ -540,9 +540,8 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
                        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);
+       err = d_splice_alias_ops(inode, dentry, &proc_sys_dentry_operations);
 
 out:
        if (h)
@@ -699,9 +698,9 @@ static bool proc_sys_fill_cache(struct file *file,
                        return false;
                if (d_in_lookup(child)) {
                        struct dentry *res;
-                       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);
+                       res = d_splice_alias_ops(inode, child,
+                                                &proc_sys_dentry_operations);
                        d_lookup_done(child);
                        if (unlikely(res)) {
                                dput(child);