NFS Cleanup: move call to generic_write_checks() into fs/nfs/direct.c
authorTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 23 Jun 2016 14:35:48 +0000 (10:35 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Tue, 5 Jul 2016 23:11:03 +0000 (19:11 -0400)
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/direct.c
fs/nfs/file.c

index 826d4dace0e50cf684c266f30903d53d14ab4bce..0169eca8eb42f1a299834fc978a133f990ae45f0 100644 (file)
@@ -988,6 +988,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
 ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
 {
        ssize_t result = -EINVAL;
+       size_t count;
        struct file *file = iocb->ki_filp;
        struct address_space *mapping = file->f_mapping;
        struct inode *inode = mapping->host;
@@ -998,8 +999,11 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
        dfprintk(FILE, "NFS: direct write(%pD2, %zd@%Ld)\n",
                file, iov_iter_count(iter), (long long) iocb->ki_pos);
 
-       nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES,
-                     iov_iter_count(iter));
+       result = generic_write_checks(iocb, iter);
+       if (result <= 0)
+               return result;
+       count = result;
+       nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES, count);
 
        pos = iocb->ki_pos;
        end = (pos + iov_iter_count(iter) - 1) >> PAGE_SHIFT;
@@ -1017,7 +1021,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
                        goto out_unlock;
        }
 
-       task_io_account_write(iov_iter_count(iter));
+       task_io_account_write(count);
 
        result = -ENOMEM;
        dreq = nfs_direct_req_alloc();
@@ -1025,7 +1029,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
                goto out_unlock;
 
        dreq->inode = inode;
-       dreq->bytes_left = dreq->max_count = iov_iter_count(iter);
+       dreq->bytes_left = dreq->max_count = count;
        dreq->io_start = pos;
        dreq->ctx = get_nfs_open_context(nfs_file_open_context(iocb->ki_filp));
        l_ctx = nfs_get_lock_context(dreq->ctx);
index df4dd8e7e62eda28f0485dfbc9bef33546153871..c26847c84d0048aaa239efed2cb89203e8b36817 100644 (file)
@@ -629,12 +629,8 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
        if (result)
                return result;
 
-       if (iocb->ki_flags & IOCB_DIRECT) {
-               result = generic_write_checks(iocb, from);
-               if (result <= 0)
-                       return result;
+       if (iocb->ki_flags & IOCB_DIRECT)
                return nfs_file_direct_write(iocb, from);
-       }
 
        dprintk("NFS: write(%pD2, %zu@%Ld)\n",
                file, count, (long long) iocb->ki_pos);