v7
2026-09-01
swap不可用时避免大folio分裂 · v7
改进大 folio swap 分配失败分类,无 swap 容量时避免无意义拆分,shmem 仅在 -E2BIG 时拆分大 folio。
原始补丁链接
子 Patch(4)
1/4
mm: add page_counter_margin()
新增 page_counter_margin(),封装从 page counter 到 root 的最小可用空间计算,替换 mem_cgroup_get_nr_swap_pages() 的手写层级遍历,纯重构。
2/4
mm: distinguish large folio swap allocation failures
folio_alloc_swap() 按原因分类返回:-ENOSPC 全局 swap 耗尽,-ENOMEM 拆分无益,-E2BIG 拆小可能成功,帮助调用方决定是否拆分大 folio。
3/4
mm/vmscan: avoid pointless large folio splits without swap
vmscan 只有在 folio_alloc_swap() 返回 -E2BIG 时才拆分大匿名 folio;当 swap 禁用/耗尽/受 memcg 限制时保留激活路径,避免无效拆分。
4/4
mm/shmem: split large folios only on -E2BIG
shmem_writeout() 不再对所有分配失败拆分大 folio,仅 -E2BIG 时进入拆分回退;-ENOSPC/-ENOMEM 时 redirty 并重新激活。