mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
readahead: improve heuristic detecting sequential reads
Introduce ra.offset and store in it an offset where the previous read ended. This way we can detect whether reads are really sequential (and thus we should not mark the page as accessed repeatedly) or whether they are random and just happen to be in the same page (and the page should really be marked accessed again). Signed-off-by: Jan Kara <[email protected]> Acked-by: Nick Piggin <[email protected]> Cc: WU Fengguang <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
b813e931b4
commit
ec0f163722
3 changed files with 10 additions and 3 deletions
|
|
@ -207,6 +207,8 @@ out:
|
|||
* If page_cache_readahead sees that it is again being called for
|
||||
* a page which it just looked at, it can return immediately without
|
||||
* making any state changes.
|
||||
* offset: Offset in the prev_page where the last read ended - used for
|
||||
* detection of sequential file reading.
|
||||
* ahead_start,
|
||||
* ahead_size: Together, these form the "ahead window".
|
||||
* ra_pages: The externally controlled max readahead for this fd.
|
||||
|
|
@ -473,6 +475,7 @@ page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra,
|
|||
/* Note that prev_page == -1 if it is a first read */
|
||||
sequential = (offset == ra->prev_page + 1);
|
||||
ra->prev_page = offset;
|
||||
ra->offset = 0;
|
||||
|
||||
max = get_max_readahead(ra);
|
||||
newsize = min(req_size, max);
|
||||
|
|
|
|||
Loading…
Reference in a new issue