summaryrefslogtreecommitdiffstats
path: root/kernel/cgroup/cgroup-v1.c
diff options
context:
space:
mode:
authorTejun Heo2017-01-16 01:03:41 +0100
committerTejun Heo2017-01-16 01:03:41 +0100
commitbfc2cf6f61fceac42235345081eb713329baa2a2 (patch)
tree90a4aa59cd98d338cf98cd38a94f4bf1b3abec60 /kernel/cgroup/cgroup-v1.c
parentcgroup: track migration context in cgroup_mgctx (diff)
downloadkernel-qcow2-linux-bfc2cf6f61fceac42235345081eb713329baa2a2.tar.gz
kernel-qcow2-linux-bfc2cf6f61fceac42235345081eb713329baa2a2.tar.xz
kernel-qcow2-linux-bfc2cf6f61fceac42235345081eb713329baa2a2.zip
cgroup: call subsys->*attach() only for subsystems which are actually affected by migration
Currently, subsys->*attach() callbacks are called for all subsystems which are attached to the hierarchy on which the migration is taking place. With cgroup_migrate_prepare_dst() filtering out identity migrations, v1 hierarchies can avoid spurious ->*attach() callback invocations where the source and destination csses are identical; however, this isn't enough on v2 as only a subset of the attached controllers can be affected on controller enable/disable. While spurious ->*attach() invocations aren't critically broken, they're unnecessary overhead and can lead to temporary overcharges on certain controllers. Fix it by tracking which subsystems are affected by a migration and invoking ->*attach() callbacks only on those subsystems. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Zefan Li <lizefan@huawei.com>
Diffstat (limited to 'kernel/cgroup/cgroup-v1.c')
-rw-r--r--kernel/cgroup/cgroup-v1.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 7a965f460faf..fc34bcf2329f 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -125,7 +125,7 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from)
css_task_iter_end(&it);
if (task) {
- ret = cgroup_migrate(task, false, &mgctx, to->root);
+ ret = cgroup_migrate(task, false, &mgctx);
if (!ret)
trace_cgroup_transfer_tasks(to, task, false);
put_task_struct(task);