[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <23852f6a-5bfa-1ffd-30db-30c5560ad426@google.com>
Date: Mon, 23 Oct 2023 23:38:41 -0700 (PDT)
From: Hugh Dickins <hughd@...gle.com>
To: Andrew Morton <akpm@...ux-foundation.org>
cc: Yin Fengwei <fengwei.yin@...el.com>,
Matthew Wilcox <willy@...radead.org>,
Lorenzo Stoakes <lstoakes@...il.com>,
Stefan Roesch <shr@...kernel.io>, linux-kernel@...r.kernel.org,
linux-mm@...ck.org
Subject: [PATCH] mm: mlock: avoid folio_within_range() on KSM pages
Since mm-hotfixes-stable commit dc68badcede4 ("mm: mlock: update
mlock_pte_range to handle large folio") I've just occasionally seen
VM_WARN_ON_FOLIO(folio_test_ksm) warnings from folio_within_range(),
in a splurge after testing with KSM hyperactive.
folio_referenced_one()'s use of folio_within_vma() is safe because
it checks folio_test_large() first; but allow_mlock_munlock() needs
to do the same to avoid those warnings (or check !folio_test_ksm()
itself? or move either check into folio_within_range()? hard to tell
without more examples of its use).
Fixes: dc68badcede4 ("mm: mlock: update mlock_pte_range to handle large folio")
Signed-off-by: Hugh Dickins <hughd@...gle.com>
---
mm/mlock.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mm/mlock.c b/mm/mlock.c
index aa44456200e3..086546ac5766 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -346,6 +346,10 @@ static inline bool allow_mlock_munlock(struct folio *folio,
if (!(vma->vm_flags & VM_LOCKED))
return true;
+ /* folio_within_range() cannot take KSM, but any small folio is OK */
+ if (!folio_test_large(folio))
+ return true;
+
/* folio not in range [start, end), skip mlock */
if (!folio_within_range(folio, vma, start, end))
return false;
--
2.35.3
Powered by blists - more mailing lists