Bug#570350: pid_ns child_reaper fixes for 2.6.26
On 06/29, Ben Hutchings wrote:
>
> On Tue, 2010-06-29 at 17:23 +0200, Oleg Nesterov wrote:
> > > @@ -182,9 +182,12 @@ void zap_pid_ns_processes(struct pid_namespace *pid_ns)
> > > rc = sys_wait4(-1, NULL, __WALL, NULL);
> > > } while (rc != -ECHILD);
> > >
> > > -
> > > - /* Child reaper for the pid namespace is going away */
> > > - pid_ns->child_reaper = NULL;
> > > + /*
> > > + * We can not clear ->child_reaper or leave it alone.
> > > + * There may by stealth EXIT_DEAD tasks on ->children,
> > > + * forget_original_parent() must move them somewhere.
> > > + */
> > > + pid_ns->child_reaper = init_pid_ns.child_reaper;
> >
> > This is correct, but the second patch
> >
> > > @@ -182,12 +182,6 @@ void zap_pid_ns_processes(struct pid_namespace *pid_ns)
> > > rc = sys_wait4(-1, NULL, __WALL, NULL);
> > > } while (rc != -ECHILD);
> > >
> > > - /*
> > > - * We can not clear ->child_reaper or leave it alone.
> > > - * There may by stealth EXIT_DEAD tasks on ->children,
> > > - * forget_original_parent() must move them somewhere.
> > > - */
> > > - pid_ns->child_reaper = init_pid_ns.child_reaper;
> >
> > Removes this code?
>
> That's what your commit 950bbabb5a804690a0201190de5c22837f72f83f did.
This commit moves this "pid_ns->child_reaper = init_pid_ns.child_reaper",
to find_new_reaper(). Like the new patch below does, this is correct.
Probably I misread your previous patch as if it just kills this
assignment.
> > I think you are right, you need these 2 commits
> >
> > 950bbabb5a804690a0201190de5c22837f72f83f
> > add0d4dfd660e9e4fd0af3eac3cad23583c9558f
> >
> > (in that order).
>
> That is the opposite of the order in which they were originally applied!
Indeed, I confused the order ;) Sorry.
> The combined diff is:
Looks correct to me.
Oleg.
Reply to: