lkml.org 
[lkml]   [2017]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] mm: vmpressure: fix sending wrong events on underflow
    Date
    At the end of a window period, if the reclaimed pages
    is greater than scanned, an unsigned underflow can
    result in a huge pressure value and thus a critical event.
    Reclaimed pages is found to go higher than scanned because
    of the addition of reclaimed slab pages to reclaimed in
    shrink_node without a corresponding increment to scanned
    pages. Minchan Kim mentioned that this can also happen in
    the case of a THP page where the scanned is 1 and reclaimed
    could be 512.

    Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
    ---
    mm/vmpressure.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/mm/vmpressure.c b/mm/vmpressure.c
    index 149fdf6..3281b34 100644
    --- a/mm/vmpressure.c
    +++ b/mm/vmpressure.c
    @@ -112,8 +112,10 @@ static enum vmpressure_levels vmpressure_calc_level(unsigned long scanned,
    unsigned long reclaimed)
    {
    unsigned long scale = scanned + reclaimed;
    - unsigned long pressure;
    + unsigned long pressure = 0;

    + if (reclaimed >= scanned)
    + goto out;
    /*
    * We calculate the ratio (in percents) of how many pages were
    * scanned vs. reclaimed in a given time frame (window). Note that
    @@ -124,6 +126,7 @@ static enum vmpressure_levels vmpressure_calc_level(unsigned long scanned,
    pressure = scale - (reclaimed * scale / scanned);
    pressure = pressure * 100 / scale;

    +out:
    pr_debug("%s: %3lu (s: %lu r: %lu)\n", __func__, pressure,
    scanned, reclaimed);

    --
    QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
    member of the Code Aurora Forum, hosted by The Linux Foundation
    \
     
     \ /
      Last update: 2017-01-27 09:16    [W:2.540 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site