mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user