From: NeilBrown 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, ¤t_fh, &op->u.lock); + op->replay = &op->u.lock.lk_stateowner->so_replay; break; case OP_LOCKT: op->status = nfsd4_lockt(rqstp, ¤t_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); _