]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
nfsd: make the server repeat CB_RECALL every couple of seconds
authorRick Macklem <rmacklem@FreeBSD.org>
Mon, 5 Apr 2021 01:15:54 +0000 (18:15 -0700)
committerRick Macklem <rmacklem@FreeBSD.org>
Mon, 5 Apr 2021 01:15:54 +0000 (18:15 -0700)
commit7a606f280a3e174dcdd12736b7b976903809eb9c
tree2616982aaeff4af90d1649b61c42c6c691efcca6
parentea444392bb5b351c930f28a02a4e68f51b25ba69
nfsd: make the server repeat CB_RECALL every couple of seconds

Commit 01ae8969a9ee stopped the NFSv4.1/4.2 server from implicitly
binding the back channel to a new TCP connection so that it
conforms to RFC5661, for NFSv4.1/4.2. An effect of this
for the Linux NFS client is that it will do a
BindConnectionToSession when it sees NFSV4SEQ_CBPATHDOWN
set in a sequence reply. This will fix the back channel, but the
first attempt at a callback like CB_RECALL will already have
failed. Without this patch, a CB_RECALL will not be retried
and that can result in a 5 minute delay until the delegation
times out.

This patch modifies the code so that it will retry the
CB_RECALL every couple of seconds, often avoiding the
5 minute delay.

This is not critical for correct behaviour, but avoids
the 5 minute delay for the case where the Linux client
re-binds the back channel via BindConnectionToSession.

MFC after: 2 weeks
sys/fs/nfs/nfsrvstate.h
sys/fs/nfsserver/nfs_nfsdstate.c