[PATCH v3 2/2] 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.kernel.vger.stable,org.kvack.linux-mm
Message-ID <20260804-add-gfp_account-to-xas_split_alloc-v3-2-38cb3ff325c5@nvidia.com>
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 add _GFP_ACCOUNT when XA_FLAGS_ACCOUNT is
present. Fix it.

Fixes: 6b24ca4a1a8d4 ("mm: Use multi-index entries in the page cache")
Reviewed-by: Lorenzo Stoakes (ARM) <[email protected]>
Acked-by: Johannes Weiner <[email protected]>
Signed-off-by: Zi Yan <[email protected]>
Cc: <[email protected]> # depends on mm-hotfixes-unstable patch: mm/huge_memory: initialise workingset state before folio split
---
 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;
+
 	do {
 		struct xa_node *node;
 

-- 
2.53.0
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.