aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ceph/file.c20
-rw-r--r--include/linux/ceph/libceph.h3
-rw-r--r--net/ceph/pagevec.c3
3 files changed, 11 insertions, 15 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 87ee944724f8..603fd00af0a6 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -376,21 +376,19 @@ static ssize_t ceph_sync_read(struct file *file, char __user *data,
376 dout("sync_read on file %p %llu~%u %s\n", file, off, len, 376 dout("sync_read on file %p %llu~%u %s\n", file, off, len,
377 (file->f_flags & O_DIRECT) ? "O_DIRECT" : ""); 377 (file->f_flags & O_DIRECT) ? "O_DIRECT" : "");
378 378
379 if (file->f_flags & O_DIRECT) { 379 if (file->f_flags & O_DIRECT)
380 pages = ceph_get_direct_page_vector(data, num_pages, off, len); 380 pages = ceph_get_direct_page_vector(data, num_pages);
381 381 else
382 /*
383 * flush any page cache pages in this range. this
384 * will make concurrent normal and O_DIRECT io slow,
385 * but it will at least behave sensibly when they are
386 * in sequence.
387 */
388 } else {
389 pages = ceph_alloc_page_vector(num_pages, GFP_NOFS); 382 pages = ceph_alloc_page_vector(num_pages, GFP_NOFS);
390 }
391 if (IS_ERR(pages)) 383 if (IS_ERR(pages))
392 return PTR_ERR(pages); 384 return PTR_ERR(pages);
393 385
386 /*
387 * flush any page cache pages in this range. this
388 * will make concurrent normal and sync io slow,
389 * but it will at least behave sensibly when they are
390 * in sequence.
391 */
394 ret = filemap_write_and_wait(inode->i_mapping); 392 ret = filemap_write_and_wait(inode->i_mapping);
395 if (ret < 0) 393 if (ret < 0)
396 goto done; 394 goto done;
diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h
index f22b2e941686..9e76d35670d2 100644
--- a/include/linux/ceph/libceph.h
+++ b/include/linux/ceph/libceph.h
@@ -227,8 +227,7 @@ extern int ceph_open_session(struct ceph_client *client);
227extern void ceph_release_page_vector(struct page **pages, int num_pages); 227extern void ceph_release_page_vector(struct page **pages, int num_pages);
228 228
229extern struct page **ceph_get_direct_page_vector(const char __user *data, 229extern struct page **ceph_get_direct_page_vector(const char __user *data,
230 int num_pages, 230 int num_pages);
231 loff_t off, size_t len);
232extern void ceph_put_page_vector(struct page **pages, int num_pages); 231extern void ceph_put_page_vector(struct page **pages, int num_pages);
233extern void ceph_release_page_vector(struct page **pages, int num_pages); 232extern void ceph_release_page_vector(struct page **pages, int num_pages);
234extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags); 233extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags);
diff --git a/net/ceph/pagevec.c b/net/ceph/pagevec.c
index 54caf0687155..ac34feeb2b3a 100644
--- a/net/ceph/pagevec.c
+++ b/net/ceph/pagevec.c
@@ -13,8 +13,7 @@
13 * build a vector of user pages 13 * build a vector of user pages
14 */ 14 */
15struct page **ceph_get_direct_page_vector(const char __user *data, 15struct page **ceph_get_direct_page_vector(const char __user *data,
16 int num_pages, 16 int num_pages)
17 loff_t off, size_t len)
18{ 17{
19 struct page **pages; 18 struct page **pages;
20 int rc; 19 int rc;