[Devel] [PATCH VZ10 6/8] mm/memcontrol: move nr_to_scan fallback out of __memcg_numa_migrate_pages()

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


To make __memcg_numa_migrate_pages() lru type agnostic we need to remove
all uses of "lru" variable, which is old lru specific. So let's move
nr_to_scan calculation based on "lru" variable out of
__memcg_numa_migrate_pages().

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 | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 4321ac0ef7cb0..f93c70e4a2315 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3651,13 +3651,6 @@ static long __memcg_numa_migrate_pages(struct lruvec *lruvec, enum lru_list lru,
 	LIST_HEAD(pages);
 	long total_scanned = 0;
 
-	/*
-	 * If no limit on the maximal number of migrated pages is specified,
-	 * assume the caller wants to migrate them all.
-	 */
-	if (nr_to_scan < 0)
-		nr_to_scan = lruvec_page_state_local(lruvec, NR_LRU_BASE + lru);
-
 	while (total_scanned < nr_to_scan) {
 		int ret;
 		long scanned;
@@ -3702,6 +3695,7 @@ static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
 		for_each_online_node(nid) {
 			struct lruvec *lruvec;
 			enum lru_list lru;
+			long scan, ret;
 
 			if (node_isset(nid, *target_nodes))
 				continue;
@@ -3713,10 +3707,15 @@ static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
 			 * aren't too many of them, which is usually true.
 			 */
 			for_each_evictable_lru(lru) {
-				long ret = __memcg_numa_migrate_pages(lruvec,
-						lru, target_nodes,
-						nr_to_scan > 0 ?
-						SWAP_CLUSTER_MAX : -1);
+				/*
+				 * If no limit on the maximal number of
+				 * migrated pages is specified assume the
+				 * caller wants to migrate them all.
+				 */
+				scan = nr_to_scan > 0 ? SWAP_CLUSTER_MAX :
+				       lruvec_page_state_local(lruvec, NR_LRU_BASE + lru);
+
+				ret = __memcg_numa_migrate_pages(lruvec, lru, target_nodes, scan);
 				if (ret < 0) {
 					mem_cgroup_iter_break(memcg, iter);
 					return ret;
-- 
2.50.1



More information about the Devel mailing list