From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konstantin Khorenko Date: Fri, 21 Aug 2026 18:42:13 +0200 Subject: [Devel] [PATCH RHEL10 COMMIT] mm, proc: build the /proc/meminfo virtualization only with CONFIG_VE In-Reply-To: <20260821163718.187766-11-khorenko@virtuozzo.com> Message-ID: <202608211642.67LGgDdT667115@f0.sw.ru> List-Id: The commit is pushed to "branch-rh10-6.12.0-211.39.1.16.x.vz10-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git after rh10-6.12.0-211.39.1.16.6.vz10 ------> commit 3bb167409cb19772fcb7e26a2a51afd77ef4dd1c Author: Eva Kurchatova Date: Fri Aug 21 18:36:56 2026 +0200 mm, proc: build the /proc/meminfo virtualization only with CONFIG_VE 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 Signed-off-by: Konstantin Khorenko --- 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 ac3c88e68728a..27e8f921f31af 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 3ab11c945bf4a..15be6c6050e4d 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)