Messages in this thread Patch in this message |  | | From | "Robert Milkowski" <> | Subject | [PATCH] NFSv4: nfs4_do_fsinfo() should not do implicit lease renewals | Date | Mon, 16 Dec 2019 17:38:03 -0000 |
| |
From: Robert Milkowski <rmilkowski@gmail.com>
Currently, each time nfs4_do_fsinfo() is called it will do an implicit NFS4 lease renewal, which is not compliant with the NFS4 specification. This can result in a lease being expired by NFS server which will then return NFS4ERR_EXPIRED or NFS4ERR_STALE_CLIENTID.
Signed-off-by: Robert Milkowski <rmilkowski@gmail.com> --- fs/nfs/nfs4proc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 76d3716..aad65dd 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -5019,16 +5019,19 @@ static int nfs4_do_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle, str struct nfs4_exception exception = { .interruptible = true, }; - unsigned long now = jiffies; + unsigned long last_renewal = jiffies; int err; do { err = _nfs4_do_fsinfo(server, fhandle, fsinfo); trace_nfs4_fsinfo(server, fhandle, fsinfo->fattr, err); if (err == 0) { + /* no implicit lease renewal allowed here */ + if (server->nfs_client->cl_last_renewal != 0) + last_renewal = server->nfs_client->cl_last_renewal; nfs4_set_lease_period(server->nfs_client, fsinfo->lease_time * HZ, - now); + last_renewal); break; } err = nfs4_handle_exception(server, err, &exception); -- 1.8.3.1
|  |