If mlock cannot catch page in LRU then it isn't moved into unevictable lru. These pages are 'culled' by reclaimer and moved into unevictable lru. It seems pages locked with MLOCK_ONFAULT always go through this path. Reclaimer calls try_to_unmap for already isolated pages, thus on this path we could freely change page to owner of any mlock vma we found in rmap. This patch passes flag TTU_LRU_ISOLATED into try_to_ummap to move pages in mmlock_vma_page(). Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx> --- mm/vmscan.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index bf7a05e8a717..2060f254dd6b 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1345,7 +1345,8 @@ static unsigned long shrink_page_list(struct list_head *page_list, * processes. Try to unmap it here. */ if (page_mapped(page)) { - enum ttu_flags flags = ttu_flags | TTU_BATCH_FLUSH; + enum ttu_flags flags = ttu_flags | TTU_BATCH_FLUSH | + TTU_LRU_ISOLATED; if (unlikely(PageTransHuge(page))) flags |= TTU_SPLIT_HUGE_PMD;