• Vlastimil Babka's avatar
    mm, page_alloc: fix potential false positive in __zone_watermark_ok · b050e376
    Vlastimil Babka authored
    Since commit 97a16fc8 ("mm, page_alloc: only enforce watermarks for
    order-0 allocations"), __zone_watermark_ok() check for high-order
    allocations will shortcut per-migratetype free list checks for
    ALLOC_HARDER allocations, and return true as long as there's free page
    of any migratetype.  The intention is that ALLOC_HARDER can allocate
    from MIGRATE_HIGHATOMIC free lists, while normal allocations can't.
    
    However, as a side effect, the watermark check will then also return
    true when there are pages only on the MIGRATE_ISOLATE list, or (prior to
    CMA conversion to ZONE_MOVABLE) on the MIGRATE_CMA list.  Since the
    allocation cannot actually obtain isolated pages, and might not be able
    to obtain CMA pages, this can result in a false positive.
    
    The condition should be rare and perhaps the outcome is not a fatal one.
    Still, it's better if the watermark check is correct.  There also
    shouldn't be a performance tradeoff here.
    
    Link: http://lkml.kernel.org/r/20171102125001.23708-1-vbabka@suse.cz
    Fixes: 97a16fc8 ("mm, page_alloc: only enforce watermarks for order-0 allocations")
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b050e376
page_alloc.c 214 KB