From: Fengguang Wu When doing unaligned/subpages sequential reads, and thrashing happened, it is possible that (offset == prev_page), besides the normal (offset == prev_page + 1). We do not have such problem for the state based method. Signed-off-by: Fengguang Wu Signed-off-by: Andrew Morton --- mm/readahead.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN mm/readahead.c~readahead-call-scheme-fix-thrashed-unaligned-read mm/readahead.c --- a/mm/readahead.c~readahead-call-scheme-fix-thrashed-unaligned-read +++ a/mm/readahead.c @@ -1624,7 +1624,7 @@ page_cache_readahead_adaptive(struct add /* * Recover from possible thrashing. */ - if (!page && offset == ra->prev_page + 1 && ra_has_index(ra, offset)) + if (!page && offset - ra->prev_page <= 1 && ra_has_index(ra, offset)) return thrashing_recovery_readahead(mapping, filp, ra, offset, ra_max); _