[pnfs] [PATCH 5/8] nfsd: tabulate nfs4 xdr encoding functions

J. Bruce Fields bfields at fieldses.org
Wed Jul 2 18:44:32 EDT 2008


On Mon, Jun 30, 2008 at 09:07:05PM +0300, Benny Halevy wrote:
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 051ca77..81d7552 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
...
> +	BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) ||
> +	       !nfsd4_enc_ops[op->opnum]);

We hit this in the OP_ILLEGAL case.  Which I wouldn't have noticed if it
hadn't been for

	./testserver.py ying2:/pynfstest --rundeps --hidepass --maketree COMP5

(I routinely run newpynfs with a commandline that has the known failures
excluded, below; appended below.

For now I'm just adding a check for the OP_ILLEGAL case:

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index facd247..9bb2909 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2605,10 +2605,13 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
 	statp = p++;	/* to be backfilled at the end */
 	ADJUST_ARGS();
 
+	if (op->opnum == OP_ILLEGAL)
+		goto status;
 	BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) ||
 	       !nfsd4_enc_ops[op->opnum]);
 	nfsd4_enc_ops[op->opnum](resp, op->status, &op->u);
 
+status:
 	/*
 	 * Note: We write the status directly, instead of using WRITE32(),
 	 * since it is already in network byte order.

but maybe there's some nicer fix.

The series introduces a few other newpynfs failures that I haven't
tracked down yet.

--b.

#failures:
CID6
LOOK7
SATT1a
CIDCF2
COMP6
CR13
CR14
LINK4a
LINK9
LOOKP2a
NVF7a
NVF7b
NVF7c
NVF7d
NVF7f
NVF7r
NVF7s
OPCF3a
OPEN4
OPEN23b
PUB1
RD12
RDDR12
RNM11
RNM16
SATT12a
# change attribute resolution problem:
SATT14
SEC7
VF7a
VF7b
VF7c
VF7d
VF7f
VF7r
VF7s
#warnings:
CID1
LOCK8c
LOCK18
LOCK21
OPDG9a
OPDG9b
OPDG9c
OPDG9d
OPDG9f
OPDG9s
OPEN16
RD4
RM7
RNM10


More information about the pNFS mailing list