|
@@ -4125,26 +4125,24 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it)
|
|
|
|
|
|
static void css_task_iter_advance(struct css_task_iter *it)
|
|
static void css_task_iter_advance(struct css_task_iter *it)
|
|
{
|
|
{
|
|
- struct list_head *l = it->task_pos;
|
|
|
|
|
|
+ struct list_head *next;
|
|
|
|
|
|
lockdep_assert_held(&css_set_lock);
|
|
lockdep_assert_held(&css_set_lock);
|
|
- WARN_ON_ONCE(!l);
|
|
|
|
-
|
|
|
|
repeat:
|
|
repeat:
|
|
/*
|
|
/*
|
|
* Advance iterator to find next entry. cset->tasks is consumed
|
|
* Advance iterator to find next entry. cset->tasks is consumed
|
|
* first and then ->mg_tasks. After ->mg_tasks, we move onto the
|
|
* first and then ->mg_tasks. After ->mg_tasks, we move onto the
|
|
* next cset.
|
|
* next cset.
|
|
*/
|
|
*/
|
|
- l = l->next;
|
|
|
|
|
|
+ next = it->task_pos->next;
|
|
|
|
|
|
- if (l == it->tasks_head)
|
|
|
|
- l = it->mg_tasks_head->next;
|
|
|
|
|
|
+ if (next == it->tasks_head)
|
|
|
|
+ next = it->mg_tasks_head->next;
|
|
|
|
|
|
- if (l == it->mg_tasks_head)
|
|
|
|
|
|
+ if (next == it->mg_tasks_head)
|
|
css_task_iter_advance_css_set(it);
|
|
css_task_iter_advance_css_set(it);
|
|
else
|
|
else
|
|
- it->task_pos = l;
|
|
|
|
|
|
+ it->task_pos = next;
|
|
|
|
|
|
/* if PROCS, skip over tasks which aren't group leaders */
|
|
/* if PROCS, skip over tasks which aren't group leaders */
|
|
if ((it->flags & CSS_TASK_ITER_PROCS) && it->task_pos &&
|
|
if ((it->flags & CSS_TASK_ITER_PROCS) && it->task_pos &&
|