drm: Define some new standard TV properties.
[firefly-linux-kernel-4.4.55.git] / mm / filemap.c
index 5c0c6518f3411a68cc2abb3881e73e42eaf473a8..ccea3b665c12571ac32d6d936b3862e103f7b995 100644 (file)
@@ -521,7 +521,7 @@ struct page *__page_cache_alloc(gfp_t gfp)
 {
        if (cpuset_do_page_mem_spread()) {
                int n = cpuset_mem_spread_node();
-               return alloc_pages_node(n, gfp, 0);
+               return alloc_pages_exact_node(n, gfp, 0);
        }
        return alloc_pages(gfp, 0);
 }
@@ -1004,9 +1004,6 @@ EXPORT_SYMBOL(grab_cache_page_nowait);
 static void shrink_readahead_size_eio(struct file *filp,
                                        struct file_ra_state *ra)
 {
-       if (!ra->ra_pages)
-               return;
-
        ra->ra_pages /= 4;
 }
 
@@ -1474,7 +1471,8 @@ static void do_sync_mmap_readahead(struct vm_area_struct *vma,
 
        if (VM_SequentialReadHint(vma) ||
                        offset - 1 == (ra->prev_pos >> PAGE_CACHE_SHIFT)) {
-               page_cache_sync_readahead(mapping, ra, file, offset, 1);
+               page_cache_sync_readahead(mapping, ra, file, offset,
+                                         ra->ra_pages);
                return;
        }
 
@@ -1488,13 +1486,15 @@ static void do_sync_mmap_readahead(struct vm_area_struct *vma,
        if (ra->mmap_miss > MMAP_LOTSAMISS)
                return;
 
+       /*
+        * mmap read-around
+        */
        ra_pages = max_sane_readahead(ra->ra_pages);
        if (ra_pages) {
-               pgoff_t start = 0;
-
-               if (offset > ra_pages / 2)
-                       start = offset - ra_pages / 2;
-               do_page_cache_readahead(mapping, file, start, ra_pages);
+               ra->start = max_t(long, 0, offset - ra_pages/2);
+               ra->size = ra_pages;
+               ra->async_size = 0;
+               ra_submit(ra, mapping, file);
        }
 }
 
@@ -2272,6 +2272,7 @@ again:
                pagefault_enable();
                flush_dcache_page(page);
 
+               mark_page_accessed(page);
                status = a_ops->write_end(file, mapping, pos, bytes, copied,
                                                page, fsdata);
                if (unlikely(status < 0))