[Devel] [PATCH vz10 10/32] mm, proc: build the /proc/meminfo virtualization only with CONFIG_VE

Konstantin Khorenko khorenko at virtuozzo.com
Fri Aug 21 19:36:56 MSK 2026


From: Eva Kurchatova <eva.kurchatova at virtuozzo.com>

The Container view of /proc/meminfo is built from the memory cgroup of
the Container: si_meminfo_ve() reads memcg->memory / memcg->memsw and
fill_meminfo_ve() looks the cgroup up by memory_cgrp_id.  Both are
compiled unconditionally, so with CONFIG_MEMCG=n - which CONFIG_VE=n
allows, and plain "make defconfig" used to produce - the build fails:

  mm/show_mem.c: error: 'memory_cgrp_id' undeclared (first use in this
                 function)

CONFIG_VE selects CONFIG_MEMCG, so CONFIG_VE is the condition to guard
with, and it is the better one anyway: with CONFIG_VE=n the Container view
is dead code even where CONFIG_MEMCG is on.  Compile si_meminfo_ve(),
fill_meminfo_ve() and the code that formats that view under it.

meminfo_proc_show_mi() has to go under the same guard as its only caller,
or it is left as an unused static function - an error rather than a
warning in a CONFIG_VE=n build with CONFIG_WERROR=y, which x86_64
defconfig sets.

The callers of si_meminfo_ve() in do_sysinfo() and swaps_open() are
reached only when !ve_is_super(get_exec_env()), which is a compile-time
false with CONFIG_VE=n, so the compiler drops those branches and no stub
is needed.

Fixes: 7710faa9d4f0 ("ve/proc: virtualize /proc/meminfo in a Container")
Feature: procfs: virtualize /proc/meminfo
https://virtuozzo.atlassian.net/browse/VSTOR-134732
Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
---
 fs/proc/meminfo.c | 4 ++++
 mm/show_mem.c     | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index ac3c88e68728..27e8f921f31a 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -34,6 +34,7 @@ static void show_val_kb(struct seq_file *m, const char *s, unsigned long num)
 	seq_write(m, " kB\n", 4);
 }
 
+#ifdef CONFIG_VE
 static int meminfo_proc_show_mi(struct seq_file *m, struct meminfo *mi)
 {
 	unsigned long *pages;
@@ -84,6 +85,7 @@ static void fill_meminfo_ve(struct meminfo *mi, struct ve_struct *ve)
 	css_put(css);
 
 }
+#endif /* CONFIG_VE */
 
 static int meminfo_proc_show_ve(struct seq_file *m, void *v,
 				struct ve_struct *ve)
@@ -104,11 +106,13 @@ static int meminfo_proc_show_ve(struct seq_file *m, void *v,
         mi.si = &i;
         mi.ve = ve;
 
+#ifdef CONFIG_VE
 	if (!ve_is_super(ve) && ve->meminfo_val == VE_MEMINFO_DEFAULT) {
 		fill_meminfo_ve(&mi, ve);
 
 		return meminfo_proc_show_mi(m, &mi);
 	}
+#endif
 
 	committed = vm_memory_committed();
 
diff --git a/mm/show_mem.c b/mm/show_mem.c
index 3ab11c945bf4..15be6c6050e4 100644
--- a/mm/show_mem.c
+++ b/mm/show_mem.c
@@ -91,6 +91,7 @@ void si_meminfo(struct sysinfo *val)
 
 EXPORT_SYMBOL(si_meminfo);
 
+#ifdef CONFIG_VE
 void si_meminfo_ve(struct sysinfo *si, struct ve_struct *ve)
 {
 	unsigned long memtotal, memused, swaptotal, swapused;
@@ -138,6 +139,7 @@ void si_meminfo_ve(struct sysinfo *si, struct ve_struct *ve)
 	/* bufferram, totalhigh and freehigh left 0 */
 }
 EXPORT_SYMBOL(si_meminfo_ve);
+#endif /* CONFIG_VE */
 
 #ifdef CONFIG_NUMA
 void si_meminfo_node(struct sysinfo *val, int nid)
-- 
2.47.1



More information about the Devel mailing list