[pnfs] [PATCH 1/8] nfsd: return nfserr_minor_vers_mismatch when compound minorversion != 0

J. Bruce Fields bfields at fieldses.org
Mon Jun 30 15:46:55 EDT 2008


On Mon, Jun 30, 2008 at 09:03:59PM +0300, Benny Halevy wrote:
> Check minorversion once before decoding any operation and reject with
> nfserr_minor_vers_mismatch if != 0.  In this case return a zero length
> resultdata array as required by RFC3530.

I think there's no actual change in behavior here, right?  On a quick
skim, it looks to me like the check in nfsd4_proc_compound() does the
right thing.

That's nothing against this patch, though maybe it'd make sense to
delete the minorversion check from nfsd4_proc_compound().

--b.

> 
> minorversion 1 processing will have its own vector of decoders.
> 
> Signed-off-by: Benny Halevy <bhalevy at panasas.com>
> ---
>  fs/nfsd/nfs4xdr.c |   15 ++++++++-------
>  1 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 9547ab6..491a697 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -1019,6 +1019,14 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
>  		}
>  	}
>  
> +	if (argp->minorversion != 0) {
> +		op = &argp->ops[0];
> +		op->replay = NULL;
> +		op->opnum = OP_ILLEGAL;
> +		op->status = nfserr_minor_vers_mismatch;
> +		argp->opcnt = 0;
> +	}
> +
>  	for (i = 0; i < argp->opcnt; i++) {
>  		op = &argp->ops[i];
>  		op->replay = NULL;
> @@ -1057,13 +1065,6 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
>  		op->opnum = ntohl(*argp->p++);
>  
>  		switch (op->opnum) {
> -		case 2: /* Reserved operation */
> -			op->opnum = OP_ILLEGAL;
> -			if (argp->minorversion == 0)
> -				op->status = nfserr_op_illegal;
> -			else
> -				op->status = nfserr_minor_vers_mismatch;
> -			break;
>  		case OP_ACCESS:
>  			op->status = nfsd4_decode_access(argp, &op->u.access);
>  			break;
> -- 
> 1.5.6.GIT
> 


More information about the pNFS mailing list