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.
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