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:
This patch modifies finish_fault() to fault in the entire folio when
possible, enabling efficient mlocking upon addition to the rmap.
Patch 5:
This patch ensures that rmap mlocks large folios if they are fully
mapped, addressing the primary source of mlock undercount for large
folios.
Kiryl Shutsemau (5):
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/rmap: Improve mlock tracking for large folios
include/linux/rmap.h | 5 +++
mm/memory.c | 9 +---
mm/page_vma_mapped.c | 1 +
mm/rmap.c | 101 +++++++++++++++++++++++--------------------
4 files changed, 61 insertions(+), 55 deletions(-)
--
2.50.1