Re: [PATCH] mm, percpu: do not consider sleepable allocations atomic

Tejun Heo
2025-02-11T20:55:22Z

Hello, Michal.

On Thu, Feb 06, 2025 at 01:26:33PM +0100, Michal Hocko wrote:
...
> It has turned out that iscsid has worked around this by dropping
> PR_SET_IO_FLUSHER (https://github.com/open-iscsi/open-iscsi/pull/382)
> when scanning host. But we can do better in this case on the kernel side

FWIW, requiring GFP_KERNEL context for probing doesn't sound too crazy to
me.

> @@ -2204,7 +2204,12 @@ static void pcpu_balance_workfn(struct work_struct *work)
> * to grow other chunks. This then gives pcpu_reclaim_populated() time
> * to move fully free chunks to the active list to be freed if
> * appropriate.
> + *
> + * Enforce GFP_NOIO allocations because we have pcpu_alloc users
> + * constrained to GFP_NOIO/NOFS contexts and they could form lock
> + * dependency through pcpu_alloc_mutex
> */
> + unsigned int flags = memalloc_noio_save();

Just for context, the reason why the allocation mask support was limited to
GFP_KERNEL or not rather than supporting full range of GFP flags is because
percpu memory area expansion can involve page table allocations in the
vmalloc area which always uses GFP_KERNEL. memalloc_noio_save() masks IO
part out of that, right? It might be worthwhile to explain why we aren't
passing down GPF flags throughout and instead depending on masking.

Also, doesn't the above always prevent percpu allocations from doing fs/io
reclaims? ie. Shouldn't the masking only be used if the passed in gfp
doesn't allow fs/io?

Thanks.

--
tejun