mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
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 <hch@lst.de> Link: https://patch.msgid.link/20251113084022.1255121-6-hch@lst.de Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
committed by
Vlastimil Babka
parent
b77fc08e39
commit
3d2492401d
21
mm/mempool.c
21
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",
|
||||
|
||||
Reference in New Issue
Block a user