nfsd: nfs4_preprocess_seqid_op should only set *stpp on success
[linux-2.6-block.git] / fs / nfsd / nfs4state.c
index 29788fd0da24a1147c17917900156a5bd80a75eb..71c442fb9b3ee325788ba3b55696f1afeaa94a0d 100644 (file)
@@ -3953,6 +3953,7 @@ nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
 {
        __be32 status;
        struct nfs4_stid *s;
+       struct nfs4_ol_stateid *stp = NULL;
 
        dprintk("NFSD: %s: seqid=%d stateid = " STATEID_FMT "\n", __func__,
                seqid, STATEID_VAL(stateid));
@@ -3962,11 +3963,14 @@ nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
                                      cstate->minorversion, nn);
        if (status)
                return status;
-       *stpp = openlockstateid(s);
+       stp = openlockstateid(s);
        if (!nfsd4_has_session(cstate))
-               cstate->replay_owner = (*stpp)->st_stateowner;
+               cstate->replay_owner = stp->st_stateowner;
 
-       return nfs4_seqid_op_checks(cstate, stateid, seqid, *stpp);
+       status = nfs4_seqid_op_checks(cstate, stateid, seqid, stp);
+       if (!status)
+               *stpp = stp;
+       return status;
 }
 
 static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,