]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
nfsd: hook nfsd_commit up to the nfsd_file cache
authorJeff Layton <jlayton@poochiereds.net>
Tue, 20 Oct 2015 17:33:47 +0000 (13:33 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 23 Oct 2015 19:57:41 +0000 (15:57 -0400)
Use cached filps if possible instead of opening a new one every time.

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

index 688e45fc5ddf40c6fabdc5d780b1b1e377efd954..0a3f08cc8f97b087e8229e0555fc2f96dbe21be7 100644 (file)
@@ -1049,9 +1049,9 @@ __be32
 nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp,
                loff_t offset, unsigned long count)
 {
-       struct file     *file;
-       loff_t          end = LLONG_MAX;
-       __be32          err = nfserr_inval;
+       struct nfsd_file        *nf;
+       loff_t                  end = LLONG_MAX;
+       __be32                  err = nfserr_inval;
 
        if (offset < 0)
                goto out;
@@ -1061,12 +1061,12 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp,
                        goto out;
        }
 
-       err = nfsd_open(rqstp, fhp, S_IFREG,
-                       NFSD_MAY_WRITE|NFSD_MAY_NOT_BREAK_LEASE, &file);
+       err = nfsd_file_acquire(rqstp, fhp,
+                       NFSD_MAY_WRITE|NFSD_MAY_NOT_BREAK_LEASE, &nf);
        if (err)
                goto out;
        if (EX_ISSYNC(fhp->fh_export)) {
-               int err2 = vfs_fsync_range(file, offset, end, 0);
+               int err2 = vfs_fsync_range(nf->nf_file, offset, end, 0);
 
                if (err2 != -EINVAL)
                        err = nfserrno(err2);
@@ -1074,7 +1074,7 @@ nfsd_commit(struct svc_rqst *rqstp, struct svc_fh *fhp,
                        err = nfserr_notsupp;
        }
 
-       fput(file);
+       nfsd_file_put(nf);
 out:
        return err;
 }