Commit f4f9ef4a authored by J. Bruce Fields's avatar J. Bruce Fields

nfsd4: opdesc will be useful outside nfs4proc.c

Trivial cleanup, no change in behavior.
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 0020939f
...@@ -1578,7 +1578,7 @@ static __be32 nfs41_check_op_ordering(struct nfsd4_compoundargs *args) ...@@ -1578,7 +1578,7 @@ static __be32 nfs41_check_op_ordering(struct nfsd4_compoundargs *args)
return nfs_ok; return nfs_ok;
} }
static inline const struct nfsd4_operation *OPDESC(struct nfsd4_op *op) const struct nfsd4_operation *OPDESC(struct nfsd4_op *op)
{ {
return &nfsd4_ops[op->opnum]; return &nfsd4_ops[op->opnum];
} }
...@@ -1651,7 +1651,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) ...@@ -1651,7 +1651,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
struct nfsd4_compoundargs *args = rqstp->rq_argp; struct nfsd4_compoundargs *args = rqstp->rq_argp;
struct nfsd4_compoundres *resp = rqstp->rq_resp; struct nfsd4_compoundres *resp = rqstp->rq_resp;
struct nfsd4_op *op; struct nfsd4_op *op;
const struct nfsd4_operation *opdesc;
struct nfsd4_compound_state *cstate = &resp->cstate; struct nfsd4_compound_state *cstate = &resp->cstate;
struct svc_fh *current_fh = &cstate->current_fh; struct svc_fh *current_fh = &cstate->current_fh;
struct svc_fh *save_fh = &cstate->save_fh; struct svc_fh *save_fh = &cstate->save_fh;
...@@ -1704,15 +1703,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) ...@@ -1704,15 +1703,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
goto encode_op; goto encode_op;
} }
opdesc = OPDESC(op);
if (!current_fh->fh_dentry) { if (!current_fh->fh_dentry) {
if (!(opdesc->op_flags & ALLOWED_WITHOUT_FH)) { if (!(op->opdesc->op_flags & ALLOWED_WITHOUT_FH)) {
op->status = nfserr_nofilehandle; op->status = nfserr_nofilehandle;
goto encode_op; goto encode_op;
} }
} else if (current_fh->fh_export->ex_fslocs.migrated && } else if (current_fh->fh_export->ex_fslocs.migrated &&
!(opdesc->op_flags & ALLOWED_ON_ABSENT_FS)) { !(op->opdesc->op_flags & ALLOWED_ON_ABSENT_FS)) {
op->status = nfserr_moved; op->status = nfserr_moved;
goto encode_op; goto encode_op;
} }
...@@ -1720,12 +1717,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) ...@@ -1720,12 +1717,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
fh_clear_wcc(current_fh); fh_clear_wcc(current_fh);
/* If op is non-idempotent */ /* If op is non-idempotent */
if (opdesc->op_flags & OP_MODIFIES_SOMETHING) { if (op->opdesc->op_flags & OP_MODIFIES_SOMETHING) {
/* /*
* Don't execute this op if we couldn't encode a * Don't execute this op if we couldn't encode a
* succesful reply: * succesful reply:
*/ */
u32 plen = opdesc->op_rsize_bop(rqstp, op); u32 plen = op->opdesc->op_rsize_bop(rqstp, op);
/* /*
* Plus if there's another operation, make sure * Plus if there's another operation, make sure
* we'll have space to at least encode an error: * we'll have space to at least encode an error:
...@@ -1738,9 +1735,9 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) ...@@ -1738,9 +1735,9 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
if (op->status) if (op->status)
goto encode_op; goto encode_op;
if (opdesc->op_get_currentstateid) if (op->opdesc->op_get_currentstateid)
opdesc->op_get_currentstateid(cstate, &op->u); op->opdesc->op_get_currentstateid(cstate, &op->u);
op->status = opdesc->op_func(rqstp, cstate, &op->u); op->status = op->opdesc->op_func(rqstp, cstate, &op->u);
/* Only from SEQUENCE */ /* Only from SEQUENCE */
if (cstate->status == nfserr_replay_cache) { if (cstate->status == nfserr_replay_cache) {
...@@ -1749,10 +1746,10 @@ nfsd4_proc_compound(struct svc_rqst *rqstp) ...@@ -1749,10 +1746,10 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)
goto out; goto out;
} }
if (!op->status) { if (!op->status) {
if (opdesc->op_set_currentstateid) if (op->opdesc->op_set_currentstateid)
opdesc->op_set_currentstateid(cstate, &op->u); op->opdesc->op_set_currentstateid(cstate, &op->u);
if (opdesc->op_flags & OP_CLEAR_STATEID) if (op->opdesc->op_flags & OP_CLEAR_STATEID)
clear_current_stateid(cstate); clear_current_stateid(cstate);
if (need_wrongsec_check(rqstp)) if (need_wrongsec_check(rqstp))
......
...@@ -1929,6 +1929,7 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp) ...@@ -1929,6 +1929,7 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
op->opnum = OP_ILLEGAL; op->opnum = OP_ILLEGAL;
op->status = nfserr_op_illegal; op->status = nfserr_op_illegal;
} }
op->opdesc = OPDESC(op);
/* /*
* We'll try to cache the result in the DRC if any one * We'll try to cache the result in the DRC if any one
* op in the compound wants to be cached: * op in the compound wants to be cached:
......
...@@ -538,6 +538,7 @@ struct nfsd4_seek { ...@@ -538,6 +538,7 @@ struct nfsd4_seek {
struct nfsd4_op { struct nfsd4_op {
int opnum; int opnum;
const struct nfsd4_operation * opdesc;
__be32 status; __be32 status;
union nfsd4_op_u { union nfsd4_op_u {
struct nfsd4_access access; struct nfsd4_access access;
...@@ -661,6 +662,7 @@ static inline bool nfsd4_last_compound_op(struct svc_rqst *rqstp) ...@@ -661,6 +662,7 @@ static inline bool nfsd4_last_compound_op(struct svc_rqst *rqstp)
return argp->opcnt == resp->opcnt; return argp->opcnt == resp->opcnt;
} }
const struct nfsd4_operation *OPDESC(struct nfsd4_op *op);
int nfsd4_max_reply(struct svc_rqst *rqstp, struct nfsd4_op *op); int nfsd4_max_reply(struct svc_rqst *rqstp, struct nfsd4_op *op);
void warn_on_nonidempotent_op(struct nfsd4_op *op); void warn_on_nonidempotent_op(struct nfsd4_op *op);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment