> On Apr 27, 2021, at 5:34 PM, Muneendra <muneendra.kumar@xxxxxxxxxxxx> wrote: > > Added a new function cgroup_get_from_id to retrieve the cgroup > associated with cgroup id. > Exported the same as this can be used by blk-cgorup.c > > Added function declaration of cgroup_get_from_id in cgorup.h > > This patch also exported the function cgroup_get_e_css > as this is getting used in blk-cgroup.h > > Reviewed-by: Hannes Reinecke <hare@xxxxxxx> > Signed-off-by: Muneendra <muneendra.kumar@xxxxxxxxxxxx> > > --- > v10: > No change > > v9: > Addressed the issues reported by kernel test robot > > v8: > No change > > v7: > No change > > v6: > No change > > v5: > renamed the function cgroup_get_from_kernfs_id to > cgroup_get_from_id > > v4: > No change > > v3: > Exported the cgroup_get_e_css > > v2: > New patch > --- > include/linux/cgroup.h | 6 ++++++ > kernel/cgroup/cgroup.c | 26 ++++++++++++++++++++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h > index 4f2f79de083e..d2eace88d9d1 100644 > --- a/include/linux/cgroup.h > +++ b/include/linux/cgroup.h > @@ -696,6 +696,7 @@ static inline void cgroup_kthread_ready(void) > } > > void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen); > +struct cgroup *cgroup_get_from_id(u64 id); > #else /* !CONFIG_CGROUPS */ > > struct cgroup_subsys_state; > @@ -743,6 +744,11 @@ static inline bool task_under_cgroup_hierarchy(struct task_struct *task, > > static inline void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen) > {} > + > +static inline struct cgroup *cgroup_get_from_id(u64 id) > +{ > + return NULL; > +} > #endif /* !CONFIG_CGROUPS */ > > #ifdef CONFIG_CGROUPS > diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c > index 9153b20e5cc6..20e5424a8227 100644 > --- a/kernel/cgroup/cgroup.c > +++ b/kernel/cgroup/cgroup.c > @@ -577,6 +577,7 @@ struct cgroup_subsys_state *cgroup_get_e_css(struct cgroup *cgrp, > rcu_read_unlock(); > return css; > } > +EXPORT_SYMBOL_GPL(cgroup_get_e_css); > > static void cgroup_get_live(struct cgroup *cgrp) > { > @@ -5768,6 +5769,31 @@ void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen) > kernfs_put(kn); > } > > +/* > + * cgroup_get_from_id : get the cgroup associated with cgroup id > + * @id: cgroup id > + * On success it returns the cgrp on failure it returns NULL > + */ > +struct cgroup *cgroup_get_from_id(u64 id) > +{ > + struct kernfs_node *kn; > + struct cgroup *cgrp = NULL; > + > + mutex_lock(&cgroup_mutex); > + kn = kernfs_find_and_get_node_by_id(cgrp_dfl_root.kf_root, id); > + if (!kn) > + goto out_unlock; > + > + cgrp = kn->priv; > + if (cgroup_is_dead(cgrp) || !cgroup_tryget(cgrp)) > + cgrp = NULL; > + kernfs_put(kn); > +out_unlock: > + mutex_unlock(&cgroup_mutex); > + return cgrp; > +} > +EXPORT_SYMBOL_GPL(cgroup_get_from_id); > + > /* > * proc_cgroup_show() > * - Print task's cgroup paths into seq_file, one line for each hierarchy > -- > 2.26.2 > Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx> -- Himanshu Madhani Oracle Linux Engineering