Re: [PATCH RFC] xarray: honor XA_FLAGS_ACCOUNT in xas_split_alloc()

Zi Yan <[email protected]>
Newsgroups org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On 30 Jul 2026, at 10:13, Johannes Weiner wrote:

> Hello Zi,
>
> On Mon, Jul 27, 2026 at 09:51:40PM -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.
>>
>> Fixes: 6b24ca4a1a8d4 ("mm: Use multi-index entries in the page cache")
>> Signed-off-by: Zi Yan <[email protected]>
>> ---
>> Hi Johannes,
>>
>> IIUC, __GFP_ACCOUNT is needed for xarray node allocation accounting when
>> XA_FLAGS_ACCOUNT is set. Commit 7b785645e8f13 ("mm: fix page cache
>> convergence regression") fixed a workingset regression with it.
>> xas_split_alloc() does not have it, so I imagine xa_node allocated during
>> folio split would cause a similar issue. I would like to get your
>> opinion on this.
>
> Yes, you're right!
>
> As we had discussed on the THP cabal call, we should use the memcg
> context of the folio, as that could be different from the callers'
> depending on who's doing the splitting. I.e.
>
> 	memcg = get_mem_cgroup_from_folio(x);
> 	old_memcg = set_active_memcg(memcg);
>
> 	xas_split_alloc() / xas_try_split()
>
> 	set_active_memcg(old_memcg);
> 	mem_cgroup_put(memcg);
>
> There is __folio_split() -> xas_split_alloc(). But there is also
> __folio_split() -> __folio_freeze_and_split_unmapped() ->
> __split_unmapped_folio() -> xas_try_split() -> XA_FLAGS_ACCOUNT ->
> __GFP_ACCOUNT. So it would make sense to me to set up the memcg
> context in __folio_split() already.

Thank you for the detailed analysis. Will add memcg context code
and send a new version.


Best Regards,
Yan, Zi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.