[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-nfs
Subject: Re: [PATCH] NFSD: Combine decode operations for v4 and v4.1
From: "J. Bruce Fields" <bfields () fieldses ! org>
Date: 2013-10-29 21:24:02
Message-ID: 20131029212402.GB3227 () fieldses ! org
[Download RAW message or body]
On Tue, Oct 29, 2013 at 05:13:25PM -0400, Anna Schumaker wrote:
> On Tue 29 Oct 2013 05:06:59 PM EDT, J. Bruce Fields wrote:
> > On Tue, Oct 29, 2013 at 05:04:36PM -0400, Anna Schumaker wrote:
> >> We were using a different array of function pointers to represent each
> >> minor version. This makes adding a new minor version tedious, since it
> >> needs a step to copy, paste and modify a new version of the same
> >> functions.
> >>
> >> This patch combines the v4 and v4.1 arrays into a single instance and
> >> will check minor version support inside each decoder function.
> >
> > This also needs checks in all the new operations. (E.g. exchange_id
> > needs to return nfserr_notsupp on minorversion=0.)
> >
>
> nfsd4_verify_opnum() should do some of that, but I'll add the checks to
> the new operations since it probably makes more sense there. Should I
> return nfserr_notsupp or nfserr_illegal in this case?
Doh, sorry I was obviously reading too fast! What you've got looks
fine, no need to add checks to each operation.
As a nit, I'd rather avoid when possible returning an error value that's
ignored:
> >> +static __be32 nfsd4_verify_opnum(struct nfsd4_compoundargs *argp, struct nfsd4_op *op)
> >> +{
> >> + if (op->opnum < FIRST_NFS4_OP || op->opnum > LAST_NFS4_OP)
> >> + return nfserr_op_illegal;
> >> + else if (argp->minorversion == 0 && op->opnum > OP_RELEASE_LOCKOWNER)
> >> + return nfserr_op_illegal;
> >> + else if (argp->minorversion == 1 && op->opnum > OP_RECLAIM_COMPLETE)
> >> + return nfserr_op_illegal;
> >> + return nfs_ok;
> >> +}
...
> >> + if (nfsd4_verify_opnum(argp, op) == nfs_ok)
> >> + op->status = nfsd4_dec_ops[op->opnum](argp, &op->u);
> >> else {
> >> op->opnum = OP_ILLEGAL;
> >> op->status = nfserr_op_illegal;
How about making it something like "static bool nfsd4_opnum_in_range"?
--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic