]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
cgroup: implement __cgroup_task_count() helper
authorRoman Gushchin <guro@fb.com>
Fri, 19 Apr 2019 17:03:02 +0000 (10:03 -0700)
committerTejun Heo <tj@kernel.org>
Fri, 19 Apr 2019 18:26:48 +0000 (11:26 -0700)
The helper is identical to the existing cgroup_task_count()
except it doesn't take the css_set_lock by itself, assuming
that the caller does.

Also, move cgroup_task_count() implementation into
kernel/cgroup/cgroup.c, as there is nothing specific to cgroup v1.

Signed-off-by: Roman Gushchin <guro@fb.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: kernel-team@fb.com
kernel/cgroup/cgroup-internal.h
kernel/cgroup/cgroup-v1.c
kernel/cgroup/cgroup.c

index 30e39f3932ad06bb3f89fe08bc11c5988bd4ea73..02c001ffe2e2d887ced5f8e213e01c3f074bfdaa 100644 (file)
@@ -240,6 +240,7 @@ int cgroup_rmdir(struct kernfs_node *kn);
 int cgroup_show_path(struct seq_file *sf, struct kernfs_node *kf_node,
                     struct kernfs_root *kf_root);
 
+int __cgroup_task_count(const struct cgroup *cgrp);
 int cgroup_task_count(const struct cgroup *cgrp);
 
 /*
index c126b34fd4ff583af524f52bf973b9734acf9b9e..68ca5de7ec2772b0f1d0ba62c4f4035c96dc922a 100644 (file)
@@ -342,22 +342,6 @@ static struct cgroup_pidlist *cgroup_pidlist_find_create(struct cgroup *cgrp,
        return l;
 }
 
-/**
- * cgroup_task_count - count the number of tasks in a cgroup.
- * @cgrp: the cgroup in question
- */
-int cgroup_task_count(const struct cgroup *cgrp)
-{
-       int count = 0;
-       struct cgrp_cset_link *link;
-
-       spin_lock_irq(&css_set_lock);
-       list_for_each_entry(link, &cgrp->cset_links, cset_link)
-               count += link->cset->nr_tasks;
-       spin_unlock_irq(&css_set_lock);
-       return count;
-}
-
 /*
  * Load a cgroup's pidarray with either procs' tgids or tasks' pids
  */
index f219c195a9a5fc41c4c562de20e78a437271eede..3008ea684aa0c31e6d92541534d1fd16ccea8374 100644 (file)
@@ -593,6 +593,39 @@ static void cgroup_get_live(struct cgroup *cgrp)
        css_get(&cgrp->self);
 }
 
+/**
+ * __cgroup_task_count - count the number of tasks in a cgroup. The caller
+ * is responsible for taking the css_set_lock.
+ * @cgrp: the cgroup in question
+ */
+int __cgroup_task_count(const struct cgroup *cgrp)
+{
+       int count = 0;
+       struct cgrp_cset_link *link;
+
+       lockdep_assert_held(&css_set_lock);
+
+       list_for_each_entry(link, &cgrp->cset_links, cset_link)
+               count += link->cset->nr_tasks;
+
+       return count;
+}
+
+/**
+ * cgroup_task_count - count the number of tasks in a cgroup.
+ * @cgrp: the cgroup in question
+ */
+int cgroup_task_count(const struct cgroup *cgrp)
+{
+       int count;
+
+       spin_lock_irq(&css_set_lock);
+       count = __cgroup_task_count(cgrp);
+       spin_unlock_irq(&css_set_lock);
+
+       return count;
+}
+
 struct cgroup_subsys_state *of_css(struct kernfs_open_file *of)
 {
        struct cgroup *cgrp = of->kn->parent->priv;