* [Devel] [PATCH hci-8.1 1/3] mm/memcontrol: drop the unused update_lru_sizes()
2026-10-28 13:49 [Devel] [PATCH hci-8.1 0/3] mm/memcontrol: tidy up the memory.numa_migrate code Konstantin Khorenko
@ 2026-10-28 13:49 ` Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 2/3] mm/memcontrol: say where the numa_migrate code comes from Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 3/3] mm/memcontrol: memory.numa_migrate MAX_SCAN counts folios Konstantin Khorenko
2 siblings, 0 replies; 4+ messages in thread
From: Konstantin Khorenko @ 2026-10-28 13:49 UTC (permalink / raw)
To: Pavel Tikhomirov, Vasileios Almpanis; +Cc: devel
It has had no caller since commit 3c6e0c1ac1d6 ("mm/memcontrol: use
lruvec_del_folio() in memcg_numa_isolate_pages()"), and being static
__always_inline it never drew a warning.
https://virtuozzo.atlassian.net/browse/VSTOR-152197
Feature: mm: interface to migrate memory between NUMA nodes upon userspace request
Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
---
mm/memcontrol.c | 18 ------------------
1 file changed, 18 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index d8a87913ace37..a82d5e7bc8694 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3497,24 +3497,6 @@ static struct folio *memcg_numa_migrate_new_folio(struct folio *old_folio,
ms->target_nodes);
}
-/*
- * Update LRU sizes after isolating pages. The LRU size updates must
- * be complete before mem_cgroup_update_lru_size due to a santity check.
- */
-static __always_inline void update_lru_sizes(struct lruvec *lruvec,
- enum lru_list lru, unsigned long *nr_zone_taken)
-{
- int zid;
-
- for (zid = 0; zid < MAX_NR_ZONES; zid++) {
- if (!nr_zone_taken[zid])
- continue;
-
- update_lru_size(lruvec, lru, zid, -nr_zone_taken[zid]);
- }
-
-}
-
/*
* Isolate at most @nr_to_scan pages from @lruvec for further migration and
* store them in @dst. Returns the number of pages scanned. Return value of 0
--
2.43.0
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
^ permalink raw reply [flat|nested] 4+ messages in thread* [Devel] [PATCH hci-8.1 2/3] mm/memcontrol: say where the numa_migrate code comes from
2026-10-28 13:49 [Devel] [PATCH hci-8.1 0/3] mm/memcontrol: tidy up the memory.numa_migrate code Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 1/3] mm/memcontrol: drop the unused update_lru_sizes() Konstantin Khorenko
@ 2026-10-28 13:49 ` Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 3/3] mm/memcontrol: memory.numa_migrate MAX_SCAN counts folios Konstantin Khorenko
2 siblings, 0 replies; 4+ messages in thread
From: Konstantin Khorenko @ 2026-10-28 13:49 UTC (permalink / raw)
To: Pavel Tikhomirov, Vasileios Almpanis; +Cc: devel
The comment in the isolation loop tells the rebase history of the code
instead of naming the upstream functions it copies, which is what a
rebase has to compare against. Replace it with those names, name the
original of the allocator too, and drop the leftovers of the copy: the
commented-out conditions and the pre-folio name of the allocator in
the comment to its private argument.
No functional change.
https://virtuozzo.atlassian.net/browse/VSTOR-152197
Feature: mm: interface to migrate memory between NUMA nodes upon userspace request
Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
---
mm/memcontrol.c | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index a82d5e7bc8694..4c3c06cfcf9fc 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3462,7 +3462,7 @@ int ve_enough_memory(long pages)
#ifdef CONFIG_NUMA
/*
- * memcg_numa_migrate_new_page() private argument. @target_nodes specifies the
+ * memcg_numa_migrate_new_folio() private argument. @target_nodes specifies the
* set of nodes to allocate pages from. @current_node is the current preferable
* node, it gets rotated after each allocation.
*/
@@ -3473,7 +3473,8 @@ struct memcg_numa_migrate_struct {
/*
* Used as an argument for migrate_pages(). Allocated pages are spread evenly
- * among destination nodes.
+ * among destination nodes. The order and gfp choice follow
+ * alloc_migration_target().
*/
static struct folio *memcg_numa_migrate_new_folio(struct folio *old_folio,
unsigned long private)
@@ -3520,19 +3521,10 @@ static long memcg_numa_isolate_pages(struct lruvec *lruvec,
scanned++;
/*
- * Previously here we had a call to
- * __isolate_lru_page_prepare(page, ISOLATE_ASYNC_MIGRATE)
- * => need to get same parts from __isolate_lru_page_prepare()
- * like it's done in isolate_migratepages_block() in commit
- * 89f6c88a6ab4 ("mm: __isolate_lru_page_prepare() in
- * isolate_migratepages_block()")
- *
- * The code block below is taken from
- * isolate_migratepages_block(), mode variable is defined and
- * set to ISOLATE_ASYNC_MIGRATE in order to keep the original
- * code unchanged where possible.
- *
- * Also it is switched to folio, based on isolate_lru_folios().
+ * The checks below are a copy of the per-folio checks in
+ * isolate_migratepages_block() with mode == ISOLATE_ASYNC_MIGRATE;
+ * the isolation itself follows isolate_lru_folios(). Keep both
+ * in sync with their originals on a rebase.
*/
folio = lru_to_folio(src);
@@ -3552,7 +3544,6 @@ static long memcg_numa_isolate_pages(struct lruvec *lruvec,
is_unevictable = folio_test_unevictable(folio);
/* Compaction might skip unevictable pages but CMA takes them */
- /* if (is_unevictable) */
if (!(mode & ISOLATE_UNEVICTABLE) && is_unevictable)
goto isolate_fail;
@@ -3567,7 +3558,6 @@ static long memcg_numa_isolate_pages(struct lruvec *lruvec,
is_dirty = folio_test_dirty(folio);
- /* if (is_dirty) */
if (((mode & ISOLATE_ASYNC_MIGRATE) && is_dirty) ||
(mapping && is_unevictable)) {
bool migrate_dirty = true;
--
2.43.0
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
^ permalink raw reply [flat|nested] 4+ messages in thread* [Devel] [PATCH hci-8.1 3/3] mm/memcontrol: memory.numa_migrate MAX_SCAN counts folios
2026-10-28 13:49 [Devel] [PATCH hci-8.1 0/3] mm/memcontrol: tidy up the memory.numa_migrate code Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 1/3] mm/memcontrol: drop the unused update_lru_sizes() Konstantin Khorenko
2026-10-28 13:49 ` [Devel] [PATCH hci-8.1 2/3] mm/memcontrol: say where the numa_migrate code comes from Konstantin Khorenko
@ 2026-10-28 13:49 ` Konstantin Khorenko
2 siblings, 0 replies; 4+ messages in thread
From: Konstantin Khorenko @ 2026-10-28 13:49 UTC (permalink / raw)
To: Pavel Tikhomirov, Vasileios Almpanis; +Cc: devel
memcg_numa_isolate_pages() counts a scanned folio as one whatever its
size, so the MAX_SCAN limit of memory.numa_migrate and the @nr_to_scan
arguments are in folios, not in pages as the comments say.
No functional change.
https://virtuozzo.atlassian.net/browse/VSTOR-152197
Feature: mm: interface to migrate memory between NUMA nodes upon userspace request
Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com>
---
mm/memcontrol.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 4c3c06cfcf9fc..f93b0400c786d 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -3499,8 +3499,8 @@ static struct folio *memcg_numa_migrate_new_folio(struct folio *old_folio,
}
/*
- * Isolate at most @nr_to_scan pages from @lruvec for further migration and
- * store them in @dst. Returns the number of pages scanned. Return value of 0
+ * Isolate at most @nr_to_scan folios from @lruvec for further migration and
+ * store them in @dst. Returns the number of folios scanned. Return value of 0
* means that @lruvec is empty.
*/
static long memcg_numa_isolate_pages(struct lruvec *lruvec,
@@ -3661,9 +3661,9 @@ static long __memcg_numa_migrate_pages(struct lruvec *lruvec, struct list_head *
}
/*
- * Migrate at most @nr_to_scan pages accounted to @memcg to @target_nodes.
- * Pages are spreaded evenly among destination nodes. If @nr_to_scan is <= 0,
- * then the function will attempt to migrate all pages accounted to @memcg.
+ * Scan at most @nr_to_scan folios accounted to @memcg and migrate them to
+ * @target_nodes, spread evenly among the nodes. If @nr_to_scan is <= 0, the
+ * function attempts to migrate all pages accounted to @memcg.
*/
static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
nodemask_t *target_nodes, long nr_to_scan)
@@ -3750,7 +3750,7 @@ static int memcg_numa_migrate_pages(struct mem_cgroup *memcg,
*
* where NODELIST is a comma-separated list of ranges N1-N2 specifying the set
* of nodes to migrate pages of this cgroup to, and the optional MAX_SCAN
- * imposes a limit on the number of pages that can be migrated in one go.
+ * imposes a limit on the number of folios scanned in one go.
*
* The call may be interrupted by a signal, in which case -EINTR is returned.
*/
--
2.43.0
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
^ permalink raw reply [flat|nested] 4+ messages in thread