On Wed, Apr 29, 2015 at 02:56:25PM +0300, Cyrill Gorcunov wrote:
> It was introduced for cgroups management simplification, assuming
> that it's up to the kernel to create and autodestory cgroup. With
> time it evolves that it's up to userspace tools to create and destory
> cgroups, thus @self_destruction no longer needed and we drop it off.

It does not seem you reverted it completely. E.g. cgroup_is_disposable
is still there and cgroup_is_releasable does not look exactly as it used
to. Please check out commit 38f039db6e023ac14517219ad6f674633c4e99ca
("MS/CGROUP: self-destruction (without userspace helpers)") and fix the
patch accordingly.

> 
> Signed-off-by: Cyrill Gorcunov <gorcu...@odin.com>
> CC: Vladimir Davydov <vdavy...@odin.com>
> CC: Konstantin Khorenko <khore...@odin.com>
> CC: Pavel Emelyanov <xe...@odin.com>
> CC: Andrey Vagin <ava...@odin.com>
> ---
>  include/linux/cgroup.h  |    2 -
>  kernel/bc/beancounter.c |   11 +++-------
>  kernel/cgroup.c         |   49 
> +-----------------------------------------------
>  kernel/ve/vecalls.c     |    6 +----
>  4 files changed, 8 insertions(+), 60 deletions(-)
> 
> Index: linux-pcs7.git/include/linux/cgroup.h
> ===================================================================
> --- linux-pcs7.git.orig/include/linux/cgroup.h
> +++ linux-pcs7.git/include/linux/cgroup.h
> @@ -46,7 +46,6 @@ struct cgroup_sb_opts {
>  enum cgroup_open_flags {
>       CGRP_CREAT      = 0x0001,       /* create if not found */
>       CGRP_EXCL       = 0x0002,       /* fail if already exist */
> -     CGRP_WEAK       = 0x0004,       /* arm cgroup self-destruction */
>  };
>  
>  struct vfsmount *cgroup_kernel_mount(struct cgroup_sb_opts *opts);
> @@ -190,7 +189,6 @@ enum {
>       CGRP_CPUSET_CLONE_CHILDREN,
>       /* see the comment above CGRP_ROOT_SANE_BEHAVIOR for details */
>       CGRP_SANE_BEHAVIOR,
> -     CGRP_SELF_DESTRUCTION,
>  };
>  
>  struct cgroup_name {
> Index: linux-pcs7.git/kernel/bc/beancounter.c
> ===================================================================
> --- linux-pcs7.git.orig/kernel/bc/beancounter.c
> +++ linux-pcs7.git/kernel/bc/beancounter.c
> @@ -109,8 +109,7 @@ static int ub_mem_cgroup_attach_task(str
>       struct cgroup *cg;
>       int ret;
>  
> -     cg = cgroup_kernel_open(mem_cgroup_root,
> -                             CGRP_CREAT|CGRP_WEAK, ub->ub_name);
> +     cg = cgroup_kernel_open(mem_cgroup_root, CGRP_CREAT, ub->ub_name);
>       if (IS_ERR(cg))
>               return PTR_ERR(cg);
>  
> @@ -134,8 +133,7 @@ static int ub_blkio_cgroup_attach_task(s
>       if (!ubc_ioprio)
>               return 0;
>  
> -     cg = cgroup_kernel_open(blkio_cgroup_root,
> -                             CGRP_CREAT|CGRP_WEAK, ub->ub_name);
> +     cg = cgroup_kernel_open(blkio_cgroup_root, CGRP_CREAT, ub->ub_name);
>       if (IS_ERR(cg))
>               return PTR_ERR(cg);
>  
> @@ -152,8 +150,7 @@ static int ub_cgroup_attach_task(struct
>       int ret;
>  
>       if (ub != get_ub0()) {
> -             cg = cgroup_kernel_open(ub_cgroup_root,
> -                                     CGRP_CREAT|CGRP_WEAK, ub->ub_name);
> +             cg = cgroup_kernel_open(ub_cgroup_root, CGRP_CREAT, 
> ub->ub_name);
>               if (IS_ERR(cg))
>                       return PTR_ERR(cg);
>       } else
> @@ -404,7 +401,7 @@ struct user_beancounter *get_beancounter
>               if (IS_ERR(cg))
>                       return NULL;
>               if (!cg) {
> -                     cg = cgroup_kernel_open(ub_cgroup_root, 
> CGRP_CREAT|CGRP_WEAK, name);
> +                     cg = cgroup_kernel_open(ub_cgroup_root, CGRP_CREAT, 
> name);
>                       if (IS_ERR_OR_NULL(cg))
>                               return NULL;
>                       pr_warn_once("Allocating UB with syslimits is 
> deprecated!\n");
> Index: linux-pcs7.git/kernel/cgroup.c
> ===================================================================
> --- linux-pcs7.git.orig/kernel/cgroup.c
> +++ linux-pcs7.git/kernel/cgroup.c
> @@ -258,16 +258,14 @@ EXPORT_SYMBOL_GPL(cgroup_is_descendant);
>  
>  static int cgroup_is_disposable(const struct cgroup *cgrp)
>  {
> -     return (cgrp->flags & ((1 << CGRP_NOTIFY_ON_RELEASE) |
> -                             (1 << CGRP_SELF_DESTRUCTION))) > 0;
> +     return (cgrp->flags & ((1 << CGRP_NOTIFY_ON_RELEASE))) > 0;
>  }
>  
>  static int cgroup_is_releasable(const struct cgroup *cgrp)
>  {
>       const int bits =
>               (1 << CGRP_RELEASABLE) |
> -             (1 << CGRP_NOTIFY_ON_RELEASE) |
> -             (1 << CGRP_SELF_DESTRUCTION);
> +             (1 << CGRP_NOTIFY_ON_RELEASE);
>       return (cgrp->flags & bits) > (1 << CGRP_RELEASABLE);
>  }
>  
> @@ -4010,23 +4008,6 @@ static int cgroup_clone_children_write(s
>       return 0;
>  }
>  
> -static u64 cgroup_read_self_destruction(struct cgroup *cgrp,
> -             struct cftype *cft)
> -{
> -     return test_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
> -}
> -
> -static int cgroup_write_self_destruction(struct cgroup *cgrp,
> -             struct cftype *cft, u64 val)
> -{
> -     clear_bit(CGRP_RELEASABLE, &cgrp->flags);
> -     if (val)
> -             set_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
> -     else
> -             clear_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
> -     return 0;
> -}
> -
>  /*
>   * for the common functions, 'private' gives the type of file
>   */
> @@ -4075,11 +4056,6 @@ static struct cftype files[] = {
>               .write_string = cgroup_release_agent_write,
>               .max_write_len = PATH_MAX,
>       },
> -     {
> -             .name = "self_destruction",
> -             .read_u64 = cgroup_read_self_destruction,
> -             .write_u64 = cgroup_write_self_destruction,
> -     },
>       { }     /* terminate */
>  };
>  
> @@ -4255,9 +4231,6 @@ static long cgroup_create(struct cgroup
>       if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &parent->flags))
>               set_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags);
>  
> -     if (test_bit(CGRP_SELF_DESTRUCTION, &parent->flags))
> -             set_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
> -
>       for_each_subsys(root, ss) {
>               struct cgroup_subsys_state *css;
>  
> @@ -5155,19 +5128,6 @@ static void cgroup_release_agent(struct
>               list_del_init(&cgrp->release_list);
>               raw_spin_unlock(&release_list_lock);
>  
> -             if (test_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags)) {
> -                     struct inode *parent = cgrp->dentry->d_parent->d_inode;
> -
> -                     dget(cgrp->dentry);
> -                     mutex_unlock(&cgroup_mutex);
> -                     mutex_lock_nested(&parent->i_mutex, I_MUTEX_PARENT);
> -                     vfs_rmdir(parent, cgrp->dentry);
> -                     mutex_unlock(&parent->i_mutex);
> -                     dput(cgrp->dentry);
> -                     mutex_lock(&cgroup_mutex);
> -                     goto continue_free;
> -             }
> -
>               pathbuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
>               if (!pathbuf)
>                       goto continue_free;
> @@ -5635,14 +5595,10 @@ struct cgroup *cgroup_kernel_open(struct
>                       ret = -EEXIST;
>               else if (!dentry->d_inode)
>                       ret = vfs_mkdir(parent->dentry->d_inode, dentry, 0755);
> -             else
> -                     flags &= ~CGRP_WEAK;
>       }
>       if (!ret && dentry->d_inode) {
>               cgrp = __d_cgrp(dentry);
>               atomic_inc(&cgrp->count);
> -             if (flags & CGRP_WEAK)
> -                     set_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
>       } else
>               cgrp = ret ? ERR_PTR(ret) : NULL;
>       dput(dentry);
> @@ -5696,7 +5652,6 @@ EXPORT_SYMBOL(cgroup_kernel_close);
>  
>  void cgroup_kernel_destroy(struct cgroup *cgrp)
>  {
> -     set_bit(CGRP_SELF_DESTRUCTION, &cgrp->flags);
>       set_bit(CGRP_RELEASABLE, &cgrp->flags);
>       check_for_release(cgrp);
>  }
> Index: linux-pcs7.git/kernel/ve/vecalls.c
> ===================================================================
> --- linux-pcs7.git.orig/kernel/ve/vecalls.c
> +++ linux-pcs7.git/kernel/ve/vecalls.c
> @@ -441,14 +441,12 @@ static int do_env_create(envid_t veid, u
>  
>       legacy_veid_to_name(veid, ve_name);
>  
> -     ve_cgroup = ve_cgroup_open(ve0.css.cgroup,
> -                     CGRP_CREAT|CGRP_WEAK|CGRP_EXCL, veid);
> +     ve_cgroup = ve_cgroup_open(ve0.css.cgroup, CGRP_CREAT|CGRP_EXCL, veid);
>       err = PTR_ERR(ve_cgroup);
>       if (IS_ERR(ve_cgroup))
>               goto err_ve_cgroup;
>  
> -     dev_cgroup = ve_cgroup_open(devices_root,
> -             CGRP_CREAT|CGRP_WEAK, veid);
> +     dev_cgroup = ve_cgroup_open(devices_root, CGRP_CREAT, veid);
>       err = PTR_ERR(dev_cgroup);
>       if (IS_ERR(dev_cgroup))
>               goto err_dev_cgroup;
> 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to