Re: [PATCH v2 2/2] xarray: honor XA_FLAGS_ACCOUNT in xas_split_alloc()

"Lorenzo Stoakes (ARM)" <[email protected]> Sat, 1 Aug 2026 10:38:42 +0100
Newsgroups org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <am2-HmShC6VXP_-G@lucifer>
On Thu, Jul 30, 2026 at 10:18:01PM -0400, Zi Yan wrote:
> XArray operations that allocate xa_nodes, such as xas_nomem() and
> xas_alloc(), add __GFP_ACCOUNT when the array has XA_FLAGS_ACCOUNT set.
> This charges the allocated memory and avoids the workingset convergence
> issue described by commit 7b785645e8f13 ("mm: fix page cache convergence
> regression").
>
> xas_split_alloc() does not have that flag. Add it when necessary.

Nit but maybe 'split' rather than 'have'?

>
> Fixes: 6b24ca4a1a8d4 ("mm: Use multi-index entries in the page cache")

Cc: stable?

> Signed-off-by: Zi Yan <[email protected]>

Makes sense to me so:

Reviewed-by: Lorenzo Stoakes (ARM) <[email protected]>

> ---
>  lib/xarray.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/lib/xarray.c b/lib/xarray.c
> index 9a8b4916540cf..bfe7bef80f34e 100644
> --- a/lib/xarray.c
> +++ b/lib/xarray.c
> @@ -1053,6 +1053,9 @@ void xas_split_alloc(struct xa_state *xas, void *entry, unsigned int order,
>  	if (xas->xa_shift + XA_CHUNK_SHIFT > order)
>  		return;
>
> +	if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
> +		gfp |= __GFP_ACCOUNT;
> +

This is some confluence of flags :) I wonder if there are other places we've
missed setting this for?

>  	do {
>  		struct xa_node *node;
>
>
> --
> 2.53.0
>

--
Cheers, Lorenzo