[Devel] [VZ10 v2 08/21] ve: Fix usages of ve0

Vladimir Riabchun vladimir.riabchun at virtuozzo.com
Fri May 15 23:01:48 MSK 2026


This variable doesn't exist when !CONFIG_VE.
Use get_ve0 where possible or hide code under ifdefs.

https://virtuozzo.atlassian.net/browse/VSTOR-130116

Feature: !CONFIG_VE build
Signed-off-by: Vladimir Riabchun <vladimir.riabchun at virtuozzo.com>
---
 fs/aio.c                  | 7 +++++++
 fs/coredump.c             | 2 ++
 fs/sysctls.c              | 2 ++
 include/linux/sysctl.h    | 3 ++-
 kernel/cgroup/cgroup-v1.c | 6 +++---
 kernel/sysctl.c           | 4 ++++
 6 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/fs/aio.c b/fs/aio.c
index c6c3e5808ceb..6b67adbf057d 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -225,14 +225,21 @@ struct aio_kiocb {
 static struct ctl_table aio_sysctls[] = {
 	{
 		.procname	= "aio-nr",
+/* When !CONFIG_VE this doesn't matter - we take
+ * ve->aio_nr_lock, but ve is NULL
+ */
+#ifdef CONFIG_VE
 		.data		= &ve0.aio_nr,
+#endif
 		.maxlen		= sizeof(unsigned long),
 		.mode		= 0444 | S_ISVTX,
 		.proc_handler	= proc_doulongvec_minmax_virtual,
 	},
 	{
 		.procname	= "aio-max-nr",
+#ifdef CONFIG_VE
 		.data		= &ve0.aio_max_nr,
+#endif
 		.maxlen		= sizeof(unsigned long),
 		.mode		= 0644 | S_ISVTX,
 		.proc_handler	= proc_doulongvec_minmax_virtual,
diff --git a/fs/coredump.c b/fs/coredump.c
index fed2436cc846..720fec759978 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -1013,7 +1013,9 @@ static struct ctl_table coredump_sysctls[] = {
 	},
 	{
 		.procname	= "core_pattern",
+#ifdef CONFIG_VE
 		.data		= ve0.core_pattern,
+#endif
 		.maxlen		= CORENAME_MAX_SIZE,
 		.mode		= 0644 | S_ISVTX,
 		.proc_handler	= proc_dostring_coredump_virtual,
diff --git a/fs/sysctls.c b/fs/sysctls.c
index dfe2782f58f4..3c68cbdf6914 100644
--- a/fs/sysctls.c
+++ b/fs/sysctls.c
@@ -28,6 +28,7 @@ static struct ctl_table fs_shared_sysctls[] = {
 		.extra1		= SYSCTL_ZERO,
 		.extra2		= SYSCTL_MAXOLDUID,
 	},
+#ifdef CONFIG_VE
 	{
 		.procname	= "odirect_enable",
 		.data		= &ve0.odirect_enable,
@@ -35,6 +36,7 @@ static struct ctl_table fs_shared_sysctls[] = {
 		.mode		= 0644 | S_ISVTX,
 		.proc_handler	= proc_dointvec_virtual,
 	},
+#endif
 };
 
 static int __init init_fs_sysctls(void)
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 2fab3ecfaf88..76b32ba9f7bd 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -94,7 +94,8 @@ int sysctl ## _virtual(const struct ctl_table *table, int write,		\
 		        void *buffer, size_t *lenp, loff_t *ppos)		\
 {										\
 	struct ctl_table tmp = *table;						\
-	if (virtual_ptr(&tmp.data, &ve0, sizeof(ve0), get_exec_env()))		\
+	if (virtual_ptr(&tmp.data, get_ve0(),					\
+			sizeof(struct ve_struct), get_exec_env()))		\
 		return sysctl(&tmp, write, buffer, lenp, ppos);			\
 	return -EINVAL;								\
 }
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index e4ef76e4bde6..dfa9b0c83082 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -581,7 +581,7 @@ static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
 	root_cgrp = cgroup_ve_root1(cgrp);
 	if (!root_cgrp) {
 		if (ve_is_super(get_exec_env()) && cgrp == &cgrp->root->cgrp)
-			ve = &ve0;
+			ve = get_ve0();
 	} else {
 		if (root_cgrp == cgrp)
 			ve = rcu_dereference(root_cgrp->ve_owner);
@@ -612,7 +612,7 @@ static int cgroup_release_agent_show(struct seq_file *seq, void *v)
 	root_cgrp = cgroup_ve_root1(cgrp);
 	if (!root_cgrp) {
 		if (ve_is_super(get_exec_env()) && cgrp == &cgrp->root->cgrp)
-			ve = &ve0;
+			ve = get_ve0();
 	} else {
 		if (root_cgrp == cgrp)
 			ve = rcu_dereference(root_cgrp->ve_owner);
@@ -930,7 +930,7 @@ void cgroup1_release_agent(struct work_struct *work)
 		ret = call_usermodehelper_ve(ve, argv[0], argv, envp,
 					     UMH_WAIT_EXEC);
 
-		if (ret < 0 && ve == &ve0)
+		if (ret < 0 && ve == get_ve0())
 			pr_warn_ratelimited("cgroup1_release_agent "
 					    "%s %s failed: %d\n",
 					    agentbuf, pathbuf, ret);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index ac4cb49e4b7e..bbe64929a56c 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1973,7 +1973,11 @@ static struct ctl_table kern_table[] = {
 #if defined(CONFIG_MMU)
 	{
 		.procname	= "randomize_va_space",
+#ifdef CONFIG_VE
 		.data		= &ve0._randomize_va_space,
+#else
+		.data		= &_randomize_va_space,
+#endif
 		.maxlen		= sizeof(int),
 		.mode		= 0644 | S_ISVTX,
 		.proc_handler	= proc_dointvec_virtual,
-- 
2.43.0



More information about the Devel mailing list