diff options
author | J. Bruce Fields <bfields@redhat.com> | 2010-07-28 18:21:23 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2010-07-29 22:34:29 +0200 |
commit | 21fb4016bd592409bc8f95737e365ac82413b795 (patch) | |
tree | 1d32bc2bc709dec0ffbd8453f6eb1f50871b99db /fs/nfsd | |
parent | nfsd4: don't pretend to support write delegations (diff) | |
download | linux-21fb4016bd592409bc8f95737e365ac82413b795.tar.xz linux-21fb4016bd592409bc8f95737e365ac82413b795.zip |
nfsd4: miscellaneous process_open2 cleanup
Move more work into helper functions.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4state.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index c07c9885f580..d9c8232fc62f 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2317,10 +2317,21 @@ nfs4_alloc_stateid(void) return kmem_cache_alloc(stateid_slab, GFP_KERNEL); } +static inline int nfs4_access_to_access(u32 nfs4_access) +{ + int flags = 0; + + if (nfs4_access & NFS4_SHARE_ACCESS_READ) + flags |= NFSD_MAY_READ; + if (nfs4_access & NFS4_SHARE_ACCESS_WRITE) + flags |= NFSD_MAY_WRITE; + return flags; +} + static __be32 nfs4_new_open(struct svc_rqst *rqstp, struct nfs4_stateid **stpp, struct nfs4_delegation *dp, - struct svc_fh *cur_fh, int flags) + struct svc_fh *cur_fh, struct nfsd4_open *open) { struct nfs4_stateid *stp; @@ -2333,8 +2344,10 @@ nfs4_new_open(struct svc_rqst *rqstp, struct nfs4_stateid **stpp, stp->st_vfs_file = dp->dl_vfs_file; } else { __be32 status; - status = nfsd_open(rqstp, cur_fh, S_IFREG, flags, - &stp->st_vfs_file); + int access = nfs4_access_to_access(open->op_share_access); + + status = nfsd_open(rqstp, cur_fh, S_IFREG, access, + &stp->st_vfs_file); if (status) { if (status == nfserr_dropit) status = nfserr_jukebox; @@ -2531,12 +2544,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf update_stateid(&stp->st_stateid); } else { /* Stateid was not found, this is a new OPEN */ - int flags = 0; - if (open->op_share_access & NFS4_SHARE_ACCESS_READ) - flags |= NFSD_MAY_READ; - if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) - flags |= NFSD_MAY_WRITE; - status = nfs4_new_open(rqstp, &stp, dp, current_fh, flags); + status = nfs4_new_open(rqstp, &stp, dp, current_fh, open); if (status) goto out; init_stateid(stp, fp, open); |