[Devel] [PATCH RHEL10 COMMIT] mm/memcontrol: directly provide lru list in memcg_numa_isolate_pages() arguments

Konstantin Khorenko khorenko at virtuozzo.com
Fri Sep 5 22:58:12 MSK 2025


The commit is pushed to "branch-rh10-6.12.0-55.13.1.2.x.vz10-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh10-6.12.0-55.13.1.2.3.vz10
------>
commit 6fb69faf3b28c4f7d1e1ee8abb35418321f08e98
Author: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
Date:   Tue Sep 2 18:59:17 2025 +0800

    mm/memcontrol: directly provide lru list in memcg_numa_isolate_pages() arguments
    
    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>
    
    Feature: mm: interface to migrate memory between NUMA nodes upon userspace request
---
 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;


More information about the Devel mailing list