Currently, we try and fail to remove the fairsched node of a UUID-named
container from the kernel on stop:

  CT: 956ebfc3-3ca9-44e0-9739-ab8abbe50edc: started
  Can't remove fairsched node 1073741823 err=-2
  CT: 956ebfc3-3ca9-44e0-9739-ab8abbe50edc: stopped

We should only do that for containers created via the legacy API (vzctl
ioctl), because for UUID-named containers this is a duty of vzctl.

https://jira.sw.ru/browse/PSBM-33833

Signed-off-by: Vladimir Davydov <[email protected]>
---
 include/linux/ve.h  | 3 +++
 kernel/ve/vecalls.c | 3 ++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/include/linux/ve.h b/include/linux/ve.h
index 03e90e481082..ef15447df868 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -40,6 +40,9 @@ struct ve_struct {
        struct list_head        ve_list;
 
        envid_t                 veid;
+       bool                    legacy; /* created using the legacy API
+                                          (vzctl ioctl - see do_env_create) */
+
        unsigned int            class_id;
        struct rw_semaphore     op_sem;
        int                     is_running;
diff --git a/kernel/ve/vecalls.c b/kernel/ve/vecalls.c
index 346a070e036b..63c2ee0fd47d 100644
--- a/kernel/ve/vecalls.c
+++ b/kernel/ve/vecalls.c
@@ -447,6 +447,7 @@ static int do_env_create(envid_t veid, unsigned int flags, 
u32 class_id,
                goto err_devperms;
 
        ve = cgroup_ve(ve_cgroup);
+       ve->legacy = true;
 
        init_ve_struct(ve, class_id, data, datalen);
 
@@ -638,7 +639,7 @@ static void vzmon_stop_notifier(void *data)
 {
        struct ve_struct *ve = data;
 
-       if (ve->veid)
+       if (ve->legacy)
                fairsched_drop_node(ve->veid, 0);
 }
 
-- 
2.1.4

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to