[Devel] [PATCH RHEL10 COMMIT] ve: Add ve namespace based task_ve() and get_task_ve() helpers

Konstantin Khorenko khorenko at virtuozzo.com
Mon Dec 1 20:08:06 MSK 2025


The commit is pushed to "branch-rh10-6.12.0-55.13.1.2.x.vz10-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh10-6.12.0-55.13.1.2.21.vz10
------>
commit 051c7f2f36453da543364b4135f241ecf168e09b
Author: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
Date:   Mon Nov 24 19:20:46 2025 +0800

    ve: Add ve namespace based task_ve() and get_task_ve() helpers
    
    Those will replace task->task_ve references.
    
    We protect access to other task's task_ve with task_lock. To actually be
    able to dereference ve fields we also have to take reference on it,
    because other task's task_ve can change under us.
    
    If we don't plan to dereference ve and only use it to compare with other
    ve, we can just read it without any locking.
    
    https://virtuozzo.atlassian.net/browse/VSTOR-118289
    Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
    
    Feature: ve: ve generic structures
    ======
    Patchset description:
    ve: Add VE namespace
    
    Main ideas behind VE namespace explained in "ve: Introduce VE
    namespace".
---
 include/linux/ve.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/include/linux/ve.h b/include/linux/ve.h
index 63b80068e2fb5..f664740041001 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -179,6 +179,17 @@ void cgroot_ve_cleanup_ra_data(struct cgroup_root *cgroot);
 extern struct ve_struct *get_ve(struct ve_struct *ve);
 extern void put_ve(struct ve_struct *ve);
 
+static inline struct ve_struct *task_ve(struct task_struct *task)
+{
+	return READ_ONCE(task->task_ve);
+}
+
+static inline struct ve_struct *get_task_ve(struct task_struct *task)
+{
+	guard(task_lock)(task);
+	return get_ve(task_ve(task));
+}
+
 void ve_stop_ns(struct pid_namespace *ns);
 void ve_exit_ns(struct pid_namespace *ns);
 bool ve_check_trusted_exec(struct file *file, struct filename *name);
@@ -248,6 +259,16 @@ extern bool is_ve_init_net(const struct net *net);
 #define get_ve(ve)	((void)(ve), NULL)
 #define put_ve(ve)	do { (void)(ve); } while (0)
 
+static inline struct ve_struct *task_ve(struct task_struct *task)
+{
+	return NULL;
+}
+
+static inline struct ve_struct *get_task_ve(struct task_struct *task)
+{
+	return NULL;
+}
+
 static inline void ve_stop_ns(struct pid_namespace *ns) { }
 static inline void ve_exit_ns(struct pid_namespace *ns) { }
 


More information about the Devel mailing list