• Jaewon Kim's avatar
    page_alloc: fix invalid watermark check on a negative value · 9282012f
    Jaewon Kim authored
    There was a report that a task is waiting at the
    throttle_direct_reclaim. The pgscan_direct_throttle in vmstat was
    increasing.
    
    This is a bug where zone_watermark_fast returns true even when the free
    is very low. The commit f27ce0e1 ("page_alloc: consider highatomic
    reserve in watermark fast") changed the watermark fast to consider
    highatomic reserve. But it did not handle a negative value case which
    can be happened when reserved_highatomic pageblock is bigger than the
    actual free.
    
    If watermark is considered as ok for the negative value, allocating
    contexts for order-0 will consume all free pages without direct reclaim,
    and finally free page may become depleted except highatomic free.
    
    Then allocating contexts may fall into throttle_direct_reclaim. This
    symptom may easily happen in a system where wmark min is low and other
    reclaimers like kswapd does not make free pages quickly.
    
    Handle the negative case by using MIN.
    
    Link: https://lkml.kernel.org/r/20220725095212.25388-1-jaewon31.kim@samsung.com
    Fixes: f27ce0e1 ("page_alloc: consider highatomic reserve in watermark fast")
    Signed-off-by: default avatarJaewon Kim <jaewon31.kim@samsung.com>
    Reported-by: default avatarGyeongHwan Hong <gh21.hong@samsung.com>
    Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Yong-Taek Lee <ytk.lee@samsung.com>
    Cc: <stable@vger.kerenl.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    9282012f
page_alloc.c 265 KB