From: Seung-Woo Kim Date: Tue, 27 Feb 2024 09:18:07 +0000 (+0900) Subject: kdbus: Revert "cgroup: remove unused task_cgroup_path()" X-Git-Tag: accepted/tizen/unified/20240422.153132~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0cb791f04e9446644326ad09f22b9701ea11796d;hp=1fd25f5f88e058ef2a184e8bae3b82b749b6c67a;p=platform%2Fkernel%2Flinux-rpi.git kdbus: Revert "cgroup: remove unused task_cgroup_path()" This reverts commit d16b3af46679a1eb21652c37711a60d3d4e6b8c0. kdbus of linux-tizen-modules-source has still usage of task_cgroup_path(). To support linux-tizen-modules-source, as workaround, revert back. Change-Id: I0c943932d07ff0aa602f4a238bfa5839d74735d4 Signed-off-by: Seung-Woo Kim --- diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index b307013..567c547 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -118,6 +118,7 @@ int cgroup_rm_cftypes(struct cftype *cfts); void cgroup_file_notify(struct cgroup_file *cfile); void cgroup_file_show(struct cgroup_file *cfile, bool show); +int task_cgroup_path(struct task_struct *task, char *buf, size_t buflen); int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry); int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *tsk); diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 5165f5c..49e602a 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -2355,6 +2355,45 @@ int cgroup_path_ns(struct cgroup *cgrp, char *buf, size_t buflen, EXPORT_SYMBOL_GPL(cgroup_path_ns); /** + * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy + * @task: target task + * @buf: the buffer to write the path into + * @buflen: the length of the buffer + * + * Determine @task's cgroup on the first (the one with the lowest non-zero + * hierarchy_id) cgroup hierarchy and copy its path into @buf. This + * function grabs cgroup_mutex and shouldn't be used inside locks used by + * cgroup controller callbacks. + * + * Return value is the same as kernfs_path(). + */ +int task_cgroup_path(struct task_struct *task, char *buf, size_t buflen) +{ + struct cgroup_root *root; + struct cgroup *cgrp; + int hierarchy_id = 1; + int ret; + + cgroup_lock(); + spin_lock_irq(&css_set_lock); + + root = idr_get_next(&cgroup_hierarchy_idr, &hierarchy_id); + + if (root) { + cgrp = task_cgroup_from_root(task, root); + ret = cgroup_path_ns_locked(cgrp, buf, buflen, &init_cgroup_ns); + } else { + /* if no hierarchy exists, everyone is in "/" */ + ret = strscpy(buf, "/", buflen); + } + + spin_unlock_irq(&css_set_lock); + cgroup_unlock(); + return ret; +} +EXPORT_SYMBOL_GPL(task_cgroup_path); + +/** * cgroup_attach_lock - Lock for ->attach() * @lock_threadgroup: whether to down_write cgroup_threadgroup_rwsem *