|
|
@@ -3781,12 +3781,14 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static __be32 nfsd4_lookup_stateid(stateid_t *stateid, unsigned char typemask,
|
|
|
- struct nfs4_stid **s, bool sessions,
|
|
|
- struct nfsd_net *nn)
|
|
|
+static __be32
|
|
|
+nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
|
|
|
+ stateid_t *stateid, unsigned char typemask,
|
|
|
+ struct nfs4_stid **s, struct nfsd_net *nn)
|
|
|
{
|
|
|
struct nfs4_client *cl;
|
|
|
__be32 status;
|
|
|
+ bool sessions = cstate->minorversion != 0;
|
|
|
|
|
|
if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
|
|
|
return nfserr_bad_stateid;
|
|
|
@@ -3832,9 +3834,9 @@ nfs4_preprocess_stateid_op(struct net *net, struct nfsd4_compound_state *cstate,
|
|
|
|
|
|
nfs4_lock_state();
|
|
|
|
|
|
- status = nfsd4_lookup_stateid(stateid,
|
|
|
+ status = nfsd4_lookup_stateid(cstate, stateid,
|
|
|
NFS4_DELEG_STID|NFS4_OPEN_STID|NFS4_LOCK_STID,
|
|
|
- &s, cstate->minorversion, nn);
|
|
|
+ &s, nn);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
status = check_stateid_generation(stateid, &s->sc_stateid, nfsd4_has_session(cstate));
|
|
|
@@ -4004,8 +4006,7 @@ nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
|
|
|
seqid, STATEID_VAL(stateid));
|
|
|
|
|
|
*stpp = NULL;
|
|
|
- status = nfsd4_lookup_stateid(stateid, typemask, &s,
|
|
|
- cstate->minorversion, nn);
|
|
|
+ status = nfsd4_lookup_stateid(cstate, stateid, typemask, &s, nn);
|
|
|
if (status)
|
|
|
return status;
|
|
|
stp = openlockstateid(s);
|
|
|
@@ -4229,8 +4230,7 @@ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
return status;
|
|
|
|
|
|
nfs4_lock_state();
|
|
|
- status = nfsd4_lookup_stateid(stateid, NFS4_DELEG_STID, &s,
|
|
|
- cstate->minorversion, nn);
|
|
|
+ status = nfsd4_lookup_stateid(cstate, stateid, NFS4_DELEG_STID, &s, nn);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
dp = delegstateid(s);
|