]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
convert rpc_pipefs
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 26 Feb 2024 07:26:46 +0000 (02:26 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Nov 2025 04:59:27 +0000 (23:59 -0500)
Just use d_make_persistent() + dput() (and fold the latter into
simple_finish_creating()) and that's it...

NOTE: pipe->dentry is a borrowed reference - it does not contribute
to dentry refcount.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
net/sunrpc/rpc_pipe.c

index 0bd1df2ebb479e4a8fe51356f3c846e2aafa5185..379daefc484714bb8830552ac47536fa9ac3838e 100644 (file)
@@ -536,17 +536,16 @@ static int rpc_new_file(struct dentry *parent,
 
        inode = rpc_get_inode(dir->i_sb, S_IFREG | mode);
        if (unlikely(!inode)) {
-               dput(dentry);
-               inode_unlock(dir);
+               simple_done_creating(dentry);
                return -ENOMEM;
        }
        inode->i_ino = iunique(dir->i_sb, 100);
        if (i_fop)
                inode->i_fop = i_fop;
        rpc_inode_setowner(inode, private);
-       d_instantiate(dentry, inode);
+       d_make_persistent(dentry, inode);
        fsnotify_create(dir, dentry);
-       inode_unlock(dir);
+       simple_done_creating(dentry);
        return 0;
 }
 
@@ -563,18 +562,17 @@ static struct dentry *rpc_new_dir(struct dentry *parent,
 
        inode = rpc_get_inode(dir->i_sb, S_IFDIR | mode);
        if (unlikely(!inode)) {
-               dput(dentry);
-               inode_unlock(dir);
+               simple_done_creating(dentry);
                return ERR_PTR(-ENOMEM);
        }
 
        inode->i_ino = iunique(dir->i_sb, 100);
        inc_nlink(dir);
-       d_instantiate(dentry, inode);
+       d_make_persistent(dentry, inode);
        fsnotify_mkdir(dir, dentry);
-       inode_unlock(dir);
+       simple_done_creating(dentry);
 
-       return dentry;
+       return dentry; // borrowed
 }
 
 static int rpc_populate(struct dentry *parent,
@@ -657,8 +655,7 @@ int rpc_mkpipe_dentry(struct dentry *parent, const char *name,
 
        inode = rpc_get_inode(dir->i_sb, umode);
        if (unlikely(!inode)) {
-               dput(dentry);
-               inode_unlock(dir);
+               simple_done_creating(dentry);
                err = -ENOMEM;
                goto failed;
        }
@@ -668,10 +665,10 @@ int rpc_mkpipe_dentry(struct dentry *parent, const char *name,
        rpci->private = private;
        rpci->pipe = pipe;
        rpc_inode_setowner(inode, private);
-       d_instantiate(dentry, inode);
-       pipe->dentry = dentry;
+       pipe->dentry = dentry; // borrowed
+       d_make_persistent(dentry, inode);
        fsnotify_create(dir, dentry);
-       inode_unlock(dir);
+       simple_done_creating(dentry);
        return 0;
 
 failed:
@@ -1206,7 +1203,7 @@ static void rpc_kill_sb(struct super_block *sb)
                                           sb);
        mutex_unlock(&sn->pipefs_sb_lock);
 out:
-       kill_litter_super(sb);
+       kill_anon_super(sb);
        put_net(net);
 }