From: JP Kobryn Date: Thu, 15 May 2025 00:19:33 +0000 (-0700) Subject: cgroup: compare css to cgroup::self in helper for distingushing css X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=541a4219bd66bef56d93dbd306dc64a4d70ae99e;p=users%2Fdwmw2%2Flinux.git cgroup: compare css to cgroup::self in helper for distingushing css Adjust the implementation of css_is_cgroup() so that it compares the given css to cgroup::self. Rename the function to css_is_self() in order to reflect that. Change the existing css->ss NULL check to a warning in the true branch. Finally, adjust call sites to use the new function name. Signed-off-by: JP Kobryn Signed-off-by: Tejun Heo --- diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 1f5b0a4a33566..989c08b096912 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -347,9 +347,15 @@ static inline bool css_is_dying(struct cgroup_subsys_state *css) return css->flags & CSS_DYING; } -static inline bool css_is_cgroup(struct cgroup_subsys_state *css) +static inline bool css_is_self(struct cgroup_subsys_state *css) { - return css->ss == NULL; + if (css == &css->cgroup->self) { + /* cgroup::self should not have subsystem association */ + WARN_ON(css->ss != NULL); + return true; + } + + return false; } static inline void cgroup_get(struct cgroup *cgrp) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 83b35c22da951..ce6a60b9b5850 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1706,7 +1706,7 @@ static void css_clear_dir(struct cgroup_subsys_state *css) css->flags &= ~CSS_VISIBLE; - if (css_is_cgroup(css)) { + if (css_is_self(css)) { if (cgroup_on_dfl(cgrp)) { cgroup_addrm_files(css, cgrp, cgroup_base_files, false); @@ -1738,7 +1738,7 @@ static int css_populate_dir(struct cgroup_subsys_state *css) if (css->flags & CSS_VISIBLE) return 0; - if (css_is_cgroup(css)) { + if (css_is_self(css)) { if (cgroup_on_dfl(cgrp)) { ret = cgroup_addrm_files(css, cgrp, cgroup_base_files, true); @@ -5406,7 +5406,7 @@ static void css_free_rwork_fn(struct work_struct *work) percpu_ref_exit(&css->refcnt); - if (ss) { + if (!css_is_self(css)) { /* css free path */ struct cgroup_subsys_state *parent = css->parent; int id = css->id; @@ -5460,7 +5460,7 @@ static void css_release_work_fn(struct work_struct *work) css->flags |= CSS_RELEASED; list_del_rcu(&css->sibling); - if (ss) { + if (!css_is_self(css)) { struct cgroup *parent_cgrp; /* css release path */