thp: fix anon memory statistics with transparent hugepages
Count each transparent hugepage as HPAGE_PMD_NR pages in the LRU statistics, so the Active(anon) and Inactive(anon) statistics in /proc/meminfo are correct. Signed-off-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
97562cd243
commit
2c888cfbc1
11
mm/vmscan.c
11
mm/vmscan.c
@@ -1045,7 +1045,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
||||
case 0:
|
||||
list_move(&page->lru, dst);
|
||||
mem_cgroup_del_lru(page);
|
||||
nr_taken++;
|
||||
nr_taken += hpage_nr_pages(page);
|
||||
break;
|
||||
|
||||
case -EBUSY:
|
||||
@@ -1103,7 +1103,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
||||
if (__isolate_lru_page(cursor_page, mode, file) == 0) {
|
||||
list_move(&cursor_page->lru, dst);
|
||||
mem_cgroup_del_lru(cursor_page);
|
||||
nr_taken++;
|
||||
nr_taken += hpage_nr_pages(page);
|
||||
nr_lumpy_taken++;
|
||||
if (PageDirty(cursor_page))
|
||||
nr_lumpy_dirty++;
|
||||
@@ -1158,14 +1158,15 @@ static unsigned long clear_active_flags(struct list_head *page_list,
|
||||
struct page *page;
|
||||
|
||||
list_for_each_entry(page, page_list, lru) {
|
||||
int numpages = hpage_nr_pages(page);
|
||||
lru = page_lru_base_type(page);
|
||||
if (PageActive(page)) {
|
||||
lru += LRU_ACTIVE;
|
||||
ClearPageActive(page);
|
||||
nr_active++;
|
||||
nr_active += numpages;
|
||||
}
|
||||
if (count)
|
||||
count[lru]++;
|
||||
count[lru] += numpages;
|
||||
}
|
||||
|
||||
return nr_active;
|
||||
@@ -1483,7 +1484,7 @@ static void move_active_pages_to_lru(struct zone *zone,
|
||||
|
||||
list_move(&page->lru, &zone->lru[lru].list);
|
||||
mem_cgroup_add_lru_list(page, lru);
|
||||
pgmoved++;
|
||||
pgmoved += hpage_nr_pages(page);
|
||||
|
||||
if (!pagevec_add(&pvec, page) || list_empty(list)) {
|
||||
spin_unlock_irq(&zone->lru_lock);
|
||||
|
Reference in New Issue
Block a user