[Devel] [PATCH VZ10 7/8] mm/memcontrol: directly provide lru list in memcg_numa_isolate_pages() arguments

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Tue Sep 2 13:59:17 MSK 2025


To make memcg_numa_isolate_pages() work both for old lru and new
Multi-Gen LRU, we need to have src list argument instead of determining
the list internally.

The "lru" argument becomes unused, so let's remove it.

Also reorder memcg_numa_isolate_pages arguments to a more logical order.

https://virtuozzo.atlassian.net/browse/VSTOR-114298
Fixes: c92459bc18307 ("mm: memcontrol: add memory.numa_migrate file")
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 mm/memcontrol.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index f93c70e4a2315..d4461342c3d5a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3507,10 +3507,10 @@ static __always_inline void update_lru_sizes(struct lruvec *lruvec,
  * store them in @dst. Returns the number of pages scanned. Return value of 0
  * means that @lruvec is empty.
  */
-static long memcg_numa_isolate_pages(struct lruvec *lruvec, enum lru_list lru,
-				     long nr_to_scan, struct list_head *dst)
+static long memcg_numa_isolate_pages(struct lruvec *lruvec,
+				     struct list_head *src, struct list_head *dst,
+				     long nr_to_scan)
 {
-	struct list_head *src = &lruvec->lists[lru];
 	long scanned = 0, taken = 0;
 	struct folio *folio = NULL;
 	struct address_space *mapping;
@@ -3641,7 +3641,7 @@ static long memcg_numa_isolate_pages(struct lruvec *lruvec, enum lru_list lru,
 	return scanned;
 }
 
-static long __memcg_numa_migrate_pages(struct lruvec *lruvec, enum lru_list lru,
+static long __memcg_numa_migrate_pages(struct lruvec *lruvec, struct list_head *src,
 				       nodemask_t *target_nodes, long nr_to_scan)
 {
 	struct memcg_numa_migrate_struct ms = {
@@ -3655,8 +3655,7 @@ static long __memcg_numa_migrate_pages(struct lruvec *lruvec, enum lru_list lru,
 		int ret;
 		long scanned;
 
-		scanned = memcg_numa_isolate_pages(lruvec, lru,
-						   SWAP_CLUSTER_MAX, &pages);
+		scanned = memcg_numa_isolate_pages(lruvec, src, &pages, SWAP_CLUSTER_MAX);
 		if (!scanned)
 			break;
 
@@ -3694,6 +3693,7 @@ static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
 
 		for_each_online_node(nid) {
 			struct lruvec *lruvec;
+			struct list_head *src;
 			enum lru_list lru;
 			long scan, ret;
 
@@ -3714,8 +3714,9 @@ static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
 				 */
 				scan = nr_to_scan > 0 ? SWAP_CLUSTER_MAX :
 				       lruvec_page_state_local(lruvec, NR_LRU_BASE + lru);
+				src = &lruvec->lists[lru];
 
-				ret = __memcg_numa_migrate_pages(lruvec, lru, target_nodes, scan);
+				ret = __memcg_numa_migrate_pages(lruvec, src, target_nodes, scan);
 				if (ret < 0) {
 					mem_cgroup_iter_break(memcg, iter);
 					return ret;
-- 
2.50.1



More information about the Devel mailing list