
From: NeilBrown <neilb@cse.unsw.edu.au>

Switch on OPEN claim type instead of if-else. add remaining OPEN claim types.

Return nfserr_notsupp instead of nfserr_inval for valid claim types.

Signed-off-by: Andy Adamson <andros@citi.umich.edu>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/nfsd/nfs4proc.c |   32 +++++++++++++++++++++-----------
 1 files changed, 21 insertions(+), 11 deletions(-)

diff -puN fs/nfsd/nfs4proc.c~nfsd4-fix-open-returns-for-other-claim-types fs/nfsd/nfs4proc.c
--- 25/fs/nfsd/nfs4proc.c~nfsd4-fix-open-returns-for-other-claim-types	2005-03-21 22:50:12.000000000 -0800
+++ 25-akpm/fs/nfsd/nfs4proc.c	2005-03-21 22:50:12.000000000 -0800
@@ -197,30 +197,40 @@ nfsd4_open(struct svc_rqst *rqstp, struc
 	}
 	if (status)
 		goto out;
-	if (open->op_claim_type == NFS4_OPEN_CLAIM_NULL) {
+	switch (open->op_claim_type) {
+		case NFS4_OPEN_CLAIM_NULL:
 	/*
 	 * This block of code will (1) set CURRENT_FH to the file being opened,
 	 * creating it if necessary, (2) set open->op_cinfo,
 	 * (3) set open->op_truncate if the file is to be truncated
 	 * after opening, (4) do permission checking.
 	 */
-		status = do_open_lookup(rqstp, current_fh, open);
-		if (status)
-			goto out;
-	} else if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS) {
+			status = do_open_lookup(rqstp, current_fh, open);
+			if (status)
+				goto out;
+			break;
+		case NFS4_OPEN_CLAIM_PREVIOUS:
 	/*
 	* The CURRENT_FH is already set to the file being opened. This
 	* block of code will (1) set open->op_cinfo, (2) set
 	* open->op_truncate if the file is to be truncated after opening,
 	* (3) do permission checking.
 	*/
-		status = do_open_fhandle(rqstp, current_fh, open);
-		if (status)
+			status = do_open_fhandle(rqstp, current_fh, open);
+			if (status)
+				goto out;
+			break;
+		case NFS4_OPEN_CLAIM_DELEGATE_CUR:
+             	case NFS4_OPEN_CLAIM_DELEGATE_PREV:
+			printk("NFSD: unsupported OPEN claim type %d\n",
+				open->op_claim_type);
+			status = nfserr_notsupp;
+			goto out;
+		default:
+			printk("NFSD: Invalid OPEN claim type %d\n",
+				open->op_claim_type);
+			status = nfserr_inval;
 			goto out;
-	} else {
-		printk("NFSD: unsupported OPEN claim type\n");
-		status = nfserr_inval;
-		goto out;
 	}
 	/*
 	 * nfsd4_process_open2() does the actual opening of the file.  If
_
