Linux Container Development
 help / color / mirror / Atom feed
  • [parent not found: <4EF2F095.90207@cn.fujitsu.com>]
  • * [RFC PATCH] cgroup: Remove task_lock() from cgroup_post_fork()
    @ 2011-12-22  1:18 Frederic Weisbecker
      0 siblings, 0 replies; 3+ messages in thread
    From: Frederic Weisbecker @ 2011-12-22  1:18 UTC (permalink / raw)
      To: Li Zefan, Tejun Heo
      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.
    
    NOTE: We could do something else: move threadgroup_change_end()
    before cgroup_post_fork() and keep the task_lock() which, combined
    with the css_set_lock, would be enough to synchronize against
    cgroup_task_migrate()'s change on child->cgroup and its cglist.
    Because outside that, the threadgroup lock doesn't appear to be
    needed on cgroup_post_fork().
    
    Let's debate!
    
    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 |   11 ++++++++---
     1 files changed, 8 insertions(+), 3 deletions(-)
    
    diff --git a/kernel/cgroup.c b/kernel/cgroup.c
    index 4936d88..d0dbf72 100644
    --- a/kernel/cgroup.c
    +++ b/kernel/cgroup.c
    @@ -4622,10 +4622,15 @@ 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()
    +			 */
     			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] 3+ messages in thread

    end of thread, other threads:[~2011-12-22  9:33 UTC | newest]
    
    Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1324516711-26913-1-git-send-email-fweisbec@gmail.com>
         [not found] ` <1324516711-26913-1-git-send-email-fweisbec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    2011-12-22  8:55   ` [RFC PATCH] cgroup: Remove task_lock() from cgroup_post_fork() Li Zefan
         [not found] ` <4EF2F095.90207@cn.fujitsu.com>
         [not found]   ` <4EF2F095.90207-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    2011-12-22  9:33     ` Frederic Weisbecker
    2011-12-22  1:18 Frederic Weisbecker
    

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