提交 5a8638d6 编写于 作者: L Lu Jialin 提交者: Ma Wupeng

cgroup: Add cgroup1_get_from_id()

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I5ZG61

-------------------------------

Add cgroup1_get_from_id() function to help cgroupv1 get cgroup through
cgroup inode;

The patch also export cgroup_tryget_css(), which will be used later
Signed-off-by: NLu Jialin <lujialin4@huawei.com>
上级 1b709179
......@@ -790,6 +790,8 @@ static inline void cgroup_threadgroup_change_end(struct task_struct *tsk)
percpu_up_read(&cgroup_threadgroup_rwsem);
}
struct cgroup_subsys_state *cgroup_tryget_css(struct cgroup *cgrp,
struct cgroup_subsys *ss);
#else /* CONFIG_CGROUPS */
#define CGROUP_SUBSYS_COUNT 0
......
......@@ -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 *cgroup1_get_from_id(struct cgroup_root *root, u64 id);
#else /* !CONFIG_CGROUPS */
struct cgroup_subsys_state;
......
......@@ -475,7 +475,7 @@ static struct cgroup_subsys_state *cgroup_css(struct cgroup *cgrp,
* Find and get @cgrp's css assocaited with @ss. If the css doesn't exist
* or is offline, %NULL is returned.
*/
static struct cgroup_subsys_state *cgroup_tryget_css(struct cgroup *cgrp,
struct cgroup_subsys_state *cgroup_tryget_css(struct cgroup *cgrp,
struct cgroup_subsys *ss)
{
struct cgroup_subsys_state *css;
......@@ -6080,6 +6080,43 @@ int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns,
return retval;
}
struct cgroup *cgroup1_get_from_id(struct cgroup_root *root, u64 id)
{
struct kernfs_node *kn;
struct cgroup *cgrp, *root_cgrp;
kn = kernfs_find_and_get_node_by_id(root->kf_root, id);
if (!kn)
return ERR_PTR(-ENOENT);
if (kernfs_type(kn) != KERNFS_DIR) {
kernfs_put(kn);
return ERR_PTR(-ENOENT);
}
rcu_read_lock();
cgrp = rcu_dereference(*(void __rcu __force **)&kn->priv);
if (cgrp && !cgroup_tryget(cgrp))
cgrp = NULL;
rcu_read_unlock();
kernfs_put(kn);
if (!cgrp)
return ERR_PTR(-ENOENT);
spin_lock_irq(&css_set_lock);
root_cgrp = current_cgns_cgroup_from_root(root);
spin_unlock_irq(&css_set_lock);
if (!cgroup_is_descendant(cgrp, root_cgrp)) {
cgroup_put(cgrp);
return ERR_PTR(-ENOENT);
}
return cgrp;
}
/**
* cgroup_fork - initialize cgroup related fields during copy_process()
* @child: pointer to task_struct of forking parent process.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册