mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 02:05:33 +00:00
cgroup: implement task_cgroup_path_from_hierarchy()
kdbus folks want a sane way to determine the cgroup path that a given task belongs to on a given hierarchy, which is a reasonble thing to expect from cgroup core. Implement task_cgroup_path_from_hierarchy(). v2: Dropped unnecessary NULL check on the return value of task_cgroup_from_root() as suggested by Li Zefan. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Greg Kroah-Hartman <greg@kroah.com> Acked-by: Li Zefan <lizefan@huawei.com> Cc: Kay Sievers <kay@vrfy.org> Cc: Lennart Poettering <lennart@poettering.net> Cc: Daniel Mack <daniel@zonque.org>
This commit is contained in:
parent
1a57423166
commit
857a2beb09
@ -542,6 +542,8 @@ int cgroup_is_removed(const struct cgroup *cgrp);
|
||||
bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor);
|
||||
|
||||
int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
|
||||
int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id,
|
||||
char *buf, size_t buflen);
|
||||
|
||||
int cgroup_task_count(const struct cgroup *cgrp);
|
||||
|
||||
|
@ -1827,6 +1827,38 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cgroup_path);
|
||||
|
||||
/**
|
||||
* task_cgroup_path_from_hierarchy - cgroup path of a task on a hierarchy
|
||||
* @task: target task
|
||||
* @hierarchy_id: the hierarchy to look up @task's cgroup from
|
||||
* @buf: the buffer to write the path into
|
||||
* @buflen: the length of the buffer
|
||||
*
|
||||
* Determine @task's cgroup on the hierarchy specified by @hierarchy_id and
|
||||
* copy its path into @buf. This function grabs cgroup_mutex and shouldn't
|
||||
* be used inside locks used by cgroup controller callbacks.
|
||||
*/
|
||||
int task_cgroup_path_from_hierarchy(struct task_struct *task, int hierarchy_id,
|
||||
char *buf, size_t buflen)
|
||||
{
|
||||
struct cgroupfs_root *root;
|
||||
struct cgroup *cgrp = NULL;
|
||||
int ret = -ENOENT;
|
||||
|
||||
mutex_lock(&cgroup_mutex);
|
||||
|
||||
root = idr_find(&cgroup_hierarchy_idr, hierarchy_id);
|
||||
if (root) {
|
||||
cgrp = task_cgroup_from_root(task, root);
|
||||
ret = cgroup_path(cgrp, buf, buflen);
|
||||
}
|
||||
|
||||
mutex_unlock(&cgroup_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(task_cgroup_path_from_hierarchy);
|
||||
|
||||
/*
|
||||
* Control Group taskset
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user