lkml.org 
[lkml]   [2022]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] mm/memory_hotplug: build zonelist for managed_zone
On Thu 27-01-22 01:20:23, Wei Yang wrote:
> During memory hotplug, when online/offline a zone, we need to rebuild
> the zonelist for all node. There are two checks to decide whether a zone
> would be added to zonelist:
>
> * one in online_pages/offline_pages to decide necessity
> * one in build_zonerefs_node to do real add
>
> Currently we use different criteria at these two places, which is
> different from the original behavior.
>
> Originally during memory hotplug, zonelist is re-built when zone hasn't
> been populated. This in introduced in 'commit 6811378e7d8b ("[PATCH]
> wait_table and zonelist initializing for memory hotadd: update zonelists")'.
> And at that moment, build_zonelists_node() also use populated_zone() to
> decide whether the zone should be added to zonelist.
>
> While in 'commit 6aa303defb74 ("mm, vmscan: only allocate and reclaim
> from zones with pages managed by the buddy allocator")',
> build_zonelists_node() changed to use managed_zone() to add zonelist.
> But we still use populated_zone() to decide the necessity.
>
> This patch restore the original behavior by using the same criteria to
> add a zone in zonelist during memory hotplug.

Why?

> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> Fixes: 6aa303defb74 ("mm, vmscan: only allocate and reclaim from zones with pages managed by the buddy allocator")
> CC: Mel Gorman <mgorman@techsingularity.net>
> ---
> mm/memory_hotplug.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 2a9627dc784c..8f1906b33937 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1102,11 +1102,11 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages,
> spin_unlock_irqrestore(&zone->lock, flags);
>
> /*
> - * If this zone is not populated, then it is not in zonelist.
> + * If this zone is not managed, then it is not in zonelist.
> * This means the page allocator ignores this zone.
> * So, zonelist must be updated after online.
> */
> - if (!populated_zone(zone)) {
> + if (!managed_zone(zone)) {
> need_zonelists_rebuild = 1;
> setup_zone_pageset(zone);
> }
> @@ -1985,7 +1985,7 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages,
> /* reinitialise watermarks and update pcp limits */
> init_per_zone_wmark_min();
>
> - if (!populated_zone(zone)) {
> + if (!managed_zone(zone)) {
> zone_pcp_reset(zone);
> build_all_zonelists(NULL);
> }
> --
> 2.33.1

--
Michal Hocko
SUSE Labs

\
 
 \ /
  Last update: 2022-01-27 09:29    [W:0.085 / U:0.388 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site