]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm/vmstat: make MEMCG select VM_EVENT_COUNTERS
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Wed, 4 Jun 2025 09:51:11 +0000 (12:51 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 20 Jul 2025 01:59:46 +0000 (18:59 -0700)
The vmstat_text array contains labels for counters displayed in
/proc/vmstat.  It is important to keep the labels in sync with the
counters.

There is a BUILD_BUG_ON() check in vmstat_start() that ensures the size of
the vmstat_text is not smaller than VM_EVENT_COUNTERS.  This helps to
catch cases where a new counter is added but the label is not.  However,
it does not help if a counter is removed but the label remains.

It would be nice to make the BUILD_BUG_ON() check more strict to catch
such cases.  However, when compiling with MEMCG enabled but
VM_EVENT_COUNTERS disabled, the vmstat_text array is larger than
NR_VMSTAT_ITEMS.

This issue arises because some elements of the vmstat_text array are
present when either MEMCG or VM_EVENT_COUNTERS is enabled, but
NR_VMSTAT_ITEMS only accounts for these elements if VM_EVENT_COUNTERS is
enabled.

Instead of adjusting the NR_VMSTAT_ITEMS definition to account for MEMCG,
make MEMCG select VM_EVENT_COUNTERS.  VM_EVENT_COUNTERS is enabled in most
configurations anyway.

Link: https://lkml.kernel.org/r/20250604095111.533783-1-kirill.shutemov@linux.intel.com
Fixes: ebc5d83d0443 ("mm/memcontrol: use vmstat names for printing statistics")
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reported-by: Randy Dunlap <rdunlap@infradead.org>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Tested-by: Randy Dunlap <rdunlap@infradead.org>
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/vmstat.h
init/Kconfig
mm/vmstat.c

index b2ccb6845595a61135eed876543a679946503dfe..c287998908bf5fa062d0697fcd4eab036c808e73 100644 (file)
@@ -507,7 +507,7 @@ static inline const char *lru_list_name(enum lru_list lru)
        return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
 }
 
-#if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG)
+#if defined(CONFIG_VM_EVENT_COUNTERS)
 static inline const char *vm_event_name(enum vm_event_item item)
 {
        return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
@@ -516,7 +516,7 @@ static inline const char *vm_event_name(enum vm_event_item item)
                           NR_VM_STAT_ITEMS +
                           item];
 }
-#endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */
+#endif /* CONFIG_VM_EVENT_COUNTERS */
 
 #ifdef CONFIG_MEMCG
 
index 666783eb50abd7de2edaf5e367b0750a693fefbb..e9b88d527aeb567408f53fa1b883b2b55bb541b9 100644 (file)
@@ -992,6 +992,7 @@ config MEMCG
        select PAGE_COUNTER
        select EVENTFD
        select SLAB_OBJ_EXT
+       select VM_EVENT_COUNTERS
        help
          Provides control over the memory footprint of tasks in a cgroup.
 
index a78d70ddeacd686ce4cc2caf2ed76556abbda283..01d76216d65a2b7868d7fed619a8810335d1da29 100644 (file)
@@ -1287,7 +1287,7 @@ const char * const vmstat_text[] = {
        "nr_memmap_pages",
        "nr_memmap_boot_pages",
 
-#if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG)
+#if defined(CONFIG_VM_EVENT_COUNTERS)
        /* enum vm_event_item counters */
        "pgpgin",
        "pgpgout",
@@ -1475,7 +1475,7 @@ const char * const vmstat_text[] = {
        "kstack_rest",
 #endif
 #endif
-#endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */
+#endif /* CONFIG_VM_EVENT_COUNTERS */
 };
 #endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */