aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2021-04-04 22:05:39 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2021-04-18 01:44:11 +0000
commitdaf3f4596a553a3379c2feb0422924407f6f39df (patch)
tree2e4f71ec1c07136034aeb21bc777ba4177d581d9
parent51a07d6c94eb0e8b1b64b653bc6c37bf7ce64644 (diff)
downloadsrc-daf3f4596a553a3379c2feb0422924407f6f39df.tar.gz
src-daf3f4596a553a3379c2feb0422924407f6f39df.zip
nfsd: fix BindConnectionToSession so that it clears "cb path down"
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. It will do this for every RPC reply until it no longer sees the flag. Without that patch, this will happen until the client does an Open, which will clear LCL_CBDOWN. This patch clears LCL_CBDOWN right away, so that NFSV4SEQ_CBPATHDOWN will no longer be sent to the client in Sequence replies and the Linux client will not repeat the BindConnectionToSession RPCs. This is not critical for correct behaviour, but reduces RPC overheads for cases where the Open will not be done for a while. (cherry picked from commit 6f2addd838810ce33c7e9ad9543827d45e0b491c)
-rw-r--r--sys/fs/nfsserver/nfs_nfsdstate.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c
index 5ac37ed07cae..1cf0dcee99e9 100644
--- a/sys/fs/nfsserver/nfs_nfsdstate.c
+++ b/sys/fs/nfsserver/nfs_nfsdstate.c
@@ -6440,6 +6440,7 @@ nfsrv_bindconnsess(struct nfsrv_descript *nd, uint8_t *sessionid, int *foreaftp)
sep->sess_crflags |= NFSV4CRSESS_CONNBACKCHAN;
clp->lc_flags |= LCL_DONEBINDCONN |
LCL_NEEDSCBNULL;
+ clp->lc_flags &= ~LCL_CBDOWN;
if (*foreaftp == NFSCDFS4_BACK)
*foreaftp = NFSCDFS4_BACK;
else