]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
nfsd: hook up nfsd_write to the new nfsd_file cache
authorJeff Layton <jlayton@poochiereds.net>
Tue, 20 Oct 2015 17:33:45 +0000 (13:33 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 23 Oct 2015 19:57:40 +0000 (15:57 -0400)
Note that all callers currently pass in NULL for "file" anyway, so
there was already some dead code in here. Just eliminate that parm
and have it use the file cache instead of dealing directly with a
filp.

Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs3proc.c
fs/nfsd/nfsproc.c
fs/nfsd/vfs.c
fs/nfsd/vfs.h

index 7b755b7f785ceb4deff9fd9a5fbafccef15efa3f..4e46ac511479908f6b1adc9aa8ade12f1b40c6e7 100644 (file)
@@ -192,7 +192,7 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,
 
        fh_copy(&resp->fh, &argp->fh);
        resp->committed = argp->stable;
-       nfserr = nfsd_write(rqstp, &resp->fh, NULL,
+       nfserr = nfsd_write(rqstp, &resp->fh,
                                   argp->offset,
                                   rqstp->rq_vec, argp->vlen,
                                   &cnt,
index 4cd78ef4c95c4def33831856e863a36fc850ff59..9893095cbee1b323058a46fd4d70bde019ba699d 100644 (file)
@@ -213,7 +213,7 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp,
                SVCFH_fmt(&argp->fh),
                argp->len, argp->offset);
 
-       nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh), NULL,
+       nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh),
                                   argp->offset,
                                   rqstp->rq_vec, argp->vlen,
                                   &cnt,
index 575ce9efbf934408497e4028fd020b9a7126019c..bd015974bffe699d9fb86ab4ab29b3e21e90c6f7 100644 (file)
@@ -42,6 +42,7 @@
 
 #include "nfsd.h"
 #include "vfs.h"
+#include "filecache.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_FILEOP
 
@@ -1024,30 +1025,18 @@ __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 *stablep)
+nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
+          struct kvec *vec, int vlen, unsigned long *cnt, int *stablep)
 {
-       __be32                  err = 0;
-
-       if (file) {
-               err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry,
-                               NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE);
-               if (err)
-                       goto out;
-               err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt,
-                               stablep);
-       } else {
-               err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file);
-               if (err)
-                       goto out;
-
-               if (cnt)
-                       err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen,
-                                            cnt, stablep);
-               fput(file);
+       __be32                  err;
+       struct nfsd_file        *nf;
+
+       err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_WRITE, &nf);
+       if (err == nfs_ok) {
+               err = nfsd_vfs_write(rqstp, fhp, nf->nf_file, offset, vec,
+                                       vlen, cnt, stablep);
+               nfsd_file_put(nf);
        }
-out:
        return err;
 }
 
index b3beb896b08d6c9651ed40d59a9441c727d70c6c..80692e06302d1e13f1eacf60f74b2259031d70cd 100644 (file)
@@ -81,7 +81,7 @@ __be32                nfsd_readv(struct file *, loff_t, struct kvec *, int,
                                unsigned long *);
 __be32                 nfsd_read(struct svc_rqst *, struct svc_fh *,
                                loff_t, struct kvec *, int, unsigned long *);
-__be32                 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *,
+__be32                 nfsd_write(struct svc_rqst *, struct svc_fh *,
                                loff_t, struct kvec *,int, unsigned long *, int *);
 __be32         nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp,
                                struct file *file, loff_t offset,