Skip to content

Commit

Permalink
NFSv4.1: Fix the CREATE_SESSION slot number accounting
Browse files Browse the repository at this point in the history
commit b519d40 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: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
trondmypd authored and gregkh committed Sep 24, 2016
1 parent f8421e3 commit b35f5bd
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions fs/nfs/nfs4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
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) {
/* Verify the session's negotiated channel_attrs values */
status = nfs4_verify_channel_attrs(&args, &res);
/* Increment the clientid slot sequence id */
if (clp->cl_seqid == res.seqid)
clp->cl_seqid++;
if (status)
goto out;
nfs4_update_session(session, &res);
Expand Down

0 comments on commit b35f5bd

Please sign in to comment.