|
|
@@ -157,14 +157,13 @@ static int cgroup_root_count;
|
|
|
static DEFINE_IDR(cgroup_hierarchy_idr);
|
|
|
|
|
|
/*
|
|
|
- * Assign a monotonically increasing serial number to cgroups. It
|
|
|
- * guarantees cgroups with bigger numbers are newer than those with smaller
|
|
|
- * numbers. Also, as cgroups are always appended to the parent's
|
|
|
- * ->children list, it guarantees that sibling cgroups are always sorted in
|
|
|
- * the ascending serial number order on the list. Protected by
|
|
|
- * cgroup_mutex.
|
|
|
+ * Assign a monotonically increasing serial number to csses. It guarantees
|
|
|
+ * cgroups with bigger numbers are newer than those with smaller numbers.
|
|
|
+ * Also, as csses are always appended to the parent's ->children list, it
|
|
|
+ * guarantees that sibling csses are always sorted in the ascending serial
|
|
|
+ * number order on the list. Protected by cgroup_mutex.
|
|
|
*/
|
|
|
-static u64 cgroup_serial_nr_next = 1;
|
|
|
+static u64 css_serial_nr_next = 1;
|
|
|
|
|
|
/* This flag indicates whether tasks in the fork and exit paths should
|
|
|
* check for fork/exit handlers to call. This avoids us having to do
|
|
|
@@ -3133,7 +3132,7 @@ css_next_child(struct cgroup_subsys_state *pos_css,
|
|
|
next = list_entry_rcu(pos->self.sibling.next, struct cgroup, self.sibling);
|
|
|
} else {
|
|
|
list_for_each_entry_rcu(next, &cgrp->self.children, self.sibling)
|
|
|
- if (next->serial_nr > pos->serial_nr)
|
|
|
+ if (next->self.serial_nr > pos->self.serial_nr)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -4168,6 +4167,8 @@ static void css_release(struct percpu_ref *ref)
|
|
|
static void init_and_link_css(struct cgroup_subsys_state *css,
|
|
|
struct cgroup_subsys *ss, struct cgroup *cgrp)
|
|
|
{
|
|
|
+ lockdep_assert_held(&cgroup_mutex);
|
|
|
+
|
|
|
cgroup_get(cgrp);
|
|
|
|
|
|
memset(css, 0, sizeof(*css));
|
|
|
@@ -4175,6 +4176,7 @@ static void init_and_link_css(struct cgroup_subsys_state *css,
|
|
|
css->ss = ss;
|
|
|
INIT_LIST_HEAD(&css->sibling);
|
|
|
INIT_LIST_HEAD(&css->children);
|
|
|
+ css->serial_nr = css_serial_nr_next++;
|
|
|
|
|
|
if (cgroup_parent(cgrp)) {
|
|
|
css->parent = cgroup_css(cgroup_parent(cgrp), ss);
|
|
|
@@ -4348,7 +4350,7 @@ static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
|
|
|
*/
|
|
|
kernfs_get(kn);
|
|
|
|
|
|
- cgrp->serial_nr = cgroup_serial_nr_next++;
|
|
|
+ cgrp->self.serial_nr = css_serial_nr_next++;
|
|
|
|
|
|
/* allocation complete, commit to creation */
|
|
|
list_add_tail_rcu(&cgrp->self.sibling, &cgroup_parent(cgrp)->self.children);
|