diff options
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 54155268dfca..94e86dd6954c 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -630,9 +630,14 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
630 | 630 | ||
631 | referenced = page_referenced(page, 1, | 631 | referenced = page_referenced(page, 1, |
632 | sc->mem_cgroup, &vm_flags); | 632 | sc->mem_cgroup, &vm_flags); |
633 | /* In active use or really unfreeable? Activate it. */ | 633 | /* |
634 | * In active use or really unfreeable? Activate it. | ||
635 | * If page which have PG_mlocked lost isoltation race, | ||
636 | * try_to_unmap moves it to unevictable list | ||
637 | */ | ||
634 | if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && | 638 | if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && |
635 | referenced && page_mapping_inuse(page)) | 639 | referenced && page_mapping_inuse(page) |
640 | && !(vm_flags & VM_LOCKED)) | ||
636 | goto activate_locked; | 641 | goto activate_locked; |
637 | 642 | ||
638 | /* | 643 | /* |
@@ -1104,7 +1109,7 @@ static unsigned long shrink_inactive_list(unsigned long max_scan, | |||
1104 | */ | 1109 | */ |
1105 | if (nr_freed < nr_taken && !current_is_kswapd() && | 1110 | if (nr_freed < nr_taken && !current_is_kswapd() && |
1106 | lumpy_reclaim) { | 1111 | lumpy_reclaim) { |
1107 | congestion_wait(WRITE, HZ/10); | 1112 | congestion_wait(BLK_RW_ASYNC, HZ/10); |
1108 | 1113 | ||
1109 | /* | 1114 | /* |
1110 | * The attempt at page out may have made some | 1115 | * The attempt at page out may have made some |
@@ -1721,7 +1726,7 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist, | |||
1721 | 1726 | ||
1722 | /* Take a nap, wait for some writeback to complete */ | 1727 | /* Take a nap, wait for some writeback to complete */ |
1723 | if (sc->nr_scanned && priority < DEF_PRIORITY - 2) | 1728 | if (sc->nr_scanned && priority < DEF_PRIORITY - 2) |
1724 | congestion_wait(WRITE, HZ/10); | 1729 | congestion_wait(BLK_RW_ASYNC, HZ/10); |
1725 | } | 1730 | } |
1726 | /* top priority shrink_zones still had more to do? don't OOM, then */ | 1731 | /* top priority shrink_zones still had more to do? don't OOM, then */ |
1727 | if (!sc->all_unreclaimable && scanning_global_lru(sc)) | 1732 | if (!sc->all_unreclaimable && scanning_global_lru(sc)) |
@@ -1960,7 +1965,7 @@ loop_again: | |||
1960 | * another pass across the zones. | 1965 | * another pass across the zones. |
1961 | */ | 1966 | */ |
1962 | if (total_scanned && priority < DEF_PRIORITY - 2) | 1967 | if (total_scanned && priority < DEF_PRIORITY - 2) |
1963 | congestion_wait(WRITE, HZ/10); | 1968 | congestion_wait(BLK_RW_ASYNC, HZ/10); |
1964 | 1969 | ||
1965 | /* | 1970 | /* |
1966 | * We do this so kswapd doesn't build up large priorities for | 1971 | * We do this so kswapd doesn't build up large priorities for |
@@ -2233,7 +2238,7 @@ unsigned long shrink_all_memory(unsigned long nr_pages) | |||
2233 | goto out; | 2238 | goto out; |
2234 | 2239 | ||
2235 | if (sc.nr_scanned && prio < DEF_PRIORITY - 2) | 2240 | if (sc.nr_scanned && prio < DEF_PRIORITY - 2) |
2236 | congestion_wait(WRITE, HZ / 10); | 2241 | congestion_wait(BLK_RW_ASYNC, HZ / 10); |
2237 | } | 2242 | } |
2238 | } | 2243 | } |
2239 | 2244 | ||