On 10/01/25 at 09:26pm, Uladzislau Rezki (Sony) wrote:
> might_alloc() catches invalid blocking allocations in contexts
> where sleeping is not allowed.
>
> However when PF_MEMALLOC is set, the page allocator already skips
> reclaim and other blocking paths. In such cases, a blocking gfp_mask
> does not actually lead to blocking, so triggering might_alloc() splats
> is misleading.
>
> Adjust might_alloc() to skip warnings when the current task has
> PF_MEMALLOC set, matching the allocator's actual blocking behaviour.
>
> Acked-by: Michal Hocko <mhocko@suse.com>
> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> ---
> include/linux/sched/mm.h | 3 +++
> 1 file changed, 3 insertions(+)
Reviewed-by: Baoquan He <bhe@redhat.com>
>
> diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h
> index 0232d983b715..a74582aed747 100644
> --- a/include/linux/sched/mm.h
> +++ b/include/linux/sched/mm.h
> @@ -318,6 +318,9 @@ static inline void might_alloc(gfp_t gfp_mask)
> fs_reclaim_acquire(gfp_mask);
> fs_reclaim_release(gfp_mask);
>
> + if (current->flags & PF_MEMALLOC)
> + return;
> +
> might_sleep_if(gfpflags_allow_blocking(gfp_mask));
> }
>
> --
> 2.47.3
>