mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
cgroup: implement cgroup_is_descendant()
A couple controllers want to determine whether two cgroups are in ancestor/descendant relationship. As it's more likely that the descendant is the primary subject of interest and there are other operations focusing on the descendants, let's ask is_descendent rather than is_ancestor. Implementation is trivial as the previous patch guarantees that all ancestors of a cgroup stay accessible as long as the cgroup is accessible. tj: Removed depth optimization, renamed from cgroup_is_ancestor(), rewrote descriptions. Signed-off-by: Li Zefan <lizefan@huawei.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
415cf07a1c
commit
78574cf981
@ -439,6 +439,7 @@ int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
|
||||
int cgroup_rm_cftypes(struct cgroup_subsys *ss, struct cftype *cfts);
|
||||
|
||||
int cgroup_is_removed(const struct cgroup *cgrp);
|
||||
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor);
|
||||
|
||||
int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
|
||||
|
||||
|
@ -276,6 +276,26 @@ inline int cgroup_is_removed(const struct cgroup *cgrp)
|
||||
return test_bit(CGRP_REMOVED, &cgrp->flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* cgroup_is_descendant - test ancestry
|
||||
* @cgrp: the cgroup to be tested
|
||||
* @ancestor: possible ancestor of @cgrp
|
||||
*
|
||||
* Test whether @cgrp is a descendant of @ancestor. It also returns %true
|
||||
* if @cgrp == @ancestor. This function is safe to call as long as @cgrp
|
||||
* and @ancestor are accessible.
|
||||
*/
|
||||
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor)
|
||||
{
|
||||
while (cgrp) {
|
||||
if (cgrp == ancestor)
|
||||
return true;
|
||||
cgrp = cgrp->parent;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cgroup_is_descendant);
|
||||
|
||||
/* bits in struct cgroupfs_root flags field */
|
||||
enum {
|
||||
ROOT_NOPREFIX, /* mounted subsystems have no named prefix */
|
||||
|
Loading…
Reference in New Issue
Block a user