Re: [PATCH v2 1/1] mm: skip mlocked THPs that are underused early in deferred_split_scan()

Baolin Wang
2025-09-09T06:23:41Z

On 2025/9/8 17:07, Lance Yang wrote:
> From: Lance Yang <lance.yang@linux.dev>
>
> When we stumble over a fully-mapped mlocked THP in the deferred shrinker,
> it does not make sense to try to detect whether it is underused, because
> try_to_map_unused_to_zeropage(), called while splitting the folio, will not
> actually replace any zeroed pages by the shared zeropage.
>
> Splitting the folio in that case does not make any sense, so let's not even
> scan to check if the folio is underused.
>
> Suggested-by: David Hildenbrand <david@redhat.com>
> Signed-off-by: Lance Yang <lance.yang@linux.dev>
> ---

LGTM.
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>

> v1 -> v2:
> - Update subject and changelog (per David, thanks!)
> - https://lore.kernel.org/linux-mm/20250908040713.42960-1-lance.yang@linux.dev
>
> mm/huge_memory.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 77f0c3417973..6d99893c18e8 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -4183,6 +4183,13 @@ static unsigned long deferred_split_scan(struct shrinker *shrink,
> bool underused = false;
>
> if (!folio_test_partially_mapped(folio)) {
> + /*
> + * See try_to_map_unused_to_zeropage(): we cannot
> + * optimize zero-filled pages after splitting an
> + * mlocked folio.
> + */
> + if (folio_test_mlocked(folio))
> + goto next;
> underused = thp_underused(folio);
> if (!underused)
> goto next;