
From: NeilBrown <neilb@cse.unsw.edu.au>

Save replays for LOCK operations, make sure errors are replayed correctly.


---

 25-akpm/fs/nfsd/nfs4proc.c |    3 ++-
 25-akpm/fs/nfsd/nfs4xdr.c  |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff -puN fs/nfsd/nfs4proc.c~knfsd-stateid-replay-fixes fs/nfsd/nfs4proc.c
--- 25/fs/nfsd/nfs4proc.c~knfsd-stateid-replay-fixes	Mon Feb 23 16:33:58 2004
+++ 25-akpm/fs/nfsd/nfs4proc.c	Mon Feb 23 16:33:58 2004
@@ -776,6 +776,7 @@ nfsd4_proc_compound(struct svc_rqst *rqs
 			break;
 		case OP_LOCK:
 			op->status = nfsd4_lock(rqstp, &current_fh, &op->u.lock);
+			op->replay = &op->u.lock.lk_stateowner->so_replay;
 			break;
 		case OP_LOCKT:
 			op->status = nfsd4_lockt(rqstp, &current_fh, &op->u.lockt);
@@ -864,7 +865,7 @@ nfsd4_proc_compound(struct svc_rqst *rqs
 encode_op:
 		if (op->status == NFSERR_REPLAY_ME) {
 			nfsd4_encode_replay(resp, op);
-			status = op->status = NFS_OK;
+			status = op->status = op->replay->rp_status;
 		} else {
 			nfsd4_encode_operation(resp, op);
 			status = op->status;
diff -puN fs/nfsd/nfs4xdr.c~knfsd-stateid-replay-fixes fs/nfsd/nfs4xdr.c
--- 25/fs/nfsd/nfs4xdr.c~knfsd-stateid-replay-fixes	Mon Feb 23 16:33:58 2004
+++ 25-akpm/fs/nfsd/nfs4xdr.c	Mon Feb 23 16:33:58 2004
@@ -2399,7 +2399,7 @@ nfsd4_encode_replay(struct nfsd4_compoun
 
 	RESERVE_SPACE(8);
 	WRITE32(op->opnum);
-	WRITE32(NFS_OK);
+	*p++ = rp->rp_status;  /* already xdr'ed */
 	ADJUST_ARGS();
 
 	RESERVE_SPACE(rp->rp_buflen);

_
