Commit 946e2256 authored by Al Viro's avatar Al Viro
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 2a3d4047
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -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);
}