ceph: pass proper page offset to copy_page_to_iter()
authorYan, Zheng <zheng.z.yan@intel.com>
Wed, 2 Jul 2014 02:13:00 +0000 (10:13 +0800)
committerIlya Dryomov <ilya.dryomov@inktank.com>
Tue, 8 Jul 2014 11:08:47 +0000 (15:08 +0400)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
fs/ceph/file.c

index 19af25dff6447621c7f032e11856bb8119d09dcf..fec9ddcf1528a8cf009ff371f4534c4da5e28fa5 100644 (file)
@@ -470,8 +470,11 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *i,
                        size_t left = ret;
 
                        while (left) {
-                               int copy = min_t(size_t, PAGE_SIZE, left);
-                               l = copy_page_to_iter(pages[k++], 0, copy, i);
+                               size_t page_off = off & ~PAGE_MASK;
+                               size_t copy = min_t(size_t,
+                                                   PAGE_SIZE - page_off, left);
+                               l = copy_page_to_iter(pages[k++], page_off,
+                                                     copy, i);
                                off += l;
                                left -= l;
                                if (l < copy)