diff options
| author | Rick Macklem <rmacklem@FreeBSD.org> | 2022-05-02 19:45:42 +0000 |
|---|---|---|
| committer | Rick Macklem <rmacklem@FreeBSD.org> | 2022-05-16 19:26:18 +0000 |
| commit | 81091a7ca11acd5adcc673ffd06f8e08791386ea (patch) | |
| tree | 24666207f2908f1729cbf9273445e1cddcd4c5e2 | |
| parent | db387b30acbe9c0f19e8396dc712f668ab0709b7 (diff) | |
nfsd: Fix session slot freeing for NFSv4.1/4.2
Without this patch the NFSv4.1/4.2 server erroneously
always frees session slot zero for callbacks. This only
affects 4.1/4.2 mounts if the server has delegations
enabled or is a pNFS configuration. Even for those
cases, the effect is mainly to only use slot 0 for
callbacks, serializing all of them. There is a slight
chance that callbacks will fail if the client performs
them in a different order than received on the TCP
connection.
If this bug affects your server, you will see console
messages like:
newnfs_request: Bad session slot
This patch fixes the problem. Found during a recent
IETF NFSv4 testing event.
PR: 263728
(cherry picked from commit 271f6d52a606e86c11b366082f11fe69350f24da)
| -rw-r--r-- | sys/fs/nfsserver/nfs_nfsdstate.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c index d9fa64e5c416..1ca275c670fc 100644 --- a/sys/fs/nfsserver/nfs_nfsdstate.c +++ b/sys/fs/nfsserver/nfs_nfsdstate.c @@ -6621,6 +6621,8 @@ nfsv4_setcbsequence(struct nfsrv_descript *nd, struct nfsclient *clp, bcopy(sessionid, tl, NFSX_V4SESSIONID); tl += NFSX_V4SESSIONID / NFSX_UNSIGNED; nd->nd_slotseq = tl; + nd->nd_slotid = *slotposp; + nd->nd_flag |= ND_HASSLOTID; *tl++ = txdr_unsigned(slotseq); *tl++ = txdr_unsigned(*slotposp); *tl++ = txdr_unsigned(maxslot); |
