[PATCHv2 0/5] mm: Improve mlock tracking for large folios

From: Kiryl Shutsemau

Date: Fri Sep 19 2025 - 08:40:44 EST


From: Kiryl Shutsemau <kas@xxxxxxxxxx>

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