From 951bba1af942ea80bdec48f38d5ebfdb4b60a2a9 Mon Sep 17 00:00:00 2001 From: Wu Fengguang Date: Tue, 16 Jun 2009 15:31:24 -0700 Subject: [PATCH] --- yaml --- r: 151507 b: refs/heads/master c: 51daa88ebd8e0d437289f589af29d4b39379ea76 h: refs/heads/master i: 151505: 574da828cb18a76534103d61969b60d9550a75eb 151503: c2f91bcf949f2cc85dc52fbd993bb29c7fe56ec0 v: v3 --- [refs] | 2 +- trunk/mm/readahead.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 06e69beebf18..10fe76527e69 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 160334a0cfa8e578b718f81038026326845d07d7 +refs/heads/master: 51daa88ebd8e0d437289f589af29d4b39379ea76 diff --git a/trunk/mm/readahead.c b/trunk/mm/readahead.c index 16378b90843e..d7c6e143a129 100644 --- a/trunk/mm/readahead.c +++ b/trunk/mm/readahead.c @@ -421,6 +421,16 @@ ondemand_readahead(struct address_space *mapping, ra->async_size = ra->size > req_size ? ra->size - req_size : ra->size; readit: + /* + * Will this read hit the readahead marker made by itself? + * If so, trigger the readahead marker hit now, and merge + * the resulted next readahead window into the current one. + */ + if (offset == ra->start && ra->size == ra->async_size) { + ra->async_size = get_next_ra_size(ra, max); + ra->size += ra->async_size; + } + return ra_submit(ra, mapping, filp); }