lkml.org 
[lkml]   [2012]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/2] mm: call complete_vfork_done() after clearing child_tid and flushing rss-counters
    On Thu, 12 Apr 2012 12:09:53 +0400
    Konstantin Khlebnikov <khlebnikov@openvz.org> wrote:

    > Child should wake ups parent from vfork() only after finishing all operations with
    > shared mm. There is no sense to use CLONE_CHILD_CLEARTID together with CLONE_VFORK,
    > but it looks more accurate now.
    >
    > ...
    >
    > --- a/kernel/fork.c
    > +++ b/kernel/fork.c
    > @@ -728,9 +728,6 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm)
    > /* Get rid of any cached register state */
    > deactivate_mm(tsk, mm);
    >
    > - if (tsk->vfork_done)
    > - complete_vfork_done(tsk);
    > -
    > /*
    > * If we're exiting normally, clear a user-space tid field if
    > * requested. We leave this alone when dying by signal, to leave
    > @@ -759,6 +756,13 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm)
    > */
    > if (mm)
    > sync_mm_rss(mm);
    > +
    > + /*
    > + * All done, finally we can wake up parent and return this mm to him.
    > + * Also kthread_stop() uses this completion for synchronization.
    > + */
    > + if (tsk->vfork_done)
    > + complete_vfork_done(tsk);
    > }

    That does look a bit racy.

    But are we really sure that the patch really does fix something?
    Because it does increase vfork() latency a tiny bit.

    I'm going to call this a patch against the fork subsystem, not the mm
    subsystem.

    I believe that this patch is unrelated to "mm: set task exit code
    before complete_vfork_done()", yes?


    \
     
     \ /
      Last update: 2012-04-13 01:43    [W:0.023 / U:33.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site