NFS: Add softreval behaviour to nfs_lookup_revalidate()
If the server is unavaliable, we want to allow the revalidating lookup to time out, and to default to validating the cached dentry if the 'softreval' mount option is set. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:

committed by
Anna Schumaker

parent
fe1e8dbec1
commit
f7b37b8b13
@@ -152,14 +152,14 @@ nfs_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
|
||||
}
|
||||
|
||||
static int
|
||||
nfs_proc_lookup(struct inode *dir, const struct qstr *name,
|
||||
nfs_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr,
|
||||
struct nfs4_label *label)
|
||||
{
|
||||
struct nfs_diropargs arg = {
|
||||
.fh = NFS_FH(dir),
|
||||
.name = name->name,
|
||||
.len = name->len
|
||||
.name = dentry->d_name.name,
|
||||
.len = dentry->d_name.len
|
||||
};
|
||||
struct nfs_diropok res = {
|
||||
.fh = fhandle,
|
||||
@@ -171,10 +171,15 @@ nfs_proc_lookup(struct inode *dir, const struct qstr *name,
|
||||
.rpc_resp = &res,
|
||||
};
|
||||
int status;
|
||||
unsigned short task_flags = 0;
|
||||
|
||||
dprintk("NFS call lookup %s\n", name->name);
|
||||
/* 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);
|
||||
nfs_fattr_init(fattr);
|
||||
status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
|
||||
status = rpc_call_sync(NFS_CLIENT(dir), &msg, task_flags);
|
||||
dprintk("NFS reply lookup: %d\n", status);
|
||||
return status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user