aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorKinglong Mee <kinglongmee@gmail.com>2015-06-02 06:59:01 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2015-06-11 21:09:06 -0400
commit0579c8d2084adf932f09fe7edb5ee9328795d89f (patch)
treee9256b3aed887465d086393d620f5e150fc8847f /fs
parente937ee714b2df638275a61a99e0d033682f764d2 (diff)
nfs: Initialize cb_sequenceres information before validate_seqid()
For a cb_layoutrecall replay, nfsd got CB_SEQUENCE status of zero, but all informations of cb_sequenceres are zero too !!! validate_seqid() return NFS4ERR_RETRY_UNCACHED_REP for a replay, and skip the initlize cb_sequenceres. Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/callback_proc.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
index 7e9653aae5d8..17a5c571a006 100644
--- a/fs/nfs/callback_proc.c
+++ b/fs/nfs/callback_proc.c
@@ -445,6 +445,13 @@ __be32 nfs4_callback_sequence(struct cb_sequenceargs *args,
445 goto out; 445 goto out;
446 } 446 }
447 447
448 memcpy(&res->csr_sessionid, &args->csa_sessionid,
449 sizeof(res->csr_sessionid));
450 res->csr_sequenceid = args->csa_sequenceid;
451 res->csr_slotid = args->csa_slotid;
452 res->csr_highestslotid = NFS41_BC_MAX_CALLBACKS - 1;
453 res->csr_target_highestslotid = NFS41_BC_MAX_CALLBACKS - 1;
454
448 status = validate_seqid(tbl, args); 455 status = validate_seqid(tbl, args);
449 spin_unlock(&tbl->slot_tbl_lock); 456 spin_unlock(&tbl->slot_tbl_lock);
450 if (status) 457 if (status)
@@ -462,13 +469,6 @@ __be32 nfs4_callback_sequence(struct cb_sequenceargs *args,
462 goto out; 469 goto out;
463 } 470 }
464 471
465 memcpy(&res->csr_sessionid, &args->csa_sessionid,
466 sizeof(res->csr_sessionid));
467 res->csr_sequenceid = args->csa_sequenceid;
468 res->csr_slotid = args->csa_slotid;
469 res->csr_highestslotid = NFS41_BC_MAX_CALLBACKS - 1;
470 res->csr_target_highestslotid = NFS41_BC_MAX_CALLBACKS - 1;
471
472 /* 472 /*
473 * RFC5661 20.9.3 473 * RFC5661 20.9.3
474 * If CB_SEQUENCE returns an error, then the state of the slot 474 * If CB_SEQUENCE returns an error, then the state of the slot