提交 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) ...@@ -790,6 +790,8 @@ static inline void cgroup_threadgroup_change_end(struct task_struct *tsk)
percpu_up_read(&cgroup_threadgroup_rwsem); percpu_up_read(&cgroup_threadgroup_rwsem);
} }
struct cgroup_subsys_state *cgroup_tryget_css(struct cgroup *cgrp,
struct cgroup_subsys *ss);
#else /* CONFIG_CGROUPS */ #else /* CONFIG_CGROUPS */
#define CGROUP_SUBSYS_COUNT 0 #define CGROUP_SUBSYS_COUNT 0
......
...@@ -696,6 +696,7 @@ static inline void cgroup_kthread_ready(void) ...@@ -696,6 +696,7 @@ static inline void cgroup_kthread_ready(void)
} }
void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen); 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 */ #else /* !CONFIG_CGROUPS */
struct cgroup_subsys_state; struct cgroup_subsys_state;
......
...@@ -475,8 +475,8 @@ static struct cgroup_subsys_state *cgroup_css(struct cgroup *cgrp, ...@@ -475,8 +475,8 @@ 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 * Find and get @cgrp's css assocaited with @ss. If the css doesn't exist
* or is offline, %NULL is returned. * 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 *ss)
{ {
struct cgroup_subsys_state *css; struct cgroup_subsys_state *css;
...@@ -6080,6 +6080,43 @@ int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns, ...@@ -6080,6 +6080,43 @@ int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns,
return retval; 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() * cgroup_fork - initialize cgroup related fields during copy_process()
* @child: pointer to task_struct of forking parent 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.
先完成此消息的编辑!
想要评论请 注册