diff options
Diffstat (limited to 'include/linux/cgroup.h')
| -rw-r--r-- | include/linux/cgroup.h | 47 |
1 files changed, 23 insertions, 24 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 22e3754f89c5..cb91b44f5f78 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -88,6 +88,7 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from); | |||
| 88 | int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); | 88 | int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); |
| 89 | int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); | 89 | int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts); |
| 90 | int cgroup_rm_cftypes(struct cftype *cfts); | 90 | int cgroup_rm_cftypes(struct cftype *cfts); |
| 91 | void cgroup_file_notify(struct cgroup_file *cfile); | ||
| 91 | 92 | ||
| 92 | char *task_cgroup_path(struct task_struct *task, char *buf, size_t buflen); | 93 | char *task_cgroup_path(struct task_struct *task, char *buf, size_t buflen); |
| 93 | int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry); | 94 | int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry); |
| @@ -119,8 +120,10 @@ struct cgroup_subsys_state *css_rightmost_descendant(struct cgroup_subsys_state | |||
| 119 | struct cgroup_subsys_state *css_next_descendant_post(struct cgroup_subsys_state *pos, | 120 | struct cgroup_subsys_state *css_next_descendant_post(struct cgroup_subsys_state *pos, |
| 120 | struct cgroup_subsys_state *css); | 121 | struct cgroup_subsys_state *css); |
| 121 | 122 | ||
| 122 | struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset); | 123 | struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset, |
| 123 | struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset); | 124 | struct cgroup_subsys_state **dst_cssp); |
| 125 | struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset, | ||
| 126 | struct cgroup_subsys_state **dst_cssp); | ||
| 124 | 127 | ||
| 125 | void css_task_iter_start(struct cgroup_subsys_state *css, | 128 | void css_task_iter_start(struct cgroup_subsys_state *css, |
| 126 | struct css_task_iter *it); | 129 | struct css_task_iter *it); |
| @@ -235,30 +238,39 @@ void css_task_iter_end(struct css_task_iter *it); | |||
| 235 | /** | 238 | /** |
| 236 | * cgroup_taskset_for_each - iterate cgroup_taskset | 239 | * cgroup_taskset_for_each - iterate cgroup_taskset |
| 237 | * @task: the loop cursor | 240 | * @task: the loop cursor |
| 241 | * @dst_css: the destination css | ||
| 238 | * @tset: taskset to iterate | 242 | * @tset: taskset to iterate |
| 239 | * | 243 | * |
| 240 | * @tset may contain multiple tasks and they may belong to multiple | 244 | * @tset may contain multiple tasks and they may belong to multiple |
| 241 | * processes. When there are multiple tasks in @tset, if a task of a | 245 | * processes. |
| 242 | * process is in @tset, all tasks of the process are in @tset. Also, all | 246 | * |
| 243 | * are guaranteed to share the same source and destination csses. | 247 | * On the v2 hierarchy, there may be tasks from multiple processes and they |
| 248 | * may not share the source or destination csses. | ||
| 249 | * | ||
| 250 | * On traditional hierarchies, when there are multiple tasks in @tset, if a | ||
| 251 | * task of a process is in @tset, all tasks of the process are in @tset. | ||
| 252 | * Also, all are guaranteed to share the same source and destination csses. | ||
| 244 | * | 253 | * |
| 245 | * Iteration is not in any specific order. | 254 | * Iteration is not in any specific order. |
| 246 | */ | 255 | */ |
| 247 | #define cgroup_taskset_for_each(task, tset) \ | 256 | #define cgroup_taskset_for_each(task, dst_css, tset) \ |
| 248 | for ((task) = cgroup_taskset_first((tset)); (task); \ | 257 | for ((task) = cgroup_taskset_first((tset), &(dst_css)); \ |
| 249 | (task) = cgroup_taskset_next((tset))) | 258 | (task); \ |
| 259 | (task) = cgroup_taskset_next((tset), &(dst_css))) | ||
| 250 | 260 | ||
| 251 | /** | 261 | /** |
| 252 | * cgroup_taskset_for_each_leader - iterate group leaders in a cgroup_taskset | 262 | * cgroup_taskset_for_each_leader - iterate group leaders in a cgroup_taskset |
| 253 | * @leader: the loop cursor | 263 | * @leader: the loop cursor |
| 264 | * @dst_css: the destination css | ||
| 254 | * @tset: takset to iterate | 265 | * @tset: takset to iterate |
| 255 | * | 266 | * |
| 256 | * Iterate threadgroup leaders of @tset. For single-task migrations, @tset | 267 | * Iterate threadgroup leaders of @tset. For single-task migrations, @tset |
| 257 | * may not contain any. | 268 | * may not contain any. |
| 258 | */ | 269 | */ |
| 259 | #define cgroup_taskset_for_each_leader(leader, tset) \ | 270 | #define cgroup_taskset_for_each_leader(leader, dst_css, tset) \ |
| 260 | for ((leader) = cgroup_taskset_first((tset)); (leader); \ | 271 | for ((leader) = cgroup_taskset_first((tset), &(dst_css)); \ |
| 261 | (leader) = cgroup_taskset_next((tset))) \ | 272 | (leader); \ |
| 273 | (leader) = cgroup_taskset_next((tset), &(dst_css))) \ | ||
| 262 | if ((leader) != (leader)->group_leader) \ | 274 | if ((leader) != (leader)->group_leader) \ |
| 263 | ; \ | 275 | ; \ |
| 264 | else | 276 | else |
| @@ -516,19 +528,6 @@ static inline void pr_cont_cgroup_path(struct cgroup *cgrp) | |||
| 516 | pr_cont_kernfs_path(cgrp->kn); | 528 | pr_cont_kernfs_path(cgrp->kn); |
| 517 | } | 529 | } |
| 518 | 530 | ||
| 519 | /** | ||
| 520 | * cgroup_file_notify - generate a file modified event for a cgroup_file | ||
| 521 | * @cfile: target cgroup_file | ||
| 522 | * | ||
| 523 | * @cfile must have been obtained by setting cftype->file_offset. | ||
| 524 | */ | ||
| 525 | static inline void cgroup_file_notify(struct cgroup_file *cfile) | ||
| 526 | { | ||
| 527 | /* might not have been created due to one of the CFTYPE selector flags */ | ||
| 528 | if (cfile->kn) | ||
| 529 | kernfs_notify(cfile->kn); | ||
| 530 | } | ||
| 531 | |||
| 532 | #else /* !CONFIG_CGROUPS */ | 531 | #else /* !CONFIG_CGROUPS */ |
| 533 | 532 | ||
| 534 | struct cgroup_subsys_state; | 533 | struct cgroup_subsys_state; |
