|
@@ -1011,35 +1011,22 @@ __be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
|
|
* N.B. After this call fhp needs an fh_put
|
|
|
*/
|
|
|
__be32
|
|
|
-nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
- loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt,
|
|
|
- int stable)
|
|
|
+nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
|
|
|
+ struct kvec *vec, int vlen, unsigned long *cnt, int stable)
|
|
|
{
|
|
|
- __be32 err = 0;
|
|
|
+ struct file *file = NULL;
|
|
|
+ __be32 err = 0;
|
|
|
|
|
|
trace_write_start(rqstp, fhp, offset, vlen);
|
|
|
|
|
|
- if (file) {
|
|
|
- err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry,
|
|
|
- NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE);
|
|
|
- if (err)
|
|
|
- goto out;
|
|
|
- trace_write_opened(rqstp, fhp, offset, vlen);
|
|
|
- err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt,
|
|
|
- stable);
|
|
|
- trace_write_io_done(rqstp, fhp, offset, vlen);
|
|
|
- } else {
|
|
|
- err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file);
|
|
|
- if (err)
|
|
|
- goto out;
|
|
|
+ err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file);
|
|
|
+ if (err)
|
|
|
+ goto out;
|
|
|
|
|
|
- trace_write_opened(rqstp, fhp, offset, vlen);
|
|
|
- if (cnt)
|
|
|
- err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen,
|
|
|
- cnt, stable);
|
|
|
- trace_write_io_done(rqstp, fhp, offset, vlen);
|
|
|
- fput(file);
|
|
|
- }
|
|
|
+ trace_write_opened(rqstp, fhp, offset, vlen);
|
|
|
+ err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt, stable);
|
|
|
+ trace_write_io_done(rqstp, fhp, offset, vlen);
|
|
|
+ fput(file);
|
|
|
out:
|
|
|
trace_write_done(rqstp, fhp, offset, vlen);
|
|
|
return err;
|