On 12/13/2017 09:10 PM, Tejun Heo wrote: Hi TJ, > Hello, Prateek. > > On Wed, Dec 13, 2017 at 07:58:24PM +0530, Prateek Sood wrote: >> Did you mean something like below. If not then could you >> please share a patch for this problem in >> cgroup_transfer_tasks(). > > Oh we surely can add a new iterator but we can just count in > cgroup_transfer_tasks() too, right? I did not get what you meant by this. Could you please share a patch for this. > > Thanks. > Following are two ways to improve cgroup_transfer_tasks(). In both cases task in PF_EXITING state would be left in source cgroup. It would be removed from cgroup_exit() in exit path. diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index 024085d..e2bdcdb 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -123,7 +123,10 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from) */ do { css_task_iter_start(&from->self, 0, &it); - task = css_task_iter_next(&it); + do { + task = css_task_iter_next(&it); + } while (task && (task & PF_EXITING)) + if (task) get_task_struct(task); css_task_iter_end(&it); ----------------------------8<--------------------------------- diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index 024085d..843b8bb 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -121,12 +121,11 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from) * Migrate tasks one-by-one until @from is empty. This fails iff * ->can_attach() fails. */ + css_task_iter_start(&from->self, 0, &it); do { - css_task_iter_start(&from->self, 0, &it); task = css_task_iter_next(&it); if (task) get_task_struct(task); - css_task_iter_end(&it); if (task) { ret = cgroup_migrate(task, false, &mgctx); @@ -135,6 +134,7 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from) put_task_struct(task); } } while (task && !ret); + css_task_iter_end(&it); out_err: cgroup_migrate_finish(&mgctx); percpu_up_write(&cgroup_threadgroup_rwsem); Thanks -- Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html