nfscl: Fix CreateSession for an established ClientID

Commit 981ef32230 added optional use of the session
slots marked bad to recover a new session when all
slots are marked bad.  The recovery worked against
a FreeBSD NFSv4.1/4.2 server, but not a Linux one.
It turns out that it was a bug in the FreeBSD client
and not the Linux server.

This patch fixes the client so that DeleteSession
followed by CreateSession after receiving a
NFSERR_BADSESSION error reply works against the
Linux server (and conforms to the RFC).

This also implies that the FreeBSD NFSv4.1/4.2
server needs to be fixed in a future commit.
Without the fix, the FreeBSD server does a full
recovery, including creation of a new ClientID,
but since "intr" mounts were broken, this does
not result in a regression.

This patch only affects the case where a CreateSession
is done for an already confirmed ClientID, which was
not being done prior to commit 981ef32230.

PR: 260011
MFC after:	2 weeks
This commit is contained in:
Rick Macklem 2022-07-11 16:50:34 -07:00
parent 2adb30740b
commit d4a11b3e3b

View File

@ -984,7 +984,7 @@ nfsrpc_setclient(struct nfsmount *nmp, struct nfsclclient *clp, int reclaim,
dsp->nfsclds_sess.nfsess_clientid =
odsp->nfsclds_sess.nfsess_clientid;
dsp->nfsclds_sess.nfsess_sequenceid =
odsp->nfsclds_sess.nfsess_sequenceid;
odsp->nfsclds_sess.nfsess_sequenceid + 1;
dsp->nfsclds_flags = odsp->nfsclds_flags;
if (dsp->nfsclds_servownlen > 0)
memcpy(dsp->nfsclds_serverown,