diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/file.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index 87ee944724f..603fd00af0a 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; |