From: Jiayuan Chen Extract helper functions from debugfs interface for code reuse: - lru_gen_print_lruvec(): Print generations for a single lruvec, extracted from lru_gen_seq_show(). - __run_cmd(): Core command execution logic, extracted from run_cmd(). These helpers will be used by the upcoming memcg interface. No functional change. Signed-off-by: Jiayuan Chen --- mm/vmscan.c | 82 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 619691aa4393..8ea5b67daa36 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5397,29 +5397,13 @@ static void lru_gen_seq_show_full(struct seq_file *m, struct lruvec *lruvec, seq_putc(m, '\n'); } -/* see Documentation/admin-guide/mm/multigen_lru.rst for details */ -static int lru_gen_seq_show(struct seq_file *m, void *v) +/* Print generations for a single lruvec - helper for debugfs and memcg */ +static void lru_gen_print_lruvec(struct seq_file *m, struct lruvec *lruvec, + unsigned long max_seq, unsigned long *min_seq, + bool full) { unsigned long seq; - bool full = debugfs_get_aux_num(m->file); - struct lruvec *lruvec = v; struct lru_gen_folio *lrugen = &lruvec->lrugen; - int nid = lruvec_pgdat(lruvec)->node_id; - struct mem_cgroup *memcg = lruvec_memcg(lruvec); - DEFINE_MAX_SEQ(lruvec); - DEFINE_MIN_SEQ(lruvec); - - if (nid == first_memory_node) { - const char *path = memcg ? m->private : ""; - -#ifdef CONFIG_MEMCG - if (memcg) - cgroup_path(memcg->css.cgroup, m->private, PATH_MAX); -#endif - seq_printf(m, "memcg %5hu %s\n", mem_cgroup_id(memcg), path); - } - - seq_printf(m, " node %5d\n", nid); if (!full) seq = evictable_min_seq(min_seq, MAX_SWAPPINESS / 2); @@ -5431,7 +5415,7 @@ static int lru_gen_seq_show(struct seq_file *m, void *v) for (; seq <= max_seq; seq++) { int type, zone; int gen = lru_gen_from_seq(seq); - unsigned long birth = READ_ONCE(lruvec->lrugen.timestamps[gen]); + unsigned long birth = READ_ONCE(lrugen->timestamps[gen]); seq_printf(m, " %10lu %10u", seq, jiffies_to_msecs(jiffies - birth)); @@ -5450,7 +5434,31 @@ static int lru_gen_seq_show(struct seq_file *m, void *v) if (full) lru_gen_seq_show_full(m, lruvec, max_seq, min_seq, seq); } +} + +/* see Documentation/admin-guide/mm/multigen_lru.rst for details */ +static int lru_gen_seq_show(struct seq_file *m, void *v) +{ + bool full = debugfs_get_aux_num(m->file); + struct lruvec *lruvec = v; + int nid = lruvec_pgdat(lruvec)->node_id; + struct mem_cgroup *memcg = lruvec_memcg(lruvec); + DEFINE_MAX_SEQ(lruvec); + DEFINE_MIN_SEQ(lruvec); + + if (nid == first_memory_node) { + const char *path = memcg ? m->private : ""; + +#ifdef CONFIG_MEMCG + if (memcg) + cgroup_path(memcg->css.cgroup, m->private, PATH_MAX); +#endif + seq_printf(m, "memcg %5hu %s\n", mem_cgroup_id(memcg), path); + } + seq_printf(m, " node %5d\n", nid); + + lru_gen_print_lruvec(m, lruvec, max_seq, min_seq, full); return 0; } @@ -5501,6 +5509,24 @@ static int run_eviction(struct lruvec *lruvec, unsigned long seq, struct scan_co return -EINTR; } +/* Core command execution - helper for debugfs and memcg */ +static int __run_cmd(char cmd, struct lruvec *lruvec, unsigned long seq, + struct scan_control *sc, int swappiness, unsigned long opt) +{ + if (swappiness < MIN_SWAPPINESS) + swappiness = get_swappiness(lruvec, sc); + else if (swappiness > SWAPPINESS_ANON_ONLY) + return -EINVAL; + + switch (cmd) { + case '+': + return run_aging(lruvec, seq, swappiness, opt); + case '-': + return run_eviction(lruvec, seq, sc, swappiness, opt); + } + return -EINVAL; +} + static int run_cmd(char cmd, int memcg_id, int nid, unsigned long seq, struct scan_control *sc, int swappiness, unsigned long opt) { @@ -5530,19 +5556,7 @@ static int run_cmd(char cmd, int memcg_id, int nid, unsigned long seq, sc->target_mem_cgroup = memcg; lruvec = get_lruvec(memcg, nid); - if (swappiness < MIN_SWAPPINESS) - swappiness = get_swappiness(lruvec, sc); - else if (swappiness > SWAPPINESS_ANON_ONLY) - goto done; - - switch (cmd) { - case '+': - err = run_aging(lruvec, seq, swappiness, opt); - break; - case '-': - err = run_eviction(lruvec, seq, sc, swappiness, opt); - break; - } + err = __run_cmd(cmd, lruvec, seq, sc, swappiness, opt); done: mem_cgroup_put(memcg); -- 2.43.0