]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mempool: factor out a mempool_adjust_gfp helper
authorChristoph Hellwig <hch@lst.de>
Thu, 13 Nov 2025 08:39:46 +0000 (09:39 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Thu, 13 Nov 2025 16:10:38 +0000 (17:10 +0100)
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>
mm/mempool.c

index 5cf59779cc3d3901e1c3c2de9610f7c925a92e28..a0718a35c34f2f139d2f6ea99f3e7ec69ed352bd 100644 (file)
@@ -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",