From: KAMEZAWA Hiroyuki Some amount of accounting is done while page reclaiming. Now, there are 2 types of page reclaim (if memory controller is used) - global: shortage of (global) pages. - under cgroup: use up to limit. I think 2 accountings, ALLOCSTALL and DIRECT should be accounted only under global lru scan. They are accounted against memory shortage at alloc_pages(). Signed-off-by: KAMEZAWA Hiroyuki Acked-by: Balbir Singh Signed-off-by: Andrew Morton --- mm/vmscan.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff -puN mm/vmscan.c~per-zone-and-reclaim-enhancements-for-memory-controller-take-3-modifies-vmscanc-for-isolate-globa-cgroup-lru-activity-fix-accounting-in-vmscanc-for-memory-controller mm/vmscan.c --- a/mm/vmscan.c~per-zone-and-reclaim-enhancements-for-memory-controller-take-3-modifies-vmscanc-for-isolate-globa-cgroup-lru-activity-fix-accounting-in-vmscanc-for-memory-controller +++ a/mm/vmscan.c @@ -889,8 +889,9 @@ static unsigned long shrink_inactive_lis if (current_is_kswapd()) { __count_zone_vm_events(PGSCAN_KSWAPD, zone, nr_scan); __count_vm_events(KSWAPD_STEAL, nr_freed); - } else + } else if (scan_global_lru(sc)) __count_zone_vm_events(PGSCAN_DIRECT, zone, nr_scan); + __count_zone_vm_events(PGSTEAL, zone, nr_freed); if (nr_taken == 0) @@ -1326,7 +1327,8 @@ static unsigned long do_try_to_free_page unsigned long lru_pages = 0; int i; - count_vm_event(ALLOCSTALL); + if (scan_global_lru(sc)) + count_vm_event(ALLOCSTALL); /* * mem_cgroup will not do shrink_slab. */ _