| From b8fef203560c9d010799ff6499d09e9fdff7a203 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 28 Jun 2021 19:42:33 -0700 |
| Subject: mm/page_alloc: fix counting of managed_pages |
| |
| From: Liu Shixin <liushixin2@huawei.com> |
| |
| [ Upstream commit f7ec104458e00d27a190348ac3a513f3df3699a4 ] |
| |
| commit f63661566fad ("mm/page_alloc.c: clear out zone->lowmem_reserve[] if |
| the zone is empty") clears out zone->lowmem_reserve[] if zone is empty. |
| But when zone is not empty and sysctl_lowmem_reserve_ratio[i] is set to |
| zero, zone_managed_pages(zone) is not counted in the managed_pages either. |
| This is inconsistent with the description of lowmem_reserve, so fix it. |
| |
| Link: https://lkml.kernel.org/r/20210527125707.3760259-1-liushixin2@huawei.com |
| Fixes: f63661566fad ("mm/page_alloc.c: clear out zone->lowmem_reserve[] if the zone is empty") |
| Signed-off-by: Liu Shixin <liushixin2@huawei.com> |
| Reported-by: yangerkun <yangerkun@huawei.com> |
| Reviewed-by: Baoquan He <bhe@redhat.com> |
| Acked-by: David Hildenbrand <david@redhat.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| mm/page_alloc.c | 12 ++++++------ |
| 1 file changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/mm/page_alloc.c b/mm/page_alloc.c |
| index f955610fb552..e30d88efd7fb 100644 |
| --- a/mm/page_alloc.c |
| +++ b/mm/page_alloc.c |
| @@ -7798,14 +7798,14 @@ static void setup_per_zone_lowmem_reserve(void) |
| unsigned long managed_pages = 0; |
| |
| for (j = i + 1; j < MAX_NR_ZONES; j++) { |
| - if (clear) { |
| - zone->lowmem_reserve[j] = 0; |
| - } else { |
| - struct zone *upper_zone = &pgdat->node_zones[j]; |
| + struct zone *upper_zone = &pgdat->node_zones[j]; |
| + |
| + managed_pages += zone_managed_pages(upper_zone); |
| |
| - managed_pages += zone_managed_pages(upper_zone); |
| + if (clear) |
| + zone->lowmem_reserve[j] = 0; |
| + else |
| zone->lowmem_reserve[j] = managed_pages / ratio; |
| - } |
| } |
| } |
| } |
| -- |
| 2.30.2 |
| |