Re: [PATCH v2 2/2] xarray: honor XA_FLAGS_ACCOUNT in xas_split_alloc()
From: Lorenzo Stoakes (ARM)
Date: Sat Aug 01 2026 - 05:39:15 EST
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 <ziy@xxxxxxxxxx>
Makes sense to me so:
Reviewed-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>
> ---
> 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