lkml.org 
[lkml]   [2006]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] mm: fix mm_struct reference counting bugs in mm/oom_kill.c
    Date
    The patch below fixes some mm_struct reference counting bugs in
    badness().

    Signed-Off-By: David S. Peterson <dsp@llnl.gov>
    ---

    Index: linux-2.6.17-rc1-oom/mm/oom_kill.c
    ===================================================================
    --- linux-2.6.17-rc1-oom.orig/mm/oom_kill.c 2006-04-13 14:25:16.000000000 -0700
    +++ linux-2.6.17-rc1-oom/mm/oom_kill.c 2006-04-13 14:31:47.000000000 -0700
    @@ -47,14 +47,17 @@ unsigned long badness(struct task_struct
    {
    unsigned long points, cpu_time, run_time, s;
    struct list_head *tsk;
    + struct mm_struct *mm, *child_mm;

    - if (!p->mm)
    + mm = get_task_mm(p);
    +
    + if (mm == NULL)
    return 0;

    /*
    * The memory size of the process is the basis for the badness.
    */
    - points = p->mm->total_vm;
    + points = mm->total_vm;

    /*
    * Processes which fork a lot of child processes are likely
    @@ -67,10 +70,21 @@ unsigned long badness(struct task_struct
    list_for_each(tsk, &p->children) {
    struct task_struct *chld;
    chld = list_entry(tsk, struct task_struct, sibling);
    - if (chld->mm != p->mm && chld->mm)
    - points += chld->mm->total_vm/2 + 1;
    +
    + if (chld->mm == mm)
    + continue;
    +
    + child_mm = get_task_mm(chld);
    +
    + if (child_mm == NULL)
    + continue;
    +
    + points += child_mm->total_vm/2 + 1;
    + mmput(child_mm);
    }

    + mmput(mm);
    +
    /*
    * CPU time is in tens of seconds and run time is in thousands
    * of seconds. There is no particular reason for this other than
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-04-13 23:56    [W:2.741 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site