mm: swap: memcg: fix memcg stats for huge pages
PATCH RESEND 2/3 mm: swap: memcg: fix memcg stats for huge pages
The commit 2262185c5b28 ("mm: per-cgroup memory reclaim stats") added PGLAZYFREE, PGACTIVATE & PGDEACTIVATE stats for cgroups but missed couple of places and PGLAZYFREE missed huge page handling. Fix that. Also for PGLAZYFREE use the irq-unsafe function to update as the irq is already disabled.
Fixes 2262185c5b28 ("mm: per-cgroup memory reclaim stats")
Signed-off-by Shakeel Butt <[email protected]>
Acked-by Johannes Weiner <[email protected]>
--- mm/swap.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
mm/swap.c +12 -5
@@ -278,6 +278,7 @@ static void __activate_page(struct page *page, struct lruvec *lruvec,if (PageLRU (page) && !PageActive (page) && !PageUnevictable (page)) {int file =page_is_file_lru (page);int lru =page_lru_base_type (page); +int nr_pages =hpage_nr_pages (page);del_page_from_lru_list (page, lruvec, lru);SetPageActive (page);
@@ -285,7 +286,8 @@ static void __activate_page(struct page *page, struct lruvec *lruvec,add_page_to_lru_list (page, lruvec, lru);trace_mm_lru_activate (page); -__count_vm_events (PGACTIVATE ,hpage_nr_pages (page)); +__count_vm_events (PGACTIVATE , nr_pages); +__count_memcg_events (lruvec_memcg (lruvec),PGACTIVATE , nr_pages);update_page_reclaim_stat (lruvec, file,1 ); } }
@@ -540,8 +542,10 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec,__count_vm_events (PGROTATED , nr_pages); } -if (active) +if (active) {__count_vm_events (PGDEACTIVATE , nr_pages); +__count_memcg_events (lruvec_memcg (lruvec),PGDEACTIVATE , nr_pages); + }update_page_reclaim_stat (lruvec, file,0 ); }
@@ -551,13 +555,15 @@ static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec,if (PageLRU (page) &&PageActive (page) && !PageUnevictable (page)) {int file =page_is_file_lru (page);int lru =page_lru_base_type (page); +int nr_pages =hpage_nr_pages (page);del_page_from_lru_list (page, lruvec, lru +LRU_ACTIVE );ClearPageActive (page);ClearPageReferenced (page);add_page_to_lru_list (page, lruvec, lru); -__count_vm_events (PGDEACTIVATE ,hpage_nr_pages (page)); +__count_vm_events (PGDEACTIVATE , nr_pages); +__count_memcg_events (lruvec_memcg (lruvec),PGDEACTIVATE , nr_pages);update_page_reclaim_stat (lruvec, file,0 ); } }
@@ -568,6 +574,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec,if (PageLRU (page) &&PageAnon (page) &&PageSwapBacked (page) && !PageSwapCache (page) && !PageUnevictable (page)) {bool active =PageActive (page); +int nr_pages =hpage_nr_pages (page);del_page_from_lru_list (page, lruvec,LRU_INACTIVE_ANON + active);
@@ -581,8 +588,8 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec,ClearPageSwapBacked (page);add_page_to_lru_list (page, lruvec,LRU_INACTIVE_FILE ); -__count_vm_events (PGLAZYFREE ,hpage_nr_pages (page)); -count_memcg_page_event (page,PGLAZYFREE ); +__count_vm_events (PGLAZYFREE , nr_pages); +__count_memcg_events (lruvec_memcg (lruvec),PGLAZYFREE , nr_pages);update_page_reclaim_stat (lruvec,1 ,0 ); } }
Signature · 1 line
2.27.0.rc0.183.gde8f92d652-goog