diff options
-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 4925a4552abb5..20af74b842a73 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 |