Do mmap read-around when there are cached pages in the nearby 256KB (covered by one radix tree node). There is a failure case though: for a sequence of page faults at page index 64*i+1, i=1,2,3,..., this heuristic will keep doing pointless read-arounds. Hopefully the pattern won't appear in real workloads. Note that the readahead heuristic has similiar failure case. CC: Nick Piggin <npiggin@xxxxxxx> Acked-by: Rik van Riel <riel@xxxxxxxxxx> Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> --- mm/filemap.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --- linux.orig/mm/filemap.c 2010-02-23 13:20:39.000000000 +0800 +++ linux/mm/filemap.c 2010-02-23 13:22:36.000000000 +0800 @@ -1421,11 +1421,17 @@ static void do_sync_mmap_readahead(struc /* - * Do we miss much more than hit in this file? If so, - * stop bothering with read-ahead. It will only hurt. + * Do we miss much more than hit in this file? If so, stop bothering + * with read-around, unless some nearby pages were accessed recently. */ - if (ra_mmap_miss_inc(ra) > MMAP_LOTSAMISS) - return; + if (ra_mmap_miss_inc(ra) > MMAP_LOTSAMISS) { + struct radix_tree_node *node; + rcu_read_lock(); + node = radix_tree_lookup_leaf_node(&mapping->page_tree, offset); + rcu_read_unlock(); + if (!node) + return; + } /* * mmap read-around -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>