diff options
Diffstat (limited to 'fs/nfsd/nfs4proc.c')
-rw-r--r-- | fs/nfsd/nfs4proc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 87d24e5f3ca4..1a0b1fdb5ad3 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c | |||
@@ -195,6 +195,7 @@ static __be32 | |||
195 | do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) | 195 | do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) |
196 | { | 196 | { |
197 | struct svc_fh *resfh; | 197 | struct svc_fh *resfh; |
198 | int accmode; | ||
198 | __be32 status; | 199 | __be32 status; |
199 | 200 | ||
200 | resfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL); | 201 | resfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL); |
@@ -254,9 +255,10 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o | |||
254 | /* set reply cache */ | 255 | /* set reply cache */ |
255 | fh_copy_shallow(&open->op_openowner->oo_owner.so_replay.rp_openfh, | 256 | fh_copy_shallow(&open->op_openowner->oo_owner.so_replay.rp_openfh, |
256 | &resfh->fh_handle); | 257 | &resfh->fh_handle); |
257 | if (!open->op_created) | 258 | accmode = NFSD_MAY_NOP; |
258 | status = do_open_permission(rqstp, resfh, open, | 259 | if (open->op_created) |
259 | NFSD_MAY_NOP); | 260 | accmode |= NFSD_MAY_OWNER_OVERRIDE; |
261 | status = do_open_permission(rqstp, resfh, open, accmode); | ||
260 | set_change_info(&open->op_cinfo, current_fh); | 262 | set_change_info(&open->op_cinfo, current_fh); |
261 | fh_dup2(current_fh, resfh); | 263 | fh_dup2(current_fh, resfh); |
262 | out: | 264 | out: |