Hello, On Sun, Sep 03, 2023 at 02:27:56PM +0000, Yafang Shao wrote: > static inline bool task_under_cgroup_hierarchy(struct task_struct *task, > struct cgroup *ancestor) > { > struct css_set *cset = task_css_set(task); > + struct cgroup *cgrp; > + bool ret = false; > + int ssid; > + > + if (ancestor->root == &cgrp_dfl_root) > + return cgroup_is_descendant(cset->dfl_cgrp, ancestor); > + > + for (ssid = 0; ssid < CGROUP_SUBSYS_COUNT; ssid++) { > + if (!ancestor->subsys[ssid]) > + continue; > > - return cgroup_is_descendant(cset->dfl_cgrp, ancestor); > + cgrp = task_css(task, ssid)->cgroup; > + if (!cgrp) > + continue; > + > + if (!cgroup_is_descendant(cgrp, ancestor)) > + return false; > + if (!ret) > + ret = true; > + } > + return ret; I feel ambivalent about adding support for this in cgroup1 especially given that this can only work for fd based interface which is worse than the ID based ones. Even if we're doing this, the above is definitely not what we want to do as it won't work for controller-less hierarchies like the one that systemd used to use. You'd have to lock css_set_lock and walk the cgpr_cset_links. Thanks. -- tejun