[Devel] [PATCH VZ10 1/8] ve/mntns: add ve_owner to struct mnt_namespace
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Wed Apr 29 16:41:35 MSK 2026
Introduce a ve_owner field on struct mnt_namespace pointing at the ve
that owns the namespace.
This will be used to derive correct ownership of newly created mounts in
case of simultaneous creation of new ve namespace and mount namespace,
were we would like new mounts to have the new ve as an owner.
There is no change in behaviour yet: alloc_mnt_ns() still resolves the
owner from current ve via get_exec_env().
To ensure the pointer is valid, alloc_mnt_ns takes and free_mnt_ns()
drops the reference.
https://virtuozzo.atlassian.net/browse/VSTOR-129744
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
Feature: ve: ve generic structures
---
fs/mount.h | 6 ++++++
fs/namespace.c | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/fs/mount.h b/fs/mount.h
index 8e8fa47f54fd..dd1ef7e40639 100644
--- a/fs/mount.h
+++ b/fs/mount.h
@@ -4,6 +4,9 @@
#include <linux/poll.h>
#include <linux/ns_common.h>
#include <linux/fs_pin.h>
+#ifdef CONFIG_VE
+#include <linux/ve.h>
+#endif
struct mnt_namespace {
struct ns_common ns;
@@ -19,6 +22,9 @@ struct mnt_namespace {
struct rb_node mnt_ns_tree_node; /* node in the mnt_ns_tree */
refcount_t passive; /* number references not pinning @mounts */
struct list_head mntns_list;
+#ifdef CONFIG_VE
+ struct ve_struct *ve_owner;
+#endif
} __randomize_layout;
struct mnt_pcp {
diff --git a/fs/namespace.c b/fs/namespace.c
index d18aaba94131..dd10ed5007ea 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -4143,6 +4143,11 @@ static void free_mnt_ns(struct mnt_namespace *ns)
list_del(&ns->mntns_list);
spin_unlock(&all_mntns_list_lock);
+#ifdef CONFIG_VE
+ if (ns->ve_owner)
+ put_ve(ns->ve_owner);
+#endif
+
mnt_ns_tree_remove(ns);
}
@@ -4194,6 +4199,9 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns, bool a
init_waitqueue_head(&new_ns->poll);
new_ns->user_ns = get_user_ns(user_ns);
new_ns->ucounts = ucounts;
+#ifdef CONFIG_VE
+ new_ns->ve_owner = get_ve(get_exec_env());
+#endif
return new_ns;
}
--
2.53.0
More information about the Devel
mailing list