mm/page_alloc: relax GFP WARN in nolock allocs

This WARN forbids setting other flags than __GFP_ACCOUNT but we
unconditionally set the ones in gfp_nolock so they are certainly fine for
the caller to set.

There are other GFP flags that are almost certainly fine to set here;
Willy noted GFP_HIGHMEM, GFP_DMA, GFP_MOVABLE and GFP_HARDWALL.  But,
nolock allocation is rather special, so be conservative to try and ensure
we have a chance to think carefully before nontrivial new usecases arise.

Link: https://lore.kernel.org/20260703-alloc-trylock-v5-6-c87b714e19d3@google.com
Signed-off-by: Brendan Jackman <jackmanb@google.com>
Suggested-by: Matthew Wilcox <willy@infradead.org>
Link: https://lore.kernel.org/linux-mm/ajS96fWbG4dzP3u3@casper.infradead.org/
Reviewed-by: Suren Baghdasaryan <surenb@google.com>
Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Acked-by: Harry Yoo (Oracle) <harry@kernel.org>
Acked-by: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Brendan Jackman 2026-07-03 12:31:46 +00:00 committed by Andrew Morton
parent 2fc4c1d51d
commit ba26999e7c

View File

@ -5355,7 +5355,8 @@ struct page *__alloc_frozen_pages_noprof(gfp_t gfp, unsigned int order,
return NULL;
if (alloc_flags & ALLOC_NOLOCK) {
VM_WARN_ON_ONCE(gfp & ~__GFP_ACCOUNT);
/* Certain other flags could be supported later if needed. */
VM_WARN_ON_ONCE(gfp & ~(__GFP_ACCOUNT | gfp_nolock));
if (!alloc_nolock_allowed())
return NULL;
gfp |= gfp_nolock;