mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
bd75475c2f
commit
5f447cb881
1 changed files with 22 additions and 11 deletions
|
@ -154,14 +154,14 @@ nfs3_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
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 nfs_fh *fhandle, struct nfs_fattr *fattr,
|
||||||
struct nfs4_label *label)
|
unsigned short task_flags)
|
||||||
{
|
{
|
||||||
struct nfs3_diropargs arg = {
|
struct nfs3_diropargs arg = {
|
||||||
.fh = NFS_FH(dir),
|
.fh = NFS_FH(dir),
|
||||||
.name = dentry->d_name.name,
|
.name = name,
|
||||||
.len = dentry->d_name.len
|
.len = len
|
||||||
};
|
};
|
||||||
struct nfs3_diropres res = {
|
struct nfs3_diropres res = {
|
||||||
.fh = fhandle,
|
.fh = fhandle,
|
||||||
|
@ -173,17 +173,11 @@ nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||||
.rpc_resp = &res,
|
.rpc_resp = &res,
|
||||||
};
|
};
|
||||||
int status;
|
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();
|
res.dir_attr = nfs_alloc_fattr();
|
||||||
if (res.dir_attr == NULL)
|
if (res.dir_attr == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dprintk("NFS call lookup %pd2\n", dentry);
|
|
||||||
nfs_fattr_init(fattr);
|
nfs_fattr_init(fattr);
|
||||||
status = rpc_call_sync(NFS_CLIENT(dir), &msg, task_flags);
|
status = rpc_call_sync(NFS_CLIENT(dir), &msg, task_flags);
|
||||||
nfs_refresh_inode(dir, res.dir_attr);
|
nfs_refresh_inode(dir, res.dir_attr);
|
||||||
|
@ -198,6 +192,23 @@ nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||||
return status;
|
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)
|
static int nfs3_proc_access(struct inode *inode, struct nfs_access_entry *entry)
|
||||||
{
|
{
|
||||||
struct nfs3_accessargs arg = {
|
struct nfs3_accessargs arg = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue