| From 909e58755d9f0b86d8c80f546988467858e78c65 Mon Sep 17 00:00:00 2001 |
| From: Robert Milkowski <rmilkowski@gmail.com> |
| Date: Tue, 28 Jan 2020 08:37:47 +0000 |
| Subject: [PATCH] NFSv4: try lease recovery on NFS4ERR_EXPIRED |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c |
| index 296b214c0b58..11c0100d09e0 100644 |
| --- a/fs/nfs/nfs4proc.c |
| +++ b/fs/nfs/nfs4proc.c |
| @@ -3153,6 +3153,11 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir, |
| 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; |
| -- |
| 2.7.4 |
| |