[v10,01/13] cgroup: Added cgroup_get_from_id

Message ID 1619562897-14062-2-git-send-email-muneendra.kumar@broadcom.com
State Superseded
Headers show
Series
  • blkcg:Support to track FC storage blk io traffic
Related show

Commit Message

Muneendra Kumar April 27, 2021, 10:34 p.m.
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@suse.de>
Signed-off-by: Muneendra <muneendra.kumar@broadcom.com>

---
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(+)

Comments

Himanshu Madhani April 30, 2021, 7:37 p.m. | #1
> On Apr 27, 2021, at 5:34 PM, Muneendra <muneendra.kumar@broadcom.com> 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@suse.de>

> Signed-off-by: Muneendra <muneendra.kumar@broadcom.com>

> 

> ---

> 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@oracle.com>


--
Himanshu Madhani	 Oracle Linux Engineering
Tejun Heo June 3, 2021, 5:13 p.m. | #2
On Wed, Apr 28, 2021 at 04:04:45AM +0530, Muneendra 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@suse.de>

> Signed-off-by: Muneendra <muneendra.kumar@broadcom.com>


Acked-by: Tejun Heo <tj@kernel.org>


Thanks.

-- 
tejun

Patch

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