diff options
| author | Kinglong Mee <kinglongmee@gmail.com> | 2015-06-02 06:59:01 -0400 |
|---|---|---|
| committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-06-11 21:09:06 -0400 |
| commit | 0579c8d2084adf932f09fe7edb5ee9328795d89f (patch) | |
| tree | e9256b3aed887465d086393d620f5e150fc8847f /fs | |
| parent | e937ee714b2df638275a61a99e0d033682f764d2 (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.c | 14 |
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 |
