From: Kiryl Shutsemau <kas@kernel.org>
The patchset includes several fixes and improvements related to mlock
tracking of large folios.
The main objective is to reduce the undercount of Mlocked memory in
/proc/meminfo and improve the accuracy of the statistics.
Patches 1-2:
These patches address a minor race condition in folio_referenced_one()
related to mlock_vma_folio().
Currently, mlock_vma_folio() is called on large folio without the page
table lock, which can result in a race condition with unmap (i.e.
MADV_DONTNEED). This can lead to partially mapped folios on the
unevictable LRU list.
While not a significant issue, I do not believe backporting is
necessary.
Patch 3:
This patch adds mlocking logic similar to folio_referenced_one() to
try_to_unmap_one(), allowing for mlocking of large folios where
possible.
Patch 4-5:
These patches modifies finish_fault() and faultaround to map in the
entire folio when possible, enabling efficient mlocking upon addition to
the rmap.
Patch 6:
This patch makes rmap mlock large folios if they are fully mapped,
addressing the primary source of mlock undercount for large folios.
v3:
- Map entire folios on faultaround where possible;
- Fix comments and commit messages;
- Apply tags;
Kiryl Shutsemau (6):
mm/page_vma_mapped: Track if the page is mapped across page table
boundary
mm/rmap: Fix a mlock race condition in folio_referenced_one()
mm/rmap: mlock large folios in try_to_unmap_one()
mm/fault: Try to map the entire file folio in finish_fault()
mm/filemap: Map entire large folio faultaround
mm/rmap: Improve mlock tracking for large folios
include/linux/rmap.h | 5 ++
mm/filemap.c | 15 ++++++
mm/memory.c | 9 +---
mm/page_vma_mapped.c | 1 +
mm/rmap.c | 109 ++++++++++++++++++++++++-------------------
5 files changed, 84 insertions(+), 55 deletions(-)
--
2.50.1