diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 6ceb6f2dbac2..e2fa20dadf40 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -649,6 +649,7 @@ unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | |||
649 | int zid = zone_idx(z); | 649 | int zid = zone_idx(z); |
650 | struct mem_cgroup_per_zone *mz; | 650 | struct mem_cgroup_per_zone *mz; |
651 | int lru = LRU_FILE * !!file + !!active; | 651 | int lru = LRU_FILE * !!file + !!active; |
652 | int ret; | ||
652 | 653 | ||
653 | BUG_ON(!mem_cont); | 654 | BUG_ON(!mem_cont); |
654 | mz = mem_cgroup_zoneinfo(mem_cont, nid, zid); | 655 | mz = mem_cgroup_zoneinfo(mem_cont, nid, zid); |
@@ -666,9 +667,19 @@ unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | |||
666 | continue; | 667 | continue; |
667 | 668 | ||
668 | scan++; | 669 | scan++; |
669 | if (__isolate_lru_page(page, mode, file) == 0) { | 670 | ret = __isolate_lru_page(page, mode, file); |
671 | switch (ret) { | ||
672 | case 0: | ||
670 | list_move(&page->lru, dst); | 673 | list_move(&page->lru, dst); |
674 | mem_cgroup_del_lru(page); | ||
671 | nr_taken++; | 675 | nr_taken++; |
676 | break; | ||
677 | case -EBUSY: | ||
678 | /* we don't affect global LRU but rotate in our LRU */ | ||
679 | mem_cgroup_rotate_lru_list(page, page_lru(page)); | ||
680 | break; | ||
681 | default: | ||
682 | break; | ||
672 | } | 683 | } |
673 | } | 684 | } |
674 | 685 | ||