kdbus: Revert "cgroup: remove unused task_cgroup_path()" 74/306774/3
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 27 Feb 2024 09:18:07 +0000 (18:18 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 27 Feb 2024 10:31:12 +0000 (10:31 +0000)
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>
include/linux/cgroup.h
kernel/cgroup/cgroup.c

index b307013b9c6c9a2c892644f7fba94698bb82133b..567c547cf371f24a00c4d21f206dde43b3fe5b28 100644 (file)
@@ -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);
index 5165f5ccd1b48778d7eb4f07845d4cbe059f444d..49e602ad2f441b1c695816ba91f2dad3c66782f4 100644 (file)
@@ -2354,6 +2354,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