From: Fengguang Wu When canceling lookahead, update ra->lookahead_index to the next invoke index. So that we see a consistent state in the next time. Signed-off-by: Fengguang Wu Signed-off-by: Andrew Morton --- mm/readahead.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff -puN mm/readahead.c~readahead-state-based-method-cancel-lookahead-gracefully mm/readahead.c --- a/mm/readahead.c~readahead-state-based-method-cancel-lookahead-gracefully +++ a/mm/readahead.c @@ -1097,7 +1097,7 @@ state_based_readahead(struct address_spa if (page && remain_space <= la_size) { rescue_pages(page, la_size); - return 0; + goto cancel_lookahead; } growth_limit = req_size; @@ -1107,7 +1107,7 @@ state_based_readahead(struct address_spa growth_limit = ra_max; if (!adjust_rala(growth_limit, &ra_size, &la_size)) - return 0; + goto cancel_lookahead; limit_rala(growth_limit, la_old, &ra_size, &la_size); @@ -1116,6 +1116,10 @@ state_based_readahead(struct address_spa ra_set_size(ra, ra_size, la_size); return ra_submit(ra, mapping, filp); + +cancel_lookahead: + ra->lookahead_index = ra->readahead_index; + return 0; } #endif /* CONFIG_ADAPTIVE_READAHEAD */ _