[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