convert rpc_pipefs

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>
This commit is contained in:
Al Viro
2024-02-26 02:26:46 -05:00
parent 2a3d40476b
commit 946e225677

View 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);
}