提交 2da1cec7 编写于 作者: J J. Bruce Fields

nfsd4: simplify free_stateid

We no longer need is_deleg_stateid, for example.
Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
上级 38c387b5
...@@ -1098,16 +1098,6 @@ static struct nfs4_stid *find_stateid(stateid_t *t) ...@@ -1098,16 +1098,6 @@ static struct nfs4_stid *find_stateid(stateid_t *t)
return NULL; return NULL;
} }
static struct nfs4_ol_stateid *find_ol_stateid(stateid_t *t)
{
struct nfs4_stid *s;
s = find_stateid(t);
if (!s)
return NULL;
return openlockstateid(s);
}
static struct nfs4_stid *find_stateid_by_type(stateid_t *t, char typemask) static struct nfs4_stid *find_stateid_by_type(stateid_t *t, char typemask)
{ {
struct nfs4_stid *s; struct nfs4_stid *s;
...@@ -3251,11 +3241,6 @@ static int check_stateid_generation(stateid_t *in, stateid_t *ref, bool has_sess ...@@ -3251,11 +3241,6 @@ static int check_stateid_generation(stateid_t *in, stateid_t *ref, bool has_sess
return nfserr_old_stateid; return nfserr_old_stateid;
} }
static int is_delegation_stateid(stateid_t *stateid)
{
return stateid->si_fileid == 0;
}
__be32 nfs4_validate_stateid(stateid_t *stateid, bool has_session) __be32 nfs4_validate_stateid(stateid_t *stateid, bool has_session)
{ {
struct nfs4_stid *s; struct nfs4_stid *s;
...@@ -3352,16 +3337,6 @@ nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate, ...@@ -3352,16 +3337,6 @@ nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
return status; return status;
} }
static __be32
nfsd4_free_delegation_stateid(stateid_t *stateid)
{
struct nfs4_delegation *dp = find_deleg_stateid(stateid);
if (dp)
return nfserr_locks_held;
return nfserr_bad_stateid;
}
static __be32 static __be32
nfsd4_free_lock_stateid(struct nfs4_ol_stateid *stp) nfsd4_free_lock_stateid(struct nfs4_ol_stateid *stp)
{ {
...@@ -3382,40 +3357,32 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, ...@@ -3382,40 +3357,32 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
return nfs_ok; return nfs_ok;
} }
/*
* Free a state id
*/
__be32 __be32
nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
struct nfsd4_free_stateid *free_stateid) struct nfsd4_free_stateid *free_stateid)
{ {
stateid_t *stateid = &free_stateid->fr_stateid; stateid_t *stateid = &free_stateid->fr_stateid;
struct nfs4_ol_stateid *stp; struct nfs4_stid *s;
__be32 ret; __be32 ret = nfserr_bad_stateid;
nfs4_lock_state(); nfs4_lock_state();
if (is_delegation_stateid(stateid)) { s = find_stateid(stateid);
ret = nfsd4_free_delegation_stateid(stateid); if (!s)
goto out;
}
stp = find_ol_stateid(stateid);
if (!stp) {
ret = nfserr_bad_stateid;
goto out;
}
ret = check_stateid_generation(stateid, &stp->st_stid.sc_stateid, 1);
if (ret)
goto out; goto out;
switch (s->sc_type) {
if (stp->st_stid.sc_type == NFS4_OPEN_STID) { case NFS4_DELEG_STID:
ret = nfserr_locks_held; ret = nfserr_locks_held;
goto out; goto out;
} else { case NFS4_OPEN_STID:
ret = nfsd4_free_lock_stateid(stp); case NFS4_LOCK_STID:
goto out; ret = check_stateid_generation(stateid, &s->sc_stateid, 1);
if (ret)
goto out;
if (s->sc_type == NFS4_LOCK_STID)
ret = nfsd4_free_lock_stateid(openlockstateid(s));
else
ret = nfserr_locks_held;
} }
out: out:
nfs4_unlock_state(); nfs4_unlock_state();
return ret; return ret;
...@@ -3698,9 +3665,6 @@ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, ...@@ -3698,9 +3665,6 @@ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
status = nfserr_stale_stateid; status = nfserr_stale_stateid;
if (STALE_STATEID(stateid)) if (STALE_STATEID(stateid))
goto out; goto out;
status = nfserr_bad_stateid;
if (!is_delegation_stateid(stateid))
goto out;
status = nfserr_expired; status = nfserr_expired;
dp = find_deleg_stateid(stateid); dp = find_deleg_stateid(stateid);
if (!dp) if (!dp)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册