aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/cgroup.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r--kernel/cgroup.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 648d8a8..ca8bfff 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -3980,19 +3980,23 @@ static int cgroup_clear_css_refs(struct cgroup *cgrp)
return !failed;
}
-/* checks if all of the css_sets attached to a cgroup have a refcount of 0.
- * Must be called with css_set_lock held */
+/* Checks if all of the css_sets attached to a cgroup have a refcount of 0. */
static int cgroup_css_sets_empty(struct cgroup *cgrp)
{
struct cg_cgroup_link *link;
+ int retval = 1;
+ read_lock(&css_set_lock);
list_for_each_entry(link, &cgrp->css_sets, cgrp_link_list) {
struct css_set *cg = link->cg;
- if (atomic_read(&cg->refcount) > 0)
- return 0;
+ if (atomic_read(&cg->refcount) > 0) {
+ retval = 0;
+ break;
+ }
}
+ read_unlock(&css_set_lock);
- return 1;
+ return retval;
}
static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry)