From: NeilBrown 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 Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- 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 _