mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
cgroup: Replace cgroup->ancestor_ids[] with ->ancestors[]
Every cgroup knows all its ancestors through its ->ancestor_ids[]. There's
no advantage to remembering the IDs instead of the pointers directly and
this makes the array useless for finding an actual ancestor cgroup forcing
cgroup_ancestor() to iteratively walk up the hierarchy instead. Let's
replace cgroup->ancestor_ids[] with ->ancestors[] and remove the walking-up
from cgroup_ancestor().
While at it, improve comments around cgroup_root->cgrp_ancestor_storage.
This patch shouldn't cause user-visible behavior differences.
v2: Update cgroup_ancestor() to use ->ancestors[].
v3: cgroup_root->cgrp_ancestor_storage's type is updated to match
cgroup->ancestors[]. Better comments.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
@@ -384,7 +384,7 @@ struct cgroup {
|
||||
/*
|
||||
* The depth this cgroup is at. The root is at depth zero and each
|
||||
* step down the hierarchy increments the level. This along with
|
||||
* ancestor_ids[] can determine whether a given cgroup is a
|
||||
* ancestors[] can determine whether a given cgroup is a
|
||||
* descendant of another without traversing the hierarchy.
|
||||
*/
|
||||
int level;
|
||||
@@ -504,8 +504,8 @@ struct cgroup {
|
||||
/* Used to store internal freezer state */
|
||||
struct cgroup_freezer_state freezer;
|
||||
|
||||
/* ids of the ancestors at each level including self */
|
||||
u64 ancestor_ids[];
|
||||
/* All ancestors including self */
|
||||
struct cgroup *ancestors[];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -522,11 +522,15 @@ struct cgroup_root {
|
||||
/* Unique id for this hierarchy. */
|
||||
int hierarchy_id;
|
||||
|
||||
/* The root cgroup. Root is destroyed on its release. */
|
||||
/*
|
||||
* The root cgroup. The containing cgroup_root will be destroyed on its
|
||||
* release. cgrp->ancestors[0] will be used overflowing into the
|
||||
* following field. cgrp_ancestor_storage must immediately follow.
|
||||
*/
|
||||
struct cgroup cgrp;
|
||||
|
||||
/* for cgrp->ancestor_ids[0] */
|
||||
u64 cgrp_ancestor_id_storage;
|
||||
/* must follow cgrp for cgrp->ancestors[0], see above */
|
||||
struct cgroup *cgrp_ancestor_storage;
|
||||
|
||||
/* Number of cgroups in the hierarchy, used only for /proc/cgroups */
|
||||
atomic_t nr_cgrps;
|
||||
|
||||
Reference in New Issue
Block a user