• Tejun Heo's avatar
    cgroup: create directory before linking while creating a new cgroup · 4e139afc
    Tejun Heo authored
    While creating a new cgroup, cgroup_create() links the newly allocated
    cgroup into various places before trying to create its directory.
    Because cgroup life-cycle is tied to the vfs objects, this makes it
    impossible to use cgroup_rmdir() for rolling back creation - the
    removal logic depends on having full vfs objects.
    
    This patch moves directory creation above linking and collect linking
    operations to one place.  This allows directory creation failure to
    share error exit path with css allocation failures and any failure
    sites afterwards (to be added later) can use cgroup_rmdir() logic to
    undo creation.
    
    Note that this also makes the memory barriers around cgroup->dentry,
    which currently is misleadingly using RCU operations, unnecessary.
    This will be handled in the next patch.
    
    While at it, locking BUG_ON() on i_mutex is converted to
    lockdep_assert_held().
    
    v2: Patch originally removed %NULL dentry check in cgroup_path();
        however, Li pointed out that this patch doesn't make it
        unnecessary as ->create() may call cgroup_path().  Drop the
        change for now.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarLi Zefan <lizefan@huawei.com>
    4e139afc
cgroup.c 145 KB