[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <09c3b733-974a-8672-b267-6be1f0b6009b@redhat.com>
Date: Tue, 7 Dec 2021 16:24:23 -0500
From: Nico Pache <npache@...hat.com>
To: Michal Hocko <mhocko@...e.com>
Cc: linux-kernel@...r.kernel.org, linux-mm@...ck.org,
akpm@...ux-foundation.org, shakeelb@...gle.com,
ktkhai@...tuozzo.com, shy828301@...il.com, guro@...com,
vbabka@...e.cz, vdavydov.dev@...il.com, raquini@...hat.com,
Rafael Aquini <aquini@...hat.com>
Subject: Re: [RFC PATCH 1/2] include/linux/gfp.h: Do not allocate pages on a
offlined node
On 12/6/21 04:22, Michal Hocko wrote:
> On Sun 05-12-21 22:33:37, Nico Pache wrote:
>> We shouldn't allocate pages on a unavailable node. Add a check for this
>> in __alloc_pages_node and return NULL to avoid issues further down the
>> callchain.
>>
>> Also update the VM_WARN_ON in __alloc_pages_node which could skip this
>> warn if the gfp_mask is not GFP_THISNODE.
>
> Page allocator trusts callers to know they are doing a right thing so
> that no unnecessary branches have to be implemented and the fast path is
> really optimized for performance. Allocating from an !node_online node
> is a bug in the caller. One that is not really that hard to make
> unfortunatelly but also one that is is not that common.
Thank you for your review,
That makes sense. I will drop this patch on my second posting to avoid any
performance regression.
Cheers,
-- Nico
>
> That being said I am not really sure we want to introduce this check.
>
>> Co-developed-by: Rafael Aquini <aquini@...hat.com>
>> Signed-off-by: Nico Pache <npache@...hat.com>
>> ---
>> include/linux/gfp.h | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/linux/gfp.h b/include/linux/gfp.h
>> index b976c4177299..e7e18f6d0d9d 100644
>> --- a/include/linux/gfp.h
>> +++ b/include/linux/gfp.h
>> @@ -565,7 +565,10 @@ static inline struct page *
>> __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order)
>> {
>> VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
>> - VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
>> + VM_WARN_ON(!node_online(nid));
>> +
>> + if (!node_online(nid))
>> + return NULL;
>>
>> return __alloc_pages(gfp_mask, order, nid, NULL);
>> }
>> --
>> 2.33.1
>
Powered by blists - more mailing lists