On Mon, May 31, 2010 at 11:04 AM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > And, forgot to mention, I do not understand the PF_EXITING check in > attach_task_by_pid() (and some others). > > At first glance, it buys nothing. PF_EXITING can be set right after > the check. It can, but it's a benign race. Moving a non-current thread into a cgroup takes task->alloc_lock and checks for PF_EXITING before manipulating that thread's cgroup links. The exit procedure sets PF_EXITING and then (somewhat later, but guaranteed) moves current to the root cgroups while holding alloc_lock. If a task hasn't set PF_EXITING by the time we check for it, while holding alloc_lock, it can't enter the cgroup cleanup code until we've finished moving it to its new cgroup. If it has set PF_EXITING by that point, it's guaranteed to be moving itself to the root cgroups and disconnecting from various cgroups structures in the very near future, so it's fine to refuse to move it to a new cgroup. Paul _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers