All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Mandeep Singh Baines <msb@chromium.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
	Li Zefan <lizf@cn.fujitsu.com>, Tejun Heo <tj@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Containers <containers@lists.linux-foundation.org>,
	Cgroups <cgroups@vger.kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Paul Menage <paul@paulmenage.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: Q: cgroup: Questions about possible issues in cgroup locking
Date: Thu, 19 Jan 2012 16:45:22 +0100	[thread overview]
Message-ID: <20120119154522.GA14058@redhat.com> (raw)
In-Reply-To: <20120118231742.GS18166@google.com>

On 01/18, Mandeep Singh Baines wrote:
>
> Oleg Nesterov (oleg@redhat.com) wrote:
> > On 01/13, Mandeep Singh Baines wrote:
> > >
> > > Case 3: g is some other thread
> > >
> > > In this case, g MUST be current
> >
> > Why? This is not true.
>
> Here is my thinking:
>
> The terminating condition, t != g, assumes that you can get back to
> g. If g is unhashed, there is no guarantee you'll ever get back to it.
> Holding a reference does not prevent unhashing.
>
> for_each_process avoids unhashing by starting and ending at init_task
> (which can never be unhashed).

Yes,

> As you pointed out a while back, this doesn't work for:
>
> do_each_thread(g, t){
>   do_something(t);
> } while_each_thread(g, t)
>
> because g can be unhashed.
>
> However, you should be able to use while_each_thread if you are current.
> Being current would prevent 'g' from being unhashed.

Ah, I misunderstood you. Yes, sure.

> other than, do_each_thread/while_each_thread, all other callers
> of while_each_thread() are starting at current. Otherwise, how do
> you guarantee that it terminates.

Hm, still can't understand...

> I see at least one example, coredump_wait() that uses while_each_thread
> starting at current. I didn't find any cases where while_each_thread
> starts anywhere other than current or group_leader.

Probably you meant zap_threads/zap_process, not coredump_wait?

zap_process() is fine, we hold ->siglock. But zap_threads does _not_
start at current, may be you misread the g == tsk->group_leader check
in the main for_each_process() loop ? But most probably we simply
misunderstand each other a bit, see below.

However it starts at ->group_leader, so it won't suffer if we restrict
the lockless while_each_thread_rcu().

> > But I guess this doesn't matter, I think I am
> > starting to understand why our discussion was a bit confusing.
> >
> > The problem is _not_ exec/de_thread by itself. The problem is that
> > while_each_thread(g, t) can race with removing 'g' from the list.
> > IOW, list_for_each_rcu-like things assume that the head of the list
> > is "stable" but this is not true.
> >
> > And note that de_thread() does not matter in this sense, only
> > __unhash_process()->list_del_rcu(&p->thread_group) does matter.
> >
> > Now. If 'g' is the group leader, we should only worry about exec,
> > otherwise it can't disappear before other threads.
> >
> > But if it is not the group leader, it can simply exit and
> > while_each_thread(g, t) can never stop by the same reason.
> >
>
> I think we are on the same page. Your explanation is consistent with
> my understanding.
>
> Some other thoughts:
>
> I suspect that other than do_each_thread()/while_each_thread() or
> for_each_thread()/while_each_thread() where 'g' is the group_leader,
> 'g' MUST be current. So the only cases to consider are:

I didn't try to grep, but I do not know any example of the lockless
while_each_thread() which starts at current.

I guess this is the source of confusion.

> > I'll try to recheck my thinking once again, what do you think? Anything
> > else we could miss?
>
> Yeah, the ->group_leader solution seems the most promising. It seems
> correct (ignoring barriers) and should work for all supported cases:
>
> 1) when g is group_leader
> 2) when g is current

OK, thanks.

I'll try to investigate if we can remove

	leader->group_leader = tsk;

from de_thread(). In fact I already thought about this change a long
ago without any connection to while_each_thread(). This assignment
looks "assymetrical" compared to other threads we kill. But we did
have a reason (reasons?). Hopefully, the only really important reason
was already removed by 087806b1.

