Re: [PATCH v1 1/3] mm: Allow deferred splitting of arbitrary large anon folios

From: David Hildenbrand
Date: Mon Jul 17 2023 - 12:49:50 EST


On 17.07.23 18:01, Ryan Roberts wrote:
On 17/07/2023 16:42, David Hildenbrand wrote:
On 17.07.23 16:31, Ryan Roberts wrote:
In preparation for the introduction of large folios for anonymous
memory, we would like to be able to split them when they have unmapped
subpages, in order to free those unused pages under memory pressure. So
remove the artificial requirement that the large folio needed to be at
least PMD-sized.

Signed-off-by: Ryan Roberts <ryan.roberts@xxxxxxx>
Reviewed-by: Yu Zhao <yuzhao@xxxxxxxxxx>
Reviewed-by: Yin Fengwei <fengwei.yin@xxxxxxxxx>
---
  mm/rmap.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/rmap.c b/mm/rmap.c
index 0c0d8857dfce..2baf57d65c23 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -1430,7 +1430,7 @@ void page_remove_rmap(struct page *page, struct
vm_area_struct *vma,
           * page of the folio is unmapped and at least one page
           * is still mapped.
           */
-        if (folio_test_pmd_mappable(folio) && folio_test_anon(folio))
+        if (folio_test_large(folio) && folio_test_anon(folio))
              if (!compound || nr < nr_pmdmapped)
                  deferred_split_folio(folio);

!compound will always be true I guess, so nr_pmdmapped == 0 (which will always
be the case) will be ignored.

I don't follow why !compound will always be true. This function is
page_remove_rmap() (not folio_remove_rmap_range() which I add in a later patch).
page_remove_rmap() can work on pmd-mapped pages where compound=true is passed in.

I was talking about the folio_test_pmd_mappable() -> folio_test_large() change. For folio_test_large() && !folio_test_pmd_mappable() I expect that we'll never pass in "compound=true".

--
Cheers,

David / dhildenb