Re: [PATCH] mm/slub: prevent pfmemalloc objects from entering the barn

From: Hao Li

Date: Sun Jul 19 2026 - 23:43:58 EST


On Sun, Jul 19, 2026 at 11:37:01AM +0800, hu.shengming@xxxxxxxxxx wrote:
> From: Shengming Hu <hu.shengming@xxxxxxxxxx>
>
> kmem_cache_return_sheaf() may refill a partially consumed sheaf before
> placing it in the barn. Without an explicit restriction, this refill may
> draw objects from pfmemalloc slabs and consume emergency reserves.
>
> Add __GFP_NOMEMALLOC so returned sheaves are refilled only from normal
> memory. If that fails, flush and free the sheaf instead.
>
> Signed-off-by: Shengming Hu <hu.shengming@xxxxxxxxxx>
> ---
> mm/slub.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 53b4976d3831..34f17ecbde87 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -5123,7 +5123,7 @@ void kmem_cache_return_sheaf(struct kmem_cache *s, gfp_t gfp,
> * simply flush and free it.
> */
> if (!barn || data_race(barn->nr_full) >= MAX_FULL_SHEAVES ||
> - refill_sheaf(s, sheaf, gfp)) {
> + refill_sheaf(s, sheaf, gfp | __GFP_NOMEMALLOC)) {

maybe we can add __GFP_NOWARN as this is just an refilling attempt?
refilling failure could be acceptable.

> sheaf_flush_unused(s, sheaf);
> free_empty_sheaf(s, sheaf);
> return;
> --
> 2.25.1