On 07/16/2017 10:07 PM, Tejun Heo wrote: > From: Waiman Long <longman@xxxxxxxxxx> > > Update debug controller so that it prints out debug info about thread > mode. > > 1) The relationship between proc_cset and threaded_csets are displayed. > 2) The status of being a thread root or threaded cgroup is displayed. > > This patch is extracted from Waiman's larger patch. > > Patch-originally-by: Waiman Long <longman@xxxxxxxxxx> > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > --- > kernel/cgroup/cgroup-internal.h | 2 ++ > kernel/cgroup/cgroup.c | 4 +-- > kernel/cgroup/debug.c | 58 +++++++++++++++++++++++++++++++---------- > 3 files changed, 48 insertions(+), 16 deletions(-) > > diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h > index f10eb19..c167a40 100644 > --- a/kernel/cgroup/cgroup-internal.h > +++ b/kernel/cgroup/cgroup-internal.h > @@ -153,6 +153,8 @@ static inline void get_css_set(struct css_set *cset) > > bool cgroup_ssid_enabled(int ssid); > bool cgroup_on_dfl(const struct cgroup *cgrp); > +bool cgroup_is_thread_root(struct cgroup *cgrp); > +bool cgroup_is_threaded(struct cgroup *cgrp); > > struct cgroup_root *cgroup_root_from_kf(struct kernfs_root *kf_root); > struct cgroup *task_cgroup_from_root(struct task_struct *task, > diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c > index 7097ce4..2f34020 100644 > --- a/kernel/cgroup/cgroup.c > +++ b/kernel/cgroup/cgroup.c > @@ -333,7 +333,7 @@ static bool cgroup_has_tasks(struct cgroup *cgrp) > return cgrp->nr_populated_csets; > } > > -static bool cgroup_is_threaded(struct cgroup *cgrp) > +bool cgroup_is_threaded(struct cgroup *cgrp) > { > return cgrp->dom_cgrp != cgrp; > } > @@ -372,7 +372,7 @@ static bool cgroup_can_be_thread_root(struct cgroup *cgrp) > } > > /* is @cgrp root of a threaded subtree? */ > -static bool cgroup_is_thread_root(struct cgroup *cgrp) > +bool cgroup_is_thread_root(struct cgroup *cgrp) > { > /* thread root should be a domain */ > if (cgroup_is_threaded(cgrp)) > diff --git a/kernel/cgroup/debug.c b/kernel/cgroup/debug.c > index dac46af..062904f 100644 > --- a/kernel/cgroup/debug.c > +++ b/kernel/cgroup/debug.c > @@ -114,27 +114,54 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) > { > struct cgroup_subsys_state *css = seq_css(seq); > struct cgrp_cset_link *link; > - int dead_cnt = 0, extra_refs = 0; > + int dead_cnt = 0, extra_refs = 0, threaded_csets = 0; > > spin_lock_irq(&css_set_lock); > + > + if (cgroup_is_thread_root(css->cgroup)) > + seq_puts(seq, "[thread root]\n"); > + else if (cgroup_is_threaded(css->cgroup)) > + seq_puts(seq, "[threaded]\n"); The cgroup status will not be needed anymore as you have introduced the cgroup.type control file that returns the proper information. Cheers, Longman -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html