Re: [PATCH] mm: remove out-dated document of __GFP_NOFAIL
From: Vlastimil Babka (SUSE)
Date: Thu Aug 27 2026 - 04:04:21 EST
On 8/27/26 9:49 AM, Wei Yang wrote:
> On Thu, Aug 27, 2026 at 09:35:26AM +0200, Vlastimil Babka (SUSE) wrote:
>> On 8/27/26 5:05 AM, Wei Yang wrote:
>>> Commit ee040cbd6e48 ("mm/page_alloc: don't warn about large allocations
>>> with __GFP_NOFAIL") remove a warning on allocating large folio with
>>> __GFP_NOFAIL, which is adjusted by commit 903edea6c53f ("mm: warn about
>>> illegal __GFP_NOFAIL usage in a more appropriate location and manner").
>>
>> "which is adjusted by commit" sounds as 903edea6c53f came later than
>> ee040cbd6e48, but it's the opposite. Maybe say "which was placed there"?
>>
>
> Got it.
>
>>> While in that commit, it also documented this behavior which is
>>> out-dated now.
>>>
>>> Adjust the document to align to current code, and adjust the comment
>>> while at it.
>>>
>>> Signed-off-by: Wei Yang <richard.weiyang@xxxxxxxxx>
>>> Cc: Baokun Li <libaokun1@xxxxxxxxxx>
>>> ---
>>> include/linux/gfp_types.h | 2 --
>>> mm/page_alloc.c | 2 +-
>>> 2 files changed, 1 insertion(+), 3 deletions(-)
>>>
>>> diff --git a/include/linux/gfp_types.h b/include/linux/gfp_types.h
>>> index 190191411009..24fde8eb73df 100644
>>> --- a/include/linux/gfp_types.h
>>> +++ b/include/linux/gfp_types.h
>>> @@ -243,8 +243,6 @@ enum {
>>> * used only when there is no reasonable failure policy) but it is
>>> * definitely preferable to use the flag rather than opencode endless
>>> * loop around allocator.
>>> - * Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is
>>> - * not supported. Please consider using kvmalloc() instead.
>>
>> I'm not sure if we want to simply remove the lines, or rather say it's
>> discouraged (instead of not supported) and still suggest kvmalloc() if
>> possible.
>>
>
> Reasonable.
>
> As mentioned in [1], kvmalloc() maybe not suitable for some cases, I would
> suggest below change.
>
> * Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is
> * discouraged. Please consider using kvmalloc() instead if possible.
Yeah that's great! Thanks.
> Or, you prefer only s/supported/discouraged/ ?
>
> [1]: https://lore.kernel.org/all/aQTHMI3t5mNXp0M1@xxxxxxxxxxxxxxxxxxxx
>
>>> */
>>> #define __GFP_IO ((__force gfp_t)___GFP_IO)
>>> #define __GFP_FS ((__force gfp_t)___GFP_FS)
>>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>>> index ab385bc252cc..146f7e0a9462 100644
>>> --- a/mm/page_alloc.c
>>> +++ b/mm/page_alloc.c
>>> @@ -4804,7 +4804,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>>>
>>> if (unlikely(nofail)) {
>>> /*
>>> - * Also we don't support __GFP_NOFAIL without __GFP_DIRECT_RECLAIM,
>>> + * We don't support __GFP_NOFAIL without __GFP_DIRECT_RECLAIM,
>>> * otherwise, we may result in lockup.
>>> */
>>> WARN_ON_ONCE(!can_direct_reclaim);
>