Commit 3d249240 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Vlastimil Babka
Browse files

mempool: factor out a mempool_adjust_gfp helper



Add a helper to better isolate and document the gfp flags adjustments.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20251113084022.1255121-6-hch@lst.de


Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
parent b77fc08e
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -380,6 +380,19 @@ int mempool_resize(mempool_t *pool, int new_min_nr)
}
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",