nfsd: Migrate the stateid reference into nfs4_preprocess_seqid_op
authorTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 30 Jul 2014 01:34:23 +0000 (21:34 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 31 Jul 2014 18:20:15 +0000 (14:20 -0400)
Allow nfs4_preprocess_seqid_op to take the stateid reference, instead
of having all the callers do so.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index a777666044f1208da8ff1dcd3da0aac816b79569..b0c0f4cdf5031c5cd3dd7401a31df2204269bb83 100644 (file)
@@ -4390,8 +4390,11 @@ nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
                cstate->replay_owner = stp->st_stateowner;
 
        status = nfs4_seqid_op_checks(cstate, stateid, seqid, stp);
-       if (!status)
+       if (!status) {
+               /* FIXME: move into find_stateid_by_type */
+               atomic_inc(&stp->st_stid.sc_count);
                *stpp = stp;
+       }
        return status;
 }
 
@@ -4400,16 +4403,18 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs
 {
        __be32 status;
        struct nfs4_openowner *oo;
+       struct nfs4_ol_stateid *stp;
 
        status = nfs4_preprocess_seqid_op(cstate, seqid, stateid,
-                                               NFS4_OPEN_STID, stpp, nn);
+                                               NFS4_OPEN_STID, &stp, nn);
        if (status)
                return status;
-       /* FIXME: move into nfs4_preprocess_seqid_op */
-       atomic_inc(&(*stpp)->st_stid.sc_count);
-       oo = openowner((*stpp)->st_stateowner);
-       if (!(oo->oo_flags & NFS4_OO_CONFIRMED))
+       oo = openowner(stp->st_stateowner);
+       if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) {
+               nfs4_put_stid(&stp->st_stid);
                return nfserr_bad_stateid;
+       }
+       *stpp = stp;
        return nfs_ok;
 }
 
@@ -4436,8 +4441,6 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                                        NFS4_OPEN_STID, &stp, nn);
        if (status)
                goto out;
-       /* FIXME: move into nfs4_preprocess_seqid_op */
-       atomic_inc(&stp->st_stid.sc_count);
        oo = openowner(stp->st_stateowner);
        status = nfserr_bad_stateid;
        if (oo->oo_flags & NFS4_OO_CONFIRMED)
@@ -4587,8 +4590,6 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
        nfsd4_bump_seqid(cstate, status);
        if (status)
                goto out; 
-       /* FIXME: move into nfs4_preprocess_seqid_op */
-       atomic_inc(&stp->st_stid.sc_count);
        update_stateid(&stp->st_stid.sc_stateid);
        memcpy(&close->cl_stateid, &stp->st_stid.sc_stateid, sizeof(stateid_t));
 
@@ -4944,9 +4945,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                                       lock->lk_old_lock_seqid,
                                       &lock->lk_old_lock_stateid,
                                       NFS4_LOCK_STID, &lock_stp, nn);
-               /* FIXME: move into nfs4_preprocess_seqid_op */
-               if (!status)
-                       atomic_inc(&lock_stp->st_stid.sc_count);
        }
        if (status)
                goto out;
@@ -5175,8 +5173,6 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                                        &stp, nn);
        if (status)
                goto out;
-       /* FIXME: move into nfs4_preprocess_seqid_op */
-       atomic_inc(&stp->st_stid.sc_count);
        filp = find_any_file(stp->st_stid.sc_file);
        if (!filp) {
                status = nfserr_lock_range;