Linux Container Development
 help / color / mirror / Atom feed
  • [parent not found: <20111223230013.GV17084@google.com>]
  • * [PATCH v2] cgroup: Remove task_lock() from cgroup_post_fork()
    @ 2011-12-23  3:25 Frederic Weisbecker
      0 siblings, 0 replies; 4+ messages in thread
    From: Frederic Weisbecker @ 2011-12-23  3:25 UTC (permalink / raw)
      To: Tejun Heo, Li Zefan
      Cc: Frederic Weisbecker, Containers, Oleg Nesterov, LKML,
    	Mandeep Singh Baines, Cgroups, Andrew Morton, Paul Menage
    
    cgroup_post_fork() is protected between threadgroup_change_begin()
    and threadgroup_change_end() against concurrent changes of the
    child's css_set in cgroup_task_migrate(). Also the child can't
    exit and call cgroup_exit() at this stage, this means it's css_set
    can't be changed with init_css_set concurrently.
    
    For these reasons, we don't need to hold task_lock() on the child
    because it's css_set can only remain stable in this place.
    
    Let's remove the lock there.
    
    v2: Update comment to explain that we are safe against
    cgroup_exit()
    
    Signed-off-by: Frederic Weisbecker <fweisbec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    Cc: Li Zefan <lizf-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
    Cc: Containers <containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
    Cc: Cgroups <cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    Cc: Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
    Cc: Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
    Cc: Paul Menage <paul-inf54ven1CmVyaH7bEyXVA@public.gmane.org>
    Cc: Mandeep Singh Baines <msb-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
    ---
     kernel/cgroup.c |   15 ++++++++++++---
     1 files changed, 12 insertions(+), 3 deletions(-)
    
    diff --git a/kernel/cgroup.c b/kernel/cgroup.c
    index 1042b3c..0ccfc25 100644
    --- a/kernel/cgroup.c
    +++ b/kernel/cgroup.c
    @@ -4593,10 +4593,19 @@ void cgroup_post_fork(struct task_struct *child)
     {
     	if (use_task_css_set_links) {
     		write_lock(&css_set_lock);
    -		task_lock(child);
    -		if (list_empty(&child->cg_list))
    +		if (list_empty(&child->cg_list)) {
    +			/*
    +			 * It's safe to use child->cgroups without task_lock()
    +			 * here because we are protected through
    +			 * threadgroup_change_begin() against concurrent
    +			 * css_set change in cgroup_task_migrate(). Also
    +			 * the task can't exit at that point until
    +			 * wake_up_new_task() is called, so we are protected
    +			 * against cgroup_exit() setting child->cgroup to
    +			 * init_css_set.
    +			 */
     			list_add(&child->cg_list, &child->cgroups->tasks);
    -		task_unlock(child);
    +		}
     		write_unlock(&css_set_lock);
     	}
     }
    -- 
    1.7.5.4
    
    ^ permalink raw reply related	[flat|nested] 4+ messages in thread

    end of thread, other threads:[~2011-12-27 17:06 UTC | newest]
    
    Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1324610723-30080-1-git-send-email-fweisbec@gmail.com>
         [not found] ` <1324610723-30080-1-git-send-email-fweisbec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    2011-12-23 23:00   ` [PATCH v2] cgroup: Remove task_lock() from cgroup_post_fork() Tejun Heo
    2011-12-27 17:06   ` Tejun Heo
         [not found] ` <20111223230013.GV17084@google.com>
         [not found]   ` <20111223230013.GV17084-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
    2011-12-27  1:33     ` Li Zefan
    2011-12-23  3:25 Frederic Weisbecker
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox