Re: [PATCH v2 4/4] mm/mglru: fix anon-only reclaim evicting file pages when swappiness=max
From: Barry Song
Date: Sat Jul 18 2026 - 09:44:11 EST
On Sat, Jul 18, 2026 at 5:54 PM Ridong Chen <ridong.chen@xxxxxxxxx> wrote:
>
> From: Ridong Chen <chenridong@xxxxxxxxxx>
>
> The previous patch fixes this issue for the traditional LRU, which also
> exists in MGLRU [1]. Fix this by checking whether swappiness is
> SWAPPINESS_ANON_ONLY in get_swappiness() first, and returning 0 from
> get_nr_to_scan() when swappiness is SWAPPINESS_ANON_ONLY and anon pages
> cannot be reclaimed, to avoid useless work.
Is this intended to avoid unnecessary work, or to prevent file folios
from being reclaimed incorrectly?
>
> The test result:
> Before fix:
>
> # cat /sys/kernel/mm/lru_gen/enabled
> 0x0007
> # cat memory.stat
> anon 204800
> file 67108864
> ...
> pgsteal_proactive 0
> pgscan_proactive 0
>
> # echo "64M swappiness=max" > memory.reclaim
> # cat memory.stat
> anon 208896
> file 0
> ...
> pgsteal_proactive 16384
> pgscan_proactive 16384
>
> After fix:
>
> # cat memory.stat
> anon 188416
> file 67215360
> kernel 1970176
> ...
> pgsteal_proactive 0
> pgscan_proactive 0
>
> # echo "64M swappiness=max" > memory.reclaim
> -bash: echo: write error: Resource temporarily unavailable
> # cat memory.stat
> anon 204800
> file 67215360
> ...
> pgsteal_proactive 0
> pgscan_proactive 0
>
> [1] https://sashiko.dev/#/patchset/20260717113300.214717-1-ridong.chen@xxxxxxxxx
>
> Fixes: 68a1436bde00 ("mm: add swappiness=max arg to memory.reclaim for only anon reclaim")
> Signed-off-by: Ridong Chen <chenridong@xxxxxxxxxx>
> ---
> mm/vmscan.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
[...]
> static int get_nr_gens(struct lruvec *lruvec, int type)
> @@ -4915,6 +4919,14 @@ static long get_nr_to_scan(struct lruvec *lruvec, struct scan_control *sc,
> struct mem_cgroup *memcg, int swappiness)
> {
> unsigned long nr_to_scan, evictable;
> + struct pglist_data *pgdat = lruvec_pgdat(lruvec);
> +
> + /* Proactive reclaim: anon-only requested but anon is not reclaimable */
> + if (swappiness == SWAPPINESS_ANON_ONLY &&
> + !can_reclaim_anon_pages(memcg, pgdat->node_id, sc)) {
> + WARN_ON_ONCE(!sc->proactive);
Similar to the previous patch, maybe it would help to add a bit more
comment here?
Thanks
Barry