diff options
author | Trond Myklebust <trondmy@gmail.com> | 2020-01-06 15:39:37 -0500 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2020-01-15 10:54:33 -0500 |
commit | c74dfe97c104bda5144bfa8193d8e5ea67d5da7f (patch) | |
tree | 50a1d7f2e8791c3af949391359fb1279b1073244 /fs/nfs/proc.c | |
parent | 5c965db86e6b0e90a3112228820598e824920278 (diff) | |
download | linux-stable-c74dfe97c104bda5144bfa8193d8e5ea67d5da7f.tar.gz linux-stable-c74dfe97c104bda5144bfa8193d8e5ea67d5da7f.tar.bz2 linux-stable-c74dfe97c104bda5144bfa8193d8e5ea67d5da7f.zip |
NFS: Add mount option 'softreval'
Add a mount option 'softreval' that allows attribute revalidation 'getattr'
calls to time out, and causes them to fall back to using the cached
attributes.
The use case for this option is for ensuring that we can still (slowly)
traverse paths and use cached information even when the server is down.
Once the server comes back up again, the getattr calls start succeeding,
and the caches will revalidate as usual.
The 'softreval' mount option is automatically enabled if you have
specified 'softerr'. It can be turned off using the options
'nosoftreval', or 'hard'.
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs/nfs/proc.c')
-rw-r--r-- | fs/nfs/proc.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c index 44a15523bf40..0451a094e89e 100644 --- a/fs/nfs/proc.c +++ b/fs/nfs/proc.c @@ -108,10 +108,15 @@ nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, .rpc_resp = fattr, }; int status; + unsigned short task_flags = 0; + + /* Is this is an attribute revalidation, subject to softreval? */ + if (inode && (server->flags & NFS_MOUNT_SOFTREVAL)) + task_flags |= RPC_TASK_TIMEOUT; dprintk("NFS call getattr\n"); nfs_fattr_init(fattr); - status = rpc_call_sync(server->client, &msg, 0); + status = rpc_call_sync(server->client, &msg, task_flags); dprintk("NFS reply getattr: %d\n", status); return status; } |