Export the number of pages allocated for storing struct swap_cgroup in vmstat using global system-wide counters. Signed-off-by: Kinsey Ho <kinseyho@xxxxxxxxxx> --- include/linux/vmstat.h | 3 +++ mm/swap_cgroup.c | 3 +++ mm/vmstat.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index ac4d42c4fabd..227e951d1219 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h @@ -41,6 +41,9 @@ enum vm_stat_item { NR_DIRTY_BG_THRESHOLD, NR_MEMMAP_PAGES, /* page metadata allocated through buddy allocator */ NR_MEMMAP_BOOT_PAGES, /* page metadata allocated through boot allocator */ +#if defined(CONFIG_MEMCG) && defined(CONFIG_SWAP) + NR_SWAP_CGROUP_PAGES, /* allocated to store struct swap_cgroup */ +#endif NR_VM_STAT_ITEMS, }; diff --git a/mm/swap_cgroup.c b/mm/swap_cgroup.c index da1278f0563b..82eda8a3efe1 100644 --- a/mm/swap_cgroup.c +++ b/mm/swap_cgroup.c @@ -53,6 +53,8 @@ static int swap_cgroup_prepare(int type) if (!(idx % SWAP_CLUSTER_MAX)) cond_resched(); } + mod_global_page_state(NR_SWAP_CGROUP_PAGES, ctrl->length); + return 0; not_enough_page: max = idx; @@ -228,6 +230,7 @@ void swap_cgroup_swapoff(int type) if (!(i % SWAP_CLUSTER_MAX)) cond_resched(); } + mod_global_page_state(NR_SWAP_CGROUP_PAGES, -length); vfree(map); } } diff --git a/mm/vmstat.c b/mm/vmstat.c index e5a6dd5106c2..259574261ec1 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1295,6 +1295,9 @@ const char * const vmstat_text[] = { "nr_dirty_background_threshold", "nr_memmap_pages", "nr_memmap_boot_pages", +#if defined(CONFIG_MEMCG) && defined(CONFIG_SWAP) + "nr_swap_cgroup_pages", +#endif #if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG) /* enum vm_event_item counters */ -- 2.47.0.163.g1226f6d8fa-goog