Oleg.


  parent reply	other threads:[~2012-01-19 15:51 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-21  3:43 Q: cgroup: Questions about possible issues in cgroup locking Frederic Weisbecker
2011-12-21  3:43 ` Frederic Weisbecker
2011-12-21 13:08 ` Oleg Nesterov
2011-12-21 13:08   ` Oleg Nesterov
2011-12-21 17:56   ` Frederic Weisbecker
2011-12-21 17:56     ` Frederic Weisbecker
2011-12-21 19:01     ` Mandeep Singh Baines
2011-12-21 19:01       ` Mandeep Singh Baines
     [not found]       ` <20111221190102.GE13529-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-12-21 19:08         ` Frederic Weisbecker
2011-12-21 19:08           ` Frederic Weisbecker
2011-12-21 19:24           ` Mandeep Singh Baines
2011-12-21 19:24             ` Mandeep Singh Baines
     [not found]             ` <20111221192413.GF13529-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-12-21 20:04               ` Frederic Weisbecker
2011-12-21 20:04             ` Frederic Weisbecker
2011-12-21 20:04               ` Frederic Weisbecker
2011-12-22 15:30               ` Oleg Nesterov
2011-12-22 15:30                 ` Oleg Nesterov
     [not found]                 ` <20111222153004.GA30522-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-04 19:36                   ` Mandeep Singh Baines
2012-01-04 19:36                 ` Mandeep Singh Baines
2012-01-04 19:36                   ` Mandeep Singh Baines
     [not found]                   ` <20120104193614.GF9511-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-06 15:23                     ` Oleg Nesterov
2012-01-06 15:23                       ` Oleg Nesterov
     [not found]                       ` <20120106152356.GA23995-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-06 18:25                         ` Mandeep Singh Baines
2012-01-06 18:25                       ` Mandeep Singh Baines
2012-01-06 18:25                         ` Mandeep Singh Baines
     [not found]                         ` <20120106182535.GJ9511-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-11 16:07                           ` Oleg Nesterov
2012-01-11 16:07                             ` Oleg Nesterov
     [not found]                             ` <20120111160730.GA24556-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-12  0:31                               ` Mandeep Singh Baines
2012-01-12  0:31                                 ` Mandeep Singh Baines
     [not found]                                 ` <20120112003102.GB9511-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-12 17:07                                   ` Oleg Nesterov
2012-01-12 17:07                                     ` Oleg Nesterov
2012-01-12 17:57                                     ` Mandeep Singh Baines
2012-01-12 17:57                                       ` Mandeep Singh Baines
     [not found]                                       ` <20120112175725.GD9511-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-13 15:20                                         ` Oleg Nesterov
2012-01-13 15:20                                           ` Oleg Nesterov
     [not found]                                           ` <20120113152010.GA19215-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-13 18:27                                             ` Mandeep Singh Baines
2012-01-13 18:27                                               ` Mandeep Singh Baines
     [not found]                                               ` <20120113182750.GD18166-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-14 17:36                                                 ` Oleg Nesterov
2012-01-14 17:36                                                   ` Oleg Nesterov
2012-01-18 23:17                                                   ` Mandeep Singh Baines
2012-01-18 23:17                                                     ` Mandeep Singh Baines
     [not found]                                                     ` <20120118231742.GS18166-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-19 15:45                                                       ` Oleg Nesterov
2012-01-19 15:45                                                     ` Oleg Nesterov [this message]
2012-01-19 18:18                                                       ` Mandeep Singh Baines
2012-01-19 18:18                                                         ` Mandeep Singh Baines
     [not found]                                                         ` <20120119181803.GU18166-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-01-20 15:06                                                           ` Oleg Nesterov
2012-01-20 15:06                                                             ` Oleg Nesterov
2012-03-20 19:34                                                       ` Oleg Nesterov
2012-03-20 19:34                                                         ` Oleg Nesterov
     [not found]                                                         ` <20120320193414.GA21277-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-03-21 18:59                                                           ` Mandeep Singh Baines
2012-03-21 18:59                                                             ` Mandeep Singh Baines
2012-03-23 17:51                                                             ` Oleg Nesterov
2012-03-23 17:51                                                               ` Oleg Nesterov
     [not found]                                                             ` <20120321185955.GK27051-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-03-23 17:51                                                               ` Oleg Nesterov
     [not found]                                                       ` <20120119154522.GA14058-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-19 18:18                                                         ` Mandeep Singh Baines
2012-03-20 19:34                                                         ` Oleg Nesterov
     [not found]                                                   ` <20120114173648.GA32543-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-18 23:17                                                     ` Mandeep Singh Baines
     [not found]                                     ` <20120112170728.GA25717-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-12 17:57                                       ` Mandeep Singh Baines
2011-12-22 15:30               ` Oleg Nesterov
2011-12-21 19:01     ` Mandeep Singh Baines
2012-02-01 16:28   ` Frederic Weisbecker
2012-02-01 16:28     ` Frederic Weisbecker
     [not found]   ` <20111221130848.GA19679-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-12-21 17:56     ` Frederic Weisbecker
2011-12-21 17:59     ` Frederic Weisbecker
2011-12-21 17:59       ` Frederic Weisbecker
2011-12-21 18:11       ` Oleg Nesterov
2011-12-21 18:11         ` Oleg Nesterov
     [not found]         ` <20111221181101.GA3092-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2011-12-21 18:23           ` Frederic Weisbecker
2011-12-21 18:23         ` Frederic Weisbecker
2011-12-21 18:23           ` Frederic Weisbecker
2012-02-01 16:28     ` Frederic Weisbecker
2011-12-21 13:08 ` Oleg Nesterov
  -- strict thread matches above, loose matches on Subject: below --
2011-12-21  3:43 Frederic Weisbecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120119154522.GA14058@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=msb@chromium.org \
    --cc=paul@paulmenage.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.