UPSTREAM: mm/page_alloc: remove mistaken page == NULL check in rmqueue
If a page allocation fails, the ZONE_BOOSTER_WATERMARK should be tested, cleared and kswapd woken whether the allocation attempt was via the PCP or directly via the buddy list. Remove the page == NULL so the ZONE_BOOSTED_WATERMARK bit is checked unconditionally. As it is unlikely that ZONE_BOOSTED_WATERMARK is set, mark the branch accordingly. Link: https://lkml.kernel.org/r/20220624125423.6126-5-mgorman@techsingularity.net Signed-off-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Vlastimil Babka <vbabka@suse.cz> Tested-by: Yu Zhao <yuzhao@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Minchan Kim <minchan@kernel.org> Cc: Nicolas Saenz Julienne <nsaenzju@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Bug: 230899966 (cherry picked from commit e2a66c21b774a4e8d0079089fafdc30a31414d40) Change-Id: Id055338655891a429674655e06872d4c88ac9047 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
committed by
Suren Baghdasaryan
parent
30888d2792
commit
bd093f8791
@@ -3860,14 +3860,12 @@ struct page *rmqueue(struct zone *preferred_zone,
|
||||
WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1));
|
||||
page = rmqueue_buddy(preferred_zone, zone, order, alloc_flags,
|
||||
migratetype);
|
||||
if (unlikely(!page))
|
||||
return NULL;
|
||||
trace_android_vh_rmqueue(preferred_zone, zone, order,
|
||||
gfp_flags, alloc_flags, migratetype);
|
||||
|
||||
out:
|
||||
/* Separate test+clear to avoid unnecessary atomics */
|
||||
if (test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags)) {
|
||||
if (unlikely(test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags))) {
|
||||
clear_bit(ZONE_BOOSTED_WATERMARK, &zone->flags);
|
||||
wakeup_kswapd(zone, 0, 0, zone_idx(zone));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user