| From 924491f2e476f7234d722b24171a4daff61bbe13 Mon Sep 17 00:00:00 2001 |
| From: Robert Milkowski <rmilkowski@gmail.com> |
| Date: Tue, 28 Jan 2020 08:37:47 +0000 |
| Subject: NFSv4: try lease recovery on NFS4ERR_EXPIRED |
| |
| From: Robert Milkowski <rmilkowski@gmail.com> |
| |
| commit 924491f2e476f7234d722b24171a4daff61bbe13 upstream. |
| |
| Currently, if an nfs server returns NFS4ERR_EXPIRED to open(), |
| we return EIO to applications without even trying to recover. |
| |
| Fixes: 272289a3df72 ("NFSv4: nfs4_do_handle_exception() handle revoke/expiry of a single stateid") |
| Signed-off-by: Robert Milkowski <rmilkowski@gmail.com> |
| Reviewed-by: Trond Myklebust <trond.myklebust@hammerspace.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/nfs4proc.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/fs/nfs/nfs4proc.c |
| +++ b/fs/nfs/nfs4proc.c |
| @@ -3187,6 +3187,11 @@ static struct nfs4_state *nfs4_do_open(s |
| exception.retry = 1; |
| continue; |
| } |
| + if (status == -NFS4ERR_EXPIRED) { |
| + nfs4_schedule_lease_recovery(server->nfs_client); |
| + exception.retry = 1; |
| + continue; |
| + } |
| if (status == -EAGAIN) { |
| /* We must have found a delegation */ |
| exception.retry = 1; |