mm: khugepaged: support shmem mTHP copy
authorBaolin Wang <baolin.wang@linux.alibaba.com>
Tue, 20 Aug 2024 09:49:15 +0000 (17:49 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Sep 2024 04:15:39 +0000 (21:15 -0700)
Iterate each subpage in the large folio to copy, as preparation for
supporting shmem mTHP collapse.

Link: https://lkml.kernel.org/r/222d615b7c837eabb47a238126c5fdeff8aa5283.1724140601.git.baolin.wang@linux.alibaba.com
Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <21cnbao@gmail.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Yang Shi <shy828301@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/khugepaged.c

index e015c94..4996f74 100644 (file)
@@ -2056,17 +2056,22 @@ xa_unlocked:
        index = start;
        dst = folio_page(new_folio, 0);
        list_for_each_entry(folio, &pagelist, lru) {
+               int i, nr_pages = folio_nr_pages(folio);
+
                while (index < folio->index) {
                        clear_highpage(dst);
                        index++;
                        dst++;
                }
-               if (copy_mc_highpage(dst, folio_page(folio, 0)) > 0) {
-                       result = SCAN_COPY_MC;
-                       goto rollback;
+
+               for (i = 0; i < nr_pages; i++) {
+                       if (copy_mc_highpage(dst, folio_page(folio, i)) > 0) {
+                               result = SCAN_COPY_MC;
+                               goto rollback;
+                       }
+                       index++;
+                       dst++;
                }
-               index++;
-               dst++;
        }
        while (index < end) {
                clear_highpage(dst);