| From: Mel Gorman <mgorman@techsingularity.net> |
| Subject: mm/page_alloc: remove mistaken page == NULL check in rmqueue |
| Date: Fri, 24 Jun 2022 13:54:20 +0100 |
| |
| 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> |
| --- |
| |
| mm/page_alloc.c | 4 +--- |
| 1 file changed, 1 insertion(+), 3 deletions(-) |
| |
| --- a/mm/page_alloc.c~mm-page_alloc-remove-mistaken-page-==-null-check-in-rmqueue |
| +++ a/mm/page_alloc.c |
| @@ -3781,12 +3781,10 @@ struct page *rmqueue(struct zone *prefer |
| |
| page = rmqueue_buddy(preferred_zone, zone, order, alloc_flags, |
| migratetype); |
| - if (unlikely(!page)) |
| - return NULL; |
| |
| 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)); |
| } |
| _ |