Loading include/linux/cgroup.h +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct css_task_iter { struct list_head *mg_tasks_head; struct list_head *dying_tasks_head; struct list_head *cur_tasks_head; struct css_set *cur_cset; struct css_set *cur_dcset; struct task_struct *cur_task; Loading kernel/cgroup/cgroup.c +16 −7 Original line number Diff line number Diff line Loading @@ -4242,12 +4242,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it) } } while (!css_set_populated(cset) && list_empty(&cset->dying_tasks)); if (!list_empty(&cset->tasks)) if (!list_empty(&cset->tasks)) { it->task_pos = cset->tasks.next; else if (!list_empty(&cset->mg_tasks)) it->cur_tasks_head = &cset->tasks; } else if (!list_empty(&cset->mg_tasks)) { it->task_pos = cset->mg_tasks.next; else it->cur_tasks_head = &cset->mg_tasks; } else { it->task_pos = cset->dying_tasks.next; it->cur_tasks_head = &cset->dying_tasks; } it->tasks_head = &cset->tasks; it->mg_tasks_head = &cset->mg_tasks; Loading Loading @@ -4305,10 +4309,14 @@ static void css_task_iter_advance(struct css_task_iter *it) else it->task_pos = it->task_pos->next; if (it->task_pos == it->tasks_head) if (it->task_pos == it->tasks_head) { it->task_pos = it->mg_tasks_head->next; if (it->task_pos == it->mg_tasks_head) it->cur_tasks_head = it->mg_tasks_head; } if (it->task_pos == it->mg_tasks_head) { it->task_pos = it->dying_tasks_head->next; it->cur_tasks_head = it->dying_tasks_head; } if (it->task_pos == it->dying_tasks_head) css_task_iter_advance_css_set(it); } else { Loading @@ -4327,11 +4335,12 @@ static void css_task_iter_advance(struct css_task_iter *it) goto repeat; /* and dying leaders w/o live member threads */ if (!atomic_read(&task->signal->live)) if (it->cur_tasks_head == it->dying_tasks_head && !atomic_read(&task->signal->live)) goto repeat; } else { /* skip all dying ones */ if (task->flags & PF_EXITING) if (it->cur_tasks_head == it->dying_tasks_head) goto repeat; } } Loading Loading
include/linux/cgroup.h +1 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct css_task_iter { struct list_head *mg_tasks_head; struct list_head *dying_tasks_head; struct list_head *cur_tasks_head; struct css_set *cur_cset; struct css_set *cur_dcset; struct task_struct *cur_task; Loading
kernel/cgroup/cgroup.c +16 −7 Original line number Diff line number Diff line Loading @@ -4242,12 +4242,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it) } } while (!css_set_populated(cset) && list_empty(&cset->dying_tasks)); if (!list_empty(&cset->tasks)) if (!list_empty(&cset->tasks)) { it->task_pos = cset->tasks.next; else if (!list_empty(&cset->mg_tasks)) it->cur_tasks_head = &cset->tasks; } else if (!list_empty(&cset->mg_tasks)) { it->task_pos = cset->mg_tasks.next; else it->cur_tasks_head = &cset->mg_tasks; } else { it->task_pos = cset->dying_tasks.next; it->cur_tasks_head = &cset->dying_tasks; } it->tasks_head = &cset->tasks; it->mg_tasks_head = &cset->mg_tasks; Loading Loading @@ -4305,10 +4309,14 @@ static void css_task_iter_advance(struct css_task_iter *it) else it->task_pos = it->task_pos->next; if (it->task_pos == it->tasks_head) if (it->task_pos == it->tasks_head) { it->task_pos = it->mg_tasks_head->next; if (it->task_pos == it->mg_tasks_head) it->cur_tasks_head = it->mg_tasks_head; } if (it->task_pos == it->mg_tasks_head) { it->task_pos = it->dying_tasks_head->next; it->cur_tasks_head = it->dying_tasks_head; } if (it->task_pos == it->dying_tasks_head) css_task_iter_advance_css_set(it); } else { Loading @@ -4327,11 +4335,12 @@ static void css_task_iter_advance(struct css_task_iter *it) goto repeat; /* and dying leaders w/o live member threads */ if (!atomic_read(&task->signal->live)) if (it->cur_tasks_head == it->dying_tasks_head && !atomic_read(&task->signal->live)) goto repeat; } else { /* skip all dying ones */ if (task->flags & PF_EXITING) if (it->cur_tasks_head == it->dying_tasks_head) goto repeat; } } Loading