Commit 5f447cb8 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv3: Refactor nfs3_proc_lookup() to split out the dentry



We want to reuse the lookup code in NFSv3 in order to emulate the
NFSv4 lookupp operation.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent bd75475c
Loading
Loading
Loading
Loading
+22 −11
Original line number Diff line number Diff line
@@ -154,14 +154,14 @@ nfs3_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
}

static int
nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
__nfs3_proc_lookup(struct inode *dir, const char *name, size_t len,
		   struct nfs_fh *fhandle, struct nfs_fattr *fattr,
		 struct nfs4_label *label)
		   unsigned short task_flags)
{
	struct nfs3_diropargs	arg = {
		.fh		= NFS_FH(dir),
		.name		= dentry->d_name.name,
		.len		= dentry->d_name.len
		.name		= name,
		.len		= len
	};
	struct nfs3_diropres	res = {
		.fh		= fhandle,
@@ -173,17 +173,11 @@ nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
		.rpc_resp	= &res,
	};
	int			status;
	unsigned short task_flags = 0;

	/* Is this is an attribute revalidation, subject to softreval? */
	if (nfs_lookup_is_soft_revalidate(dentry))
		task_flags |= RPC_TASK_TIMEOUT;

	res.dir_attr = nfs_alloc_fattr();
	if (res.dir_attr == NULL)
		return -ENOMEM;

	dprintk("NFS call  lookup %pd2\n", dentry);
	nfs_fattr_init(fattr);
	status = rpc_call_sync(NFS_CLIENT(dir), &msg, task_flags);
	nfs_refresh_inode(dir, res.dir_attr);
@@ -198,6 +192,23 @@ nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
	return status;
}

static int
nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
		 struct nfs_fh *fhandle, struct nfs_fattr *fattr,
		 struct nfs4_label *label)
{
	unsigned short task_flags = 0;

	/* Is this is an attribute revalidation, subject to softreval? */
	if (nfs_lookup_is_soft_revalidate(dentry))
		task_flags |= RPC_TASK_TIMEOUT;

	dprintk("NFS call  lookup %pd2\n", dentry);
	return __nfs3_proc_lookup(dir, dentry->d_name.name,
				  dentry->d_name.len, fhandle, fattr,
				  task_flags);
}

static int nfs3_proc_access(struct inode *inode, struct nfs_access_entry *entry)
{
	struct nfs3_accessargs	arg = {