From: Christoph Hellwig Date: Thu, 13 Nov 2025 08:39:46 +0000 (+0100) Subject: mempool: factor out a mempool_adjust_gfp helper X-Git-Tag: v6.19-rc1~183^2^2~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d2492401d3cdb8e9e1276c3af5f1cd0c8a2b076;p=thirdparty%2Fkernel%2Flinux.git mempool: factor out a mempool_adjust_gfp helper Add a helper to better isolate and document the gfp flags adjustments. Signed-off-by: Christoph Hellwig Link: https://patch.msgid.link/20251113084022.1255121-6-hch@lst.de Signed-off-by: Vlastimil Babka --- diff --git a/mm/mempool.c b/mm/mempool.c index 5cf59779cc3d3..a0718a35c34f2 100644 --- a/mm/mempool.c +++ b/mm/mempool.c @@ -380,6 +380,19 @@ out: } EXPORT_SYMBOL(mempool_resize); +/* + * Adjust the gfp flags for mempool allocations, as we never want to dip into + * the global emergency reserves or retry in the page allocator. + * + * The first pass also doesn't want to go reclaim, but the next passes do, so + * return a separate subset for that first iteration. + */ +static inline gfp_t mempool_adjust_gfp(gfp_t *gfp_mask) +{ + *gfp_mask |= __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN; + return *gfp_mask & ~(__GFP_DIRECT_RECLAIM | __GFP_IO); +} + /** * mempool_alloc - allocate an element from a memory pool * @pool: pointer to the memory pool @@ -398,20 +411,14 @@ EXPORT_SYMBOL(mempool_resize); */ void *mempool_alloc_noprof(mempool_t *pool, gfp_t gfp_mask) { + gfp_t gfp_temp = mempool_adjust_gfp(&gfp_mask); void *element; unsigned long flags; wait_queue_entry_t wait; - gfp_t gfp_temp; VM_WARN_ON_ONCE(gfp_mask & __GFP_ZERO); might_alloc(gfp_mask); - gfp_mask |= __GFP_NOMEMALLOC; /* don't allocate emergency reserves */ - gfp_mask |= __GFP_NORETRY; /* don't loop in __alloc_pages */ - gfp_mask |= __GFP_NOWARN; /* failures are OK */ - - gfp_temp = gfp_mask & ~(__GFP_DIRECT_RECLAIM|__GFP_IO); - repeat_alloc: if (should_fail_ex(&fail_mempool_alloc, 1, FAULT_NOWARN)) { pr_info("forcing mempool usage for %pS\n",