diff options
author | Neil Brown <neilb@cse.unsw.edu.au> | 2005-03-30 17:01:33 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-03-30 17:01:33 -0800 |
commit | 0de0fd94cd8636a6fa6cdc73b4853a63744820eb (patch) | |
tree | 239146bfa223c58971c3f2c299d90b62e1330ae2 | |
parent | 90317f80c82f9c7e597ed9bb80540270e582c535 (diff) | |
download | history-0de0fd94cd8636a6fa6cdc73b4853a63744820eb.tar.gz |
[PATCH] nfsd4: fix open returns for other claim types
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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | fs/nfsd/nfs4proc.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 4925a4552abb5a..20af74b842a73f 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -197,30 +197,40 @@ nfsd4_open(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open } 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 |