* [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
@ 2008-04-17 3:37 Li Zefan
2008-04-17 4:11 ` Andrew Morton
2008-04-17 4:18 ` Paul Menage
0 siblings, 2 replies; 13+ messages in thread
From: Li Zefan @ 2008-04-17 3:37 UTC (permalink / raw)
To: Andrew Morton
Cc: Linus Torvalds, LKML, Linux Containers, Paul Menage, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
When I ran a test program to fork mass processes and at the same time
'cat /cgroup/tasks', I got the following oops:
------------[ cut here ]------------
kernel BUG at lib/list_debug.c:72!
invalid opcode: 0000 [#1] SMP
Pid: 4178, comm: a.out Not tainted (2.6.25-rc9 #72)
...
Call Trace:
[<c044a5f9>] ? cgroup_exit+0x55/0x94
[<c0427acf>] ? do_exit+0x217/0x5ba
[<c0427ed7>] ? do_group_exit+0.65/0x7c
[<c0427efd>] ? sys_exit_group+0xf/0x11
[<c0404842>] ? syscall_call+0x7/0xb
[<c05e0000>] ? init_cyrix+0x2fa/0x479
...
EIP: [<c04df671>] list_del+0x35/0x53 SS:ESP 0068:ebc7df4
---[ end trace caffb7332252612b ]---
Fixing recursive fault but reboot is needed!
After digging into the code and debugging, I finlly found out a race
situation:
do_exit()
->cgroup_exit()
->if (!list_empty(&tsk->cg_list))
list_del(&tsk->cg_list);
cgroup_iter_start()
->cgroup_enable_task_cg_list()
->list_add(&tsk->cg_list, ..);
In this case the list won't be deleted though the process has exited.
We got two bug reports in the past, which seem to be the same bug as
this one:
http://lkml.org/lkml/2008/3/5/332
http://lkml.org/lkml/2007/10/17/224
Actually sometimes I got oops on list_del, sometimes oops on list_add.
And I can change my test program a bit to trigger other oops.
The patch has been tested both on x86_32 and x86_64.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/cgroup.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 2727f92..6d8de05 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -1722,7 +1722,12 @@ void cgroup_enable_task_cg_lists(void)
use_task_css_set_links = 1;
do_each_thread(g, p) {
task_lock(p);
- if (list_empty(&p->cg_list))
+ /*
+ * We should check if the process is exiting, otherwise
+ * it will race with cgroup_exit() in that the list
+ * entry won't be deleted though the process has exited.
+ */
+ if (!(p->flags & PF_EXITING) && list_empty(&p->cg_list))
list_add(&p->cg_list, &p->cgroups->tasks);
task_unlock(p);
} while_each_thread(g, p);
-- 1.5.4.rc3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 3:37 [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list Li Zefan
@ 2008-04-17 4:11 ` Andrew Morton
2008-04-17 4:17 ` Paul Menage
2008-04-17 4:18 ` Paul Menage
1 sibling, 1 reply; 13+ messages in thread
From: Andrew Morton @ 2008-04-17 4:11 UTC (permalink / raw)
To: Li Zefan
Cc: Linus Torvalds, LKML, Linux Containers, Paul Menage, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Thu, 17 Apr 2008 11:37:15 +0800 Li Zefan <lizf@cn.fujitsu.com> wrote:
> When I ran a test program to fork mass processes and at the same time
> 'cat /cgroup/tasks', I got the following oops:
>
> ------------[ cut here ]------------
> kernel BUG at lib/list_debug.c:72!
> invalid opcode: 0000 [#1] SMP
> Pid: 4178, comm: a.out Not tainted (2.6.25-rc9 #72)
> ...
> Call Trace:
> [<c044a5f9>] ? cgroup_exit+0x55/0x94
> [<c0427acf>] ? do_exit+0x217/0x5ba
> [<c0427ed7>] ? do_group_exit+0.65/0x7c
> [<c0427efd>] ? sys_exit_group+0xf/0x11
> [<c0404842>] ? syscall_call+0x7/0xb
> [<c05e0000>] ? init_cyrix+0x2fa/0x479
> ...
> EIP: [<c04df671>] list_del+0x35/0x53 SS:ESP 0068:ebc7df4
> ---[ end trace caffb7332252612b ]---
> Fixing recursive fault but reboot is needed!
>
> After digging into the code and debugging, I finlly found out a race
> situation:
> do_exit()
> ->cgroup_exit()
> ->if (!list_empty(&tsk->cg_list))
> list_del(&tsk->cg_list);
>
> cgroup_iter_start()
> ->cgroup_enable_task_cg_list()
> ->list_add(&tsk->cg_list, ..);
>
> In this case the list won't be deleted though the process has exited.
I don't fully understand the race. Both paths hold css_set_lock.
Can you describe it in more detail please?
> We got two bug reports in the past, which seem to be the same bug as
> this one:
> http://lkml.org/lkml/2008/3/5/332
> http://lkml.org/lkml/2007/10/17/224
>
> Actually sometimes I got oops on list_del, sometimes oops on list_add.
> And I can change my test program a bit to trigger other oops.
>
> The patch has been tested both on x86_32 and x86_64.
>
> Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
> ---
> kernel/cgroup.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/kernel/cgroup.c b/kernel/cgroup.c
> index 2727f92..6d8de05 100644
> --- a/kernel/cgroup.c
> +++ b/kernel/cgroup.c
> @@ -1722,7 +1722,12 @@ void cgroup_enable_task_cg_lists(void)
> use_task_css_set_links = 1;
> do_each_thread(g, p) {
> task_lock(p);
> - if (list_empty(&p->cg_list))
> + /*
> + * We should check if the process is exiting, otherwise
> + * it will race with cgroup_exit() in that the list
> + * entry won't be deleted though the process has exited.
> + */
> + if (!(p->flags & PF_EXITING) && list_empty(&p->cg_list))
> list_add(&p->cg_list, &p->cgroups->tasks);
> task_unlock(p);
> } while_each_thread(g, p);
Don't think I understand the fix either :(
afacit the task at *p could set PF_EXITING immediately after this code has
tested PF_EXITING and then the task at *p could proceed until we hit the
same race (whatever that is).
Perhaps taking p->sighand->siglock would fix that up, but that's just a
guess at this stage.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:11 ` Andrew Morton
@ 2008-04-17 4:17 ` Paul Menage
2008-04-17 4:59 ` Andrew Morton
0 siblings, 1 reply; 13+ messages in thread
From: Paul Menage @ 2008-04-17 4:17 UTC (permalink / raw)
To: Andrew Morton
Cc: Li Zefan, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Wed, Apr 16, 2008 at 9:11 PM, Andrew Morton
<akpm@linux-foundation.org> wrote:
>
> I don't fully understand the race. Both paths hold css_set_lock.
>
> Can you describe it in more detail please?
Task A starts exiting, passes the check for unlinking current->cg_list.
Before it completely exits task B does the very first
cgroup_iter_begin() call (via reading a cgroups tasks file) which
links all tasks in to their css_set objects via tsk->cg_list.
Then task A finishes exiting and is freed, but doesn't unlink from the cg_list.
>
> afacit the task at *p could set PF_EXITING immediately after this code has
> tested PF_EXITING and then the task at *p could proceed until we hit the
> same race (whatever that is).
The important fact there is that the task sets PF_EXITING *before* it
checks whether it needs to unlink from current->cg_list.
Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 3:37 [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list Li Zefan
2008-04-17 4:11 ` Andrew Morton
@ 2008-04-17 4:18 ` Paul Menage
2008-04-17 4:28 ` Paul Menage
2008-04-17 5:04 ` Li Zefan
1 sibling, 2 replies; 13+ messages in thread
From: Paul Menage @ 2008-04-17 4:18 UTC (permalink / raw)
To: Li Zefan
Cc: Andrew Morton, Linus Torvalds, LKML, Linux Containers,
Balbir Singh, KAMEZAWA Hiroyuki, Paul Jackson
On Wed, Apr 16, 2008 at 8:37 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
> When I ran a test program to fork mass processes and at the same time
> 'cat /cgroup/tasks', I got the following oops:
>
> ------------[ cut here ]------------
> kernel BUG at lib/list_debug.c:72!
> invalid opcode: 0000 [#1] SMP
> Pid: 4178, comm: a.out Not tainted (2.6.25-rc9 #72)
> ...
> Call Trace:
> [<c044a5f9>] ? cgroup_exit+0x55/0x94
> [<c0427acf>] ? do_exit+0x217/0x5ba
> [<c0427ed7>] ? do_group_exit+0.65/0x7c
> [<c0427efd>] ? sys_exit_group+0xf/0x11
> [<c0404842>] ? syscall_call+0x7/0xb
> [<c05e0000>] ? init_cyrix+0x2fa/0x479
> ...
> EIP: [<c04df671>] list_del+0x35/0x53 SS:ESP 0068:ebc7df4
> ---[ end trace caffb7332252612b ]---
> Fixing recursive fault but reboot is needed!
>
> After digging into the code and debugging, I finlly found out a race
> situation:
> do_exit()
> ->cgroup_exit()
> ->if (!list_empty(&tsk->cg_list))
> list_del(&tsk->cg_list);
>
> cgroup_iter_start()
> ->cgroup_enable_task_cg_list()
> ->list_add(&tsk->cg_list, ..);
>
> In this case the list won't be deleted though the process has exited.
>
> We got two bug reports in the past, which seem to be the same bug as
> this one:
> http://lkml.org/lkml/2008/3/5/332
> http://lkml.org/lkml/2007/10/17/224
Yes, that looks like it could be the same one - great. But this
corruption can only be triggered the first time you cat a tasks file
after a reboot, right? That would partly explain why it was hard to
reproduce (at least, I had trouble).
My only thought about the downside of this is that an exiting task
that gets stuck somewhere between setting PF_EXITING and calling
cgroup_exit() won't show up in its cgroup's tasks file, since we'll
enable cgroup links but skip it. I guess that's not a big deal.
Maybe it would be better to not do a cgroup_exit() until we're
unhashed, so that cgroup_enable_task_cg_list() can't find the exiting
task?
Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:18 ` Paul Menage
@ 2008-04-17 4:28 ` Paul Menage
2008-04-17 5:04 ` Li Zefan
1 sibling, 0 replies; 13+ messages in thread
From: Paul Menage @ 2008-04-17 4:28 UTC (permalink / raw)
To: Li Zefan
Cc: Andrew Morton, Linus Torvalds, LKML, Linux Containers,
Balbir Singh, KAMEZAWA Hiroyuki, Paul Jackson
On Wed, Apr 16, 2008 at 9:18 PM, Paul Menage <menage@google.com> wrote:
>
> My only thought about the downside of this is that an exiting task
> that gets stuck somewhere between setting PF_EXITING and calling
> cgroup_exit() won't show up in its cgroup's tasks file, since we'll
> enable cgroup links but skip it. I guess that's not a big deal.
>
How about this as an alternative approach? We can take advantage of
the indirection in tsk->cgroups to create an additional distinguished
css_set that indicates the task has passed the point of checking
tsk->cg_list:
- create a new css_set, called exit_css_set; it has the same cgroup
pointer set as init_css_set.
- in cgroup_exit(), set current->cgroups to &exit_css_set rather than
&init_css_set
- in cgroup_enable_task_cg_list(), ignore any task where p->cgroups ==
&exit_css_set
That way we're synchronizing directly with the task_lock()-protected
section in cgroup_exit(), rather than with the setting of PF_EXITING
at the beginning of do_exit().
Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:17 ` Paul Menage
@ 2008-04-17 4:59 ` Andrew Morton
2008-04-17 5:10 ` Li Zefan
2008-04-17 5:20 ` Paul Menage
0 siblings, 2 replies; 13+ messages in thread
From: Andrew Morton @ 2008-04-17 4:59 UTC (permalink / raw)
To: Paul Menage
Cc: Li Zefan, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Wed, 16 Apr 2008 21:17:34 -0700 "Paul Menage" <menage@google.com> wrote:
> On Wed, Apr 16, 2008 at 9:11 PM, Andrew Morton
> <akpm@linux-foundation.org> wrote:
> >
> > I don't fully understand the race. Both paths hold css_set_lock.
> >
> > Can you describe it in more detail please?
>
> Task A starts exiting, passes the check for unlinking current->cg_list.
So cgroup_exit() sees !list_empty(tsk->cg_list)
And the list_del() sets tsk->cg_list to LIST_POISON[12], which still means
!list_empty(). Or we remove that debugging code and avoid writing to
tsk->cg_list, and it _still_ is !list_empty().
> Before it completely exits task B does the very first
> cgroup_iter_begin() call (via reading a cgroups tasks file) which
> links all tasks in to their css_set objects via tsk->cg_list.
But it won't link this task, because it's !list_empty().
> Then task A finishes exiting and is freed, but doesn't unlink from the cg_list.
>
> >
> > afacit the task at *p could set PF_EXITING immediately after this code has
> > tested PF_EXITING and then the task at *p could proceed until we hit the
> > same race (whatever that is).
>
> The important fact there is that the task sets PF_EXITING *before* it
> checks whether it needs to unlink from current->cg_list.
>
> Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:18 ` Paul Menage
2008-04-17 4:28 ` Paul Menage
@ 2008-04-17 5:04 ` Li Zefan
2008-04-17 5:16 ` Andrew Morton
1 sibling, 1 reply; 13+ messages in thread
From: Li Zefan @ 2008-04-17 5:04 UTC (permalink / raw)
To: Paul Menage
Cc: Andrew Morton, Linus Torvalds, LKML, Linux Containers,
Balbir Singh, KAMEZAWA Hiroyuki, Paul Jackson
Paul Menage wrote:
> On Wed, Apr 16, 2008 at 8:37 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>> When I ran a test program to fork mass processes and at the same time
>> 'cat /cgroup/tasks', I got the following oops:
>>
>> ------------[ cut here ]------------
>> kernel BUG at lib/list_debug.c:72!
>> invalid opcode: 0000 [#1] SMP
>> Pid: 4178, comm: a.out Not tainted (2.6.25-rc9 #72)
>> ...
>> Call Trace:
>> [<c044a5f9>] ? cgroup_exit+0x55/0x94
>> [<c0427acf>] ? do_exit+0x217/0x5ba
>> [<c0427ed7>] ? do_group_exit+0.65/0x7c
>> [<c0427efd>] ? sys_exit_group+0xf/0x11
>> [<c0404842>] ? syscall_call+0x7/0xb
>> [<c05e0000>] ? init_cyrix+0x2fa/0x479
>> ...
>> EIP: [<c04df671>] list_del+0x35/0x53 SS:ESP 0068:ebc7df4
>> ---[ end trace caffb7332252612b ]---
>> Fixing recursive fault but reboot is needed!
>>
>> After digging into the code and debugging, I finlly found out a race
>> situation:
>> do_exit()
>> ->cgroup_exit()
>> ->if (!list_empty(&tsk->cg_list))
>> list_del(&tsk->cg_list);
>>
>> cgroup_iter_start()
>> ->cgroup_enable_task_cg_list()
>> ->list_add(&tsk->cg_list, ..);
>>
>> In this case the list won't be deleted though the process has exited.
>>
>> We got two bug reports in the past, which seem to be the same bug as
>> this one:
>> http://lkml.org/lkml/2008/3/5/332
>> http://lkml.org/lkml/2007/10/17/224
>
> Yes, that looks like it could be the same one - great. But this
> corruption can only be triggered the first time you cat a tasks file
> after a reboot, right? That would partly explain why it was hard to
> reproduce (at least, I had trouble).
>
Right. I was lucky to trigger this and thus knew how to reproduce.
> My only thought about the downside of this is that an exiting task
> that gets stuck somewhere between setting PF_EXITING and calling
> cgroup_exit() won't show up in its cgroup's tasks file, since we'll
> enable cgroup links but skip it. I guess that's not a big deal.
>
Agree. I think it won't be a problem.
> Maybe it would be better to not do a cgroup_exit() until we're
> unhashed, so that cgroup_enable_task_cg_list() can't find the exiting
> task?
>
> Paul
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:59 ` Andrew Morton
@ 2008-04-17 5:10 ` Li Zefan
2008-04-17 5:16 ` Andrew Morton
2008-04-17 5:20 ` Paul Menage
1 sibling, 1 reply; 13+ messages in thread
From: Li Zefan @ 2008-04-17 5:10 UTC (permalink / raw)
To: Andrew Morton
Cc: Paul Menage, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
Andrew Morton wrote:
> On Wed, 16 Apr 2008 21:17:34 -0700 "Paul Menage" <menage@google.com> wrote:
>
>> On Wed, Apr 16, 2008 at 9:11 PM, Andrew Morton
>> <akpm@linux-foundation.org> wrote:
>>> I don't fully understand the race. Both paths hold css_set_lock.
>>>
>>> Can you describe it in more detail please?
>> Task A starts exiting, passes the check for unlinking current->cg_list.
>
> So cgroup_exit() sees !list_empty(tsk->cg_list)
>
cgroup_exit() sees list_empty(tsk->cg_list), then cgroup_enable_task_cg_list()
links the task to the list, and then the task exited, so the list entry won't
get deleted.
> And the list_del() sets tsk->cg_list to LIST_POISON[12], which still means
> !list_empty(). Or we remove that debugging code and avoid writing to
> tsk->cg_list, and it _still_ is !list_empty().
>
>> Before it completely exits task B does the very first
>> cgroup_iter_begin() call (via reading a cgroups tasks file) which
>> links all tasks in to their css_set objects via tsk->cg_list.
>
> But it won't link this task, because it's !list_empty().
>
>> Then task A finishes exiting and is freed, but doesn't unlink from the cg_list.
>>
>>> afacit the task at *p could set PF_EXITING immediately after this code has
>>> tested PF_EXITING and then the task at *p could proceed until we hit the
>>> same race (whatever that is).
>> The important fact there is that the task sets PF_EXITING *before* it
>> checks whether it needs to unlink from current->cg_list.
>>
>> Paul
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 5:10 ` Li Zefan
@ 2008-04-17 5:16 ` Andrew Morton
0 siblings, 0 replies; 13+ messages in thread
From: Andrew Morton @ 2008-04-17 5:16 UTC (permalink / raw)
To: Li Zefan
Cc: Paul Menage, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Thu, 17 Apr 2008 13:10:33 +0800 Li Zefan <lizf@cn.fujitsu.com> wrote:
> Andrew Morton wrote:
> > On Wed, 16 Apr 2008 21:17:34 -0700 "Paul Menage" <menage@google.com> wrote:
> >
> >> On Wed, Apr 16, 2008 at 9:11 PM, Andrew Morton
> >> <akpm@linux-foundation.org> wrote:
> >>> I don't fully understand the race. Both paths hold css_set_lock.
> >>>
> >>> Can you describe it in more detail please?
> >> Task A starts exiting, passes the check for unlinking current->cg_list.
> >
> > So cgroup_exit() sees !list_empty(tsk->cg_list)
> >
>
> cgroup_exit() sees list_empty(tsk->cg_list), then cgroup_enable_task_cg_list()
> links the task to the list, and then the task exited, so the list entry won't
> get deleted.
OK.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 5:04 ` Li Zefan
@ 2008-04-17 5:16 ` Andrew Morton
2008-04-17 5:24 ` Paul Menage
0 siblings, 1 reply; 13+ messages in thread
From: Andrew Morton @ 2008-04-17 5:16 UTC (permalink / raw)
To: Li Zefan
Cc: Paul Menage, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Thu, 17 Apr 2008 13:04:47 +0800 Li Zefan <lizf@cn.fujitsu.com> wrote:
> >
> > Yes, that looks like it could be the same one - great. But this
> > corruption can only be triggered the first time you cat a tasks file
> > after a reboot, right? That would partly explain why it was hard to
> > reproduce (at least, I had trouble).
> >
>
> Right. I was lucky to trigger this and thus knew how to reproduce.
>
> > My only thought about the downside of this is that an exiting task
> > that gets stuck somewhere between setting PF_EXITING and calling
> > cgroup_exit() won't show up in its cgroup's tasks file, since we'll
> > enable cgroup links but skip it. I guess that's not a big deal.
> >
>
> Agree. I think it won't be a problem.
>
> > Maybe it would be better to not do a cgroup_exit() until we're
> > unhashed, so that cgroup_enable_task_cg_list() can't find the exiting
> > task?
So we won't be doing what Paul suggested?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 4:59 ` Andrew Morton
2008-04-17 5:10 ` Li Zefan
@ 2008-04-17 5:20 ` Paul Menage
1 sibling, 0 replies; 13+ messages in thread
From: Paul Menage @ 2008-04-17 5:20 UTC (permalink / raw)
To: Andrew Morton
Cc: Li Zefan, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Wed, Apr 16, 2008 at 9:59 PM, Andrew Morton
<akpm@linux-foundation.org> wrote:
> >
> > Task A starts exiting, passes the check for unlinking current->cg_list.
>
> So cgroup_exit() sees !list_empty(tsk->cg_list)
We don't actually set up the links running through tsk->cg_list to the
css_set objects until the first time someone calls cgroup_iter_begin()
- so anyone who never actually uses cgroups doesn't pay the list
management overhead. So in this case, the list is empty.
Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 5:16 ` Andrew Morton
@ 2008-04-17 5:24 ` Paul Menage
2008-04-17 5:27 ` Li Zefan
0 siblings, 1 reply; 13+ messages in thread
From: Paul Menage @ 2008-04-17 5:24 UTC (permalink / raw)
To: Andrew Morton
Cc: Li Zefan, Linus Torvalds, LKML, Linux Containers, Balbir Singh,
KAMEZAWA Hiroyuki, Paul Jackson
On Wed, Apr 16, 2008 at 10:16 PM, Andrew Morton
<akpm@linux-foundation.org> wrote:
> > > Maybe it would be better to not do a cgroup_exit() until we're
> > > unhashed, so that cgroup_enable_task_cg_list() can't find the exiting
> > > task?
>
> So we won't be doing what Paul suggested?
>
It's not as high a priority as Li's bug fix (which may be a good
candidate for 2.6.25.1) but for the future I think I'll implement this
distinguished css_set pointer for tasks that have finished
cgroup_exit(), since I think it will make the similar synchronization
in attach_task() cleaner, as well as cgroup_enable_task_cg_list().
Paul
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list
2008-04-17 5:24 ` Paul Menage
@ 2008-04-17 5:27 ` Li Zefan
0 siblings, 0 replies; 13+ messages in thread
From: Li Zefan @ 2008-04-17 5:27 UTC (permalink / raw)
To: Paul Menage
Cc: Andrew Morton, Linus Torvalds, LKML, Linux Containers,
Balbir Singh, KAMEZAWA Hiroyuki, Paul Jackson
Paul Menage wrote:
> On Wed, Apr 16, 2008 at 10:16 PM, Andrew Morton
> <akpm@linux-foundation.org> wrote:
>> > > Maybe it would be better to not do a cgroup_exit() until we're
>> > > unhashed, so that cgroup_enable_task_cg_list() can't find the exiting
>> > > task?
>>
>> So we won't be doing what Paul suggested?
>>
>
> It's not as high a priority as Li's bug fix (which may be a good
> candidate for 2.6.25.1) but for the future I think I'll implement this
> distinguished css_set pointer for tasks that have finished
> cgroup_exit(), since I think it will make the similar synchronization
> in attach_task() cleaner, as well as cgroup_enable_task_cg_list().
>
Yes, this approach sounds good to me. :)
> Paul
>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-04-17 5:28 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-17 3:37 [PATCH] cgroup: fix a race condition in manipulating tsk->cg_list Li Zefan
2008-04-17 4:11 ` Andrew Morton
2008-04-17 4:17 ` Paul Menage
2008-04-17 4:59 ` Andrew Morton
2008-04-17 5:10 ` Li Zefan
2008-04-17 5:16 ` Andrew Morton
2008-04-17 5:20 ` Paul Menage
2008-04-17 4:18 ` Paul Menage
2008-04-17 4:28 ` Paul Menage
2008-04-17 5:04 ` Li Zefan
2008-04-17 5:16 ` Andrew Morton
2008-04-17 5:24 ` Paul Menage
2008-04-17 5:27 ` Li Zefan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox