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

Benny Halevy bhalevy at panasas.com
Mon Jun 30 14:03:59 EDT 2008


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.

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