summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2024-02-27 18:18:07 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2024-02-27 10:31:12 +0000
commit0cb791f04e9446644326ad09f22b9701ea11796d (patch)
tree0712163c8fa786a09c93f4eeaa3e48faa35637c1
parent1fd25f5f88e058ef2a184e8bae3b82b749b6c67a (diff)
downloadlinux-rpi-0cb791f04e9446644326ad09f22b9701ea11796d.tar.gz
linux-rpi-0cb791f04e9446644326ad09f22b9701ea11796d.tar.bz2
linux-rpi-0cb791f04e9446644326ad09f22b9701ea11796d.zip
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 <sw0312.kim@samsung.com>
-rw-r--r--include/linux/cgroup.h1
-rw-r--r--kernel/cgroup/cgroup.c39
2 files changed, 40 insertions, 0 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index b307013b9c6c..567c547cf371 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 5165f5ccd1b4..49e602ad2f44 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
*