v1 2026-08-18

清理 MGLRU folio 计数与标志使用 · v1

重构 MGLRU 的 folio 计数和 gen/refs 标志操作,引入辅助函数并原子化 lru_zone_size。

原始补丁链接

子 Patch(7)

1/7
mm/memcontrol: make lru_zone_size atomic and simplify sanity check
将lru_zone_size改为atomic_long,移除更新端underflow修正,改在读端检查,避免负值回绕导致shrinker计算巨大批量而长时间循环,同时降低更新开销。
2/7
mm/mglru: introduce helpers for manipulating gen and refs flags
为MGLRU的gen和refs标志位操作封装辅助函数,替换直接位运算,拆分原子操作仅产生无害瞬态,无功能变化。
3/7
mm/migrate: copy the referenced state via folio_migrate_refs()
让folio_migrate_refs()统一拷贝PG_referenced和MGLRU refs计数,删除folio_migrate_flags中的单独拷贝,引用状态迁移集中在一处。
4/7
mm/mglru: move max_seq read into walk_update_folio
将max_seq读取移入walk_update_folio(),避免调用者按walk范围读取旧值,保证folio更新时总能提升到当前最新代。
5/7
mm/mglru: use explicit tier range in read_ctrl_pos()
read_ctrl_pos()改用显式(tier_min,tier_max)闭区间参数替代原tier%和min()编码,新增LRU_TIER_MIN/MAX,调用更清晰,无功能变化。
6/7
mm/mglru: fix potential generation folio number leak
修复MGLRU页表遍历中folio类型在cmpxchg与读取间翻转导致anon/file计数错配泄漏:folio_update_gen()返回旧状态类型,update_batch_size()据此记账。
7/7
mm/mglru: improve code readability and harden folio_inc_gen
加固folio_inc_gen(),对不在链表上的folio增加检查,违反则直接返回不修改flags,并重命名变量区分当前代与最老代。