From: Robert Milkowski <rmilkowski@xxxxxxxxx> 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@xxxxxxxxx> --- 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