if (sop) {
                open->op_stateowner = sop;
                /* check for replay */
-               if (open->op_seqid == sop->so_seqid){
+               if (open->op_seqid == sop->so_seqid - 1){
                        if (sop->so_replay.rp_buflen)
                                return NFSERR_REPLAY_ME;
                        else {
                                goto renew;
                        }
                } else if (sop->so_confirmed) {
-                       if (open->op_seqid == sop->so_seqid + 1)
+                       if (open->op_seqid == sop->so_seqid)
                                goto renew;
                        status = nfserr_bad_seqid;
                        goto out;
 }
 
 
-/* decrement seqid on successful reclaim, it will be bumped in encode_open */
 static void
 nfs4_set_claim_prev(struct nfsd4_open *open)
 {
        open->op_stateowner->so_confirmed = 1;
        open->op_stateowner->so_client->cl_firststate = 1;
-       open->op_stateowner->so_seqid--;
 }
 
 /*
        *  For the moment, we ignore the possibility of 
        *  generation number wraparound.
        */
-       if (seqid != sop->so_seqid + 1)
+       if (seqid != sop->so_seqid)
                goto check_replay;
 
        if (sop->so_confirmed) {
        *sopp = sop;
 
 check_replay:
-       if (seqid == sop->so_seqid) {
+       if (seqid == sop->so_seqid - 1) {
                printk("NFSD: preprocess_seqid_op: retransmission?\n");
                /* indicate replay to calling function */
                status = NFSERR_REPLAY_ME;
        } else  {
-               printk("NFSD: preprocess_seqid_op: bad seqid (expected %d, got %d\n", sop->so_seqid +1, seqid);
+               printk("NFSD: preprocess_seqid_op: bad seqid (expected %d, got %d\n", sop->so_seqid, seqid);
 
                *sopp = NULL;
                status = nfserr_bad_seqid;
  * occured. 
  *
  * strhashval = lock_ownerstr_hashval 
- * so_seqid = lock->lk_new_lock_seqid - 1: it gets bumped in encode 
  */
 
 static struct nfs4_stateowner *
        sop->so_is_open_owner = 0;
        sop->so_id = current_ownerid++;
        sop->so_client = clp;
-       sop->so_seqid = lock->lk_new_lock_seqid - 1;
+       sop->so_seqid = lock->lk_new_lock_seqid;
        sop->so_confirmed = 1;
        rp = &sop->so_replay;
        rp->rp_status = NFSERR_SERVERFAULT;
 
 
 #define ENCODE_SEQID_OP_TAIL(stateowner) do {                  \
        if (seqid_mutating_err(nfserr) && stateowner) {         \
-               if (stateowner->so_confirmed)                   \
-                       stateowner->so_seqid++;                 \
+               stateowner->so_seqid++;                         \
                stateowner->so_replay.rp_status = nfserr;       \
                stateowner->so_replay.rp_buflen =               \
                          (((char *)(resp)->p - (char *)save)); \