page allocator: do not check NUMA node ID when the caller knows the node is valid
[safe/jmp/linux-2.6] / mm / filemap.c
index 99977f0..2239671 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);
        }
 }
 
@@ -1516,7 +1516,8 @@ static void do_async_mmap_readahead(struct vm_area_struct *vma,
        if (ra->mmap_miss > 0)
                ra->mmap_miss--;
        if (PageReadahead(page))
-               page_cache_async_readahead(mapping, ra, file, page, offset, 1);
+               page_cache_async_readahead(mapping, ra, file,
+                                          page, offset, ra->ra_pages);
 }
 
 /**