Commit b35f5bd1 authored by Trond Myklebust's avatar Trond Myklebust Committed by Greg Kroah-Hartman

NFSv4.1: Fix the CREATE_SESSION slot number accounting

commit b519d408 upstream.

Ensure that we conform to the algorithm described in RFC5661, section
18.36.4 for when to bump the sequence id. In essence we do it for all
cases except when the RPC call timed out, or in case of the server returning
NFS4ERR_DELAY or NFS4ERR_STALE_CLIENTID.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f8421e38
...@@ -7509,12 +7509,20 @@ static int _nfs4_proc_create_session(struct nfs_client *clp, ...@@ -7509,12 +7509,20 @@ static int _nfs4_proc_create_session(struct nfs_client *clp,
status = rpc_call_sync(session->clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); status = rpc_call_sync(session->clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT);
trace_nfs4_create_session(clp, status); trace_nfs4_create_session(clp, status);
switch (status) {
case -NFS4ERR_STALE_CLIENTID:
case -NFS4ERR_DELAY:
case -ETIMEDOUT:
case -EACCES:
case -EAGAIN:
goto out;
};
clp->cl_seqid++;
if (!status) { if (!status) {
/* Verify the session's negotiated channel_attrs values */ /* Verify the session's negotiated channel_attrs values */
status = nfs4_verify_channel_attrs(&args, &res); status = nfs4_verify_channel_attrs(&args, &res);
/* Increment the clientid slot sequence id */ /* Increment the clientid slot sequence id */
if (clp->cl_seqid == res.seqid)
clp->cl_seqid++;
if (status) if (status)
goto out; goto out;
nfs4_update_session(session, &res); nfs4_update_session(session, &res);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment