Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03a1256f authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Add a field to track the number of kernel users of an rpc_pipe



This allows us to correctly deduce when we need to remove the pipe.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 62e1761c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ struct rpc_inode {
	int pipelen;
	int nreaders;
	int nwriters;
	int nkern_readwriters;
	wait_queue_head_t waitq;
#define RPC_PIPE_WAIT_FOR_OPEN	1
	int flags;
+8 −4
Original line number Diff line number Diff line
@@ -737,6 +737,7 @@ rpc_mkpipe(struct dentry *parent, const char *name, void *private, struct rpc_pi
			dput (dentry);
			dentry = ERR_PTR(-EBUSY);
		}
		rpci->nkern_readwriters++;
		goto out;
	}
	inode = rpc_get_inode(dir->i_sb, S_IFIFO | S_IRUSR | S_IWUSR);
@@ -749,6 +750,7 @@ rpc_mkpipe(struct dentry *parent, const char *name, void *private, struct rpc_pi
	rpci->private = private;
	rpci->flags = flags;
	rpci->ops = ops;
	rpci->nkern_readwriters = 1;
	inode_dir_notify(dir, DN_CREATE);
	dget(dentry);
out:
@@ -773,10 +775,12 @@ rpc_unlink(struct dentry *dentry)
	parent = dget_parent(dentry);
	dir = parent->d_inode;
	mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
	if (--RPC_I(dentry->d_inode)->nkern_readwriters == 0) {
		rpc_close_pipes(dentry->d_inode);
		error = simple_unlink(dir, dentry);
		if (!error)
			d_delete(dentry);
	}
	dput(dentry);
	mutex_unlock(&dir->i_mutex);
	dput(parent);