Re: [RFC PATCH 1/2] include/linux/gfp.h: Do not allocate pages on a offlined node

From: Nico Pache
Date: Tue Dec 07 2021 - 16:24:30 EST




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@xxxxxxxxxx>
>> Signed-off-by: Nico Pache <npache@xxxxxxxxxx>
>> ---
>> 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
>