Commit 6fe96014 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Tejun Heo

cgroup: avoid the unnecessary list_add(dying_tasks) in cgroup_exit()

cgroup_exit() needs to do this only if the exiting task is a leader and it
is not the last live thread.  The patch doesn't use delay_group_leader(),
atomic_read(signal->live) matches the code css_task_iter_advance() more.

cgroup_release() can now check list_empty(task->cg_list) before it takes
css_set_lock and calls ss_set_skip_task_iters().
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 1805c172
...@@ -6701,8 +6701,10 @@ void cgroup_exit(struct task_struct *tsk) ...@@ -6701,8 +6701,10 @@ void cgroup_exit(struct task_struct *tsk)
WARN_ON_ONCE(list_empty(&tsk->cg_list)); WARN_ON_ONCE(list_empty(&tsk->cg_list));
cset = task_css_set(tsk); cset = task_css_set(tsk);
css_set_move_task(tsk, cset, NULL, false); css_set_move_task(tsk, cset, NULL, false);
list_add_tail(&tsk->cg_list, &cset->dying_tasks);
cset->nr_tasks--; cset->nr_tasks--;
/* matches the signal->live check in css_task_iter_advance() */
if (thread_group_leader(tsk) && atomic_read(&tsk->signal->live))
list_add_tail(&tsk->cg_list, &cset->dying_tasks);
if (dl_task(tsk)) if (dl_task(tsk))
dec_dl_tasks_cs(tsk); dec_dl_tasks_cs(tsk);
...@@ -6729,10 +6731,12 @@ void cgroup_release(struct task_struct *task) ...@@ -6729,10 +6731,12 @@ void cgroup_release(struct task_struct *task)
ss->release(task); ss->release(task);
} while_each_subsys_mask(); } while_each_subsys_mask();
spin_lock_irq(&css_set_lock); if (!list_empty(&task->cg_list)) {
css_set_skip_task_iters(task_css_set(task), task); spin_lock_irq(&css_set_lock);
list_del_init(&task->cg_list); css_set_skip_task_iters(task_css_set(task), task);
spin_unlock_irq(&css_set_lock); list_del_init(&task->cg_list);
spin_unlock_irq(&css_set_lock);
}
} }
void cgroup_free(struct task_struct *task) void cgroup_free(struct task_struct *task)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment