Re: [PATCH 08/31] kasan, page_alloc: refactor init checks in post_alloc_hook
From: Alexander Potapenko <glider@google.com>
Date: 2021-12-02 16:14:45
Also in:
linux-arm-kernel, lkml
On Tue, Nov 30, 2021 at 10:41 PM [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Andrey Konovalov <redacted> This patch separates code for zeroing memory from the code clearing tags in post_alloc_hook(). This patch is not useful by itself but makes the simplifications in the following patches easier to follow. This patch does no functional changes. Signed-off-by: Andrey Konovalov <redacted> --- mm/page_alloc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2ada09a58e4b..0561cdafce36 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c@@ -2406,19 +2406,21 @@ inline void post_alloc_hook(struct page *page, unsigned int order, kasan_alloc_pages(page, order, gfp_flags); } else { bool init = !want_init_on_free() && want_init_on_alloc(gfp_flags); + bool init_tags = init && (gfp_flags & __GFP_ZEROTAGS); kasan_unpoison_pages(page, order, init); - if (init) { - if (gfp_flags & __GFP_ZEROTAGS) { - int i; + if (init_tags) { + int i; - for (i = 0; i < 1 << order; i++) - tag_clear_highpage(page + i); - } else { - kernel_init_free_pages(page, 1 << order); - } + for (i = 0; i < 1 << order; i++) + tag_clear_highpage(page + i); + + init = false;
I find this a bit twisted and prone to breakages. Maybe just check for (init && !init_tags) below?
}
+
+ if (init)
+ kernel_init_free_pages(page, 1 << order);
}
set_page_owner(page, order, gfp_flags);
--
2.25.1-- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg