For cheap seek, when we scan the region between si->lowset_bit and scan_base, if san_base is greater than si->highest_bit, the scan operation between si->highest_bit and scan_base is not unnecessary. This patch can be used to avoid scanning invalidated region for cheap seek. Signed-off-by: Chen Yucong <slaoub@xxxxxxxxx> --- mm/swapfile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index beeeef8..7f0f27e 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -489,6 +489,7 @@ static unsigned long scan_swap_map(struct swap_info_struct *si, { unsigned long offset; unsigned long scan_base; + unsigned long upper_bound; unsigned long last_in_cluster = 0; int latency_ration = LATENCY_LIMIT; @@ -551,9 +552,11 @@ static unsigned long scan_swap_map(struct swap_info_struct *si, offset = si->lowest_bit; last_in_cluster = offset + SWAPFILE_CLUSTER - 1; + upper_bound = (scan_base <= si->highest_bit) ? + scan_base : (si->highest_bit + 1); /* Locate the first empty (unaligned) cluster */ - for (; last_in_cluster < scan_base; offset++) { + for (; last_in_cluster < upper_bound; offset++) { if (si->swap_map[offset]) last_in_cluster = offset + SWAPFILE_CLUSTER; else if (offset == last_in_cluster) { -- 1.7.10.4 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>