···376376 dout("sync_read on file %p %llu~%u %s\n", file, off, len,377377 (file->f_flags & O_DIRECT) ? "O_DIRECT" : "");378378379379- if (file->f_flags & O_DIRECT) {380380- pages = ceph_get_direct_page_vector(data, num_pages, off, len);381381-382382- /*383383- * flush any page cache pages in this range. this384384- * will make concurrent normal and O_DIRECT io slow,385385- * but it will at least behave sensibly when they are386386- * in sequence.387387- */388388- } else {379379+ if (file->f_flags & O_DIRECT)380380+ pages = ceph_get_direct_page_vector(data, num_pages);381381+ else389382 pages = ceph_alloc_page_vector(num_pages, GFP_NOFS);390390- }391383 if (IS_ERR(pages))392384 return PTR_ERR(pages);393385386386+ /*387387+ * flush any page cache pages in this range. this388388+ * will make concurrent normal and sync io slow,389389+ * but it will at least behave sensibly when they are390390+ * in sequence.391391+ */394392 ret = filemap_write_and_wait(inode->i_mapping);395393 if (ret < 0)396394 goto done;
+1-2
include/linux/ceph/libceph.h
···227227extern void ceph_release_page_vector(struct page **pages, int num_pages);228228229229extern struct page **ceph_get_direct_page_vector(const char __user *data,230230- int num_pages,231231- loff_t off, size_t len);230230+ int num_pages);232231extern void ceph_put_page_vector(struct page **pages, int num_pages);233232extern void ceph_release_page_vector(struct page **pages, int num_pages);234233extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags);
+1-2
net/ceph/pagevec.c
···1313 * build a vector of user pages1414 */1515struct page **ceph_get_direct_page_vector(const char __user *data,1616- int num_pages,1717- loff_t off, size_t len)1616+ int num_pages)1817{1918 struct page **pages;2019 int rc;