On Mon, 2019-12-16 at 17:38 +0000, Robert Milkowski wrote: > 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); NACK. The above argument only applies to legacy minor version 0 setups, and does not apply to NFSv4.1 or newer. -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx