Commit 8f89140a authored by Tejun Heo's avatar Tejun Heo

cgroup: minor updates around cgroup_clear_directory()

* Rename it to cgroup_clear_dir() and make it take the pointer to the
  target cgroup instead of the the dentry.  This makes the function
  consistent with its counterpart - cgroup_populate_dir().

* Move cgroup_clear_directory() invocation from cgroup_d_remove_dir()
  to cgroup_remount() so that the function doesn't have to determine
  the cgroup pointer back from the dentry.  cgroup_d_remove_dir() now
  only deals with vfs, which is slightly cleaner.

This patch doesn't introduce any functional differences.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarLi Zefan <lizefan@huawei.com>
parent 9903883f
...@@ -957,15 +957,14 @@ static void cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft) ...@@ -957,15 +957,14 @@ static void cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft)
} }
/** /**
* cgroup_clear_directory - selective removal of base and subsystem files * cgroup_clear_dir - selective removal of base and subsystem files
* @dir: directory containing the files * @cgrp: target cgroup
* @base_files: true if the base files should be removed * @base_files: true if the base files should be removed
* @subsys_mask: mask of the subsystem ids whose files should be removed * @subsys_mask: mask of the subsystem ids whose files should be removed
*/ */
static void cgroup_clear_directory(struct dentry *dir, bool base_files, static void cgroup_clear_dir(struct cgroup *cgrp, bool base_files,
unsigned long subsys_mask) unsigned long subsys_mask)
{ {
struct cgroup *cgrp = __d_cgrp(dir);
struct cgroup_subsys *ss; struct cgroup_subsys *ss;
for_each_root_subsys(cgrp->root, ss) { for_each_root_subsys(cgrp->root, ss) {
...@@ -987,9 +986,6 @@ static void cgroup_clear_directory(struct dentry *dir, bool base_files, ...@@ -987,9 +986,6 @@ static void cgroup_clear_directory(struct dentry *dir, bool base_files,
static void cgroup_d_remove_dir(struct dentry *dentry) static void cgroup_d_remove_dir(struct dentry *dentry)
{ {
struct dentry *parent; struct dentry *parent;
struct cgroupfs_root *root = dentry->d_sb->s_fs_info;
cgroup_clear_directory(dentry, true, root->subsys_mask);
parent = dentry->d_parent; parent = dentry->d_parent;
spin_lock(&parent->d_lock); spin_lock(&parent->d_lock);
...@@ -1376,7 +1372,7 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data) ...@@ -1376,7 +1372,7 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data)
* this before rebind_subsystems, since rebind_subsystems may * this before rebind_subsystems, since rebind_subsystems may
* change this hierarchy's subsys_list. * change this hierarchy's subsys_list.
*/ */
cgroup_clear_directory(cgrp->dentry, false, removed_mask); cgroup_clear_dir(cgrp, false, removed_mask);
ret = rebind_subsystems(root, added_mask, removed_mask); ret = rebind_subsystems(root, added_mask, removed_mask);
if (ret) { if (ret) {
...@@ -4541,9 +4537,10 @@ static int cgroup_destroy_locked(struct cgroup *cgrp) ...@@ -4541,9 +4537,10 @@ static int cgroup_destroy_locked(struct cgroup *cgrp)
raw_spin_unlock(&release_list_lock); raw_spin_unlock(&release_list_lock);
/* /*
* Remove @cgrp directory. The removal puts the base ref but we * Clear and remove @cgrp directory. The removal puts the base ref
* aren't quite done with @cgrp yet, so hold onto it. * but we aren't quite done with @cgrp yet, so hold onto it.
*/ */
cgroup_clear_dir(cgrp, true, cgrp->root->subsys_mask);
dget(d); dget(d);
cgroup_d_remove_dir(d); cgroup_d_remove_dir(d);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment