diff --git a/fs/filescontrol.c b/fs/filescontrol.c index 44ad9ef44e20ed45919ca60d06abbeb7f6bda80b..1d2d29127fd4dcbac82c7ae8e8ce7cde09189598 100644 --- a/fs/filescontrol.c +++ b/fs/filescontrol.c @@ -293,18 +293,16 @@ struct cgroup_subsys files_cgrp_subsys = { .dfl_cftypes = files, }; +/* + * It could race against cgroup migration of current task, and + * using task_get_css() to get a valid css. + */ void files_cgroup_assign(struct files_struct *files) { - struct task_struct *tsk = current; struct cgroup_subsys_state *css; - struct cgroup *cgrp; - task_lock(tsk); - cgrp = task_cgroup(tsk, files_cgrp_id); - css = cgroup_subsys_state(cgrp, files_cgrp_id); - css_get(css); + css = task_get_css(current, files_cgrp_id); files->files_cgroup = container_of(css, struct files_cgroup, css); - task_unlock(tsk); } void files_cgroup_remove(struct files_struct *files) diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index f3e50549e41c351270df016c9f7aa5937e829cf4..ca51b2c15bcc6d0e03120856b8128ae748806eda 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -416,12 +416,6 @@ static inline void cgroup_put(struct cgroup *cgrp) css_put(&cgrp->self); } -static inline struct cgroup_subsys_state *cgroup_subsys_state( - struct cgroup *cgrp, int subsys_id) -{ - return cgrp->subsys[subsys_id]; -} - /** * task_css_set_check - obtain a task's css_set with extra access conditions * @task: the task to obtain css_set for