OSDN Git Service

vmscan: convert the activate_locked portion of shrink_page_list to folios
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 13 May 2022 03:23:03 +0000 (20:23 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 13 May 2022 14:20:15 +0000 (07:20 -0700)
This accounts the number of pages activated correctly for large folios.

Link: https://lkml.kernel.org/r/20220504182857.4013401-14-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/vmscan.c

index 725a291..0a527ce 100644 (file)
@@ -1946,15 +1946,16 @@ activate_locked_split:
                }
 activate_locked:
                /* Not a candidate for swapping, so reclaim swap space. */
-               if (PageSwapCache(page) && (mem_cgroup_swap_full(page) ||
-                                               PageMlocked(page)))
-                       try_to_free_swap(page);
-               VM_BUG_ON_PAGE(PageActive(page), page);
-               if (!PageMlocked(page)) {
-                       int type = page_is_file_lru(page);
-                       SetPageActive(page);
+               if (folio_test_swapcache(folio) &&
+                   (mem_cgroup_swap_full(&folio->page) ||
+                    folio_test_mlocked(folio)))
+                       try_to_free_swap(&folio->page);
+               VM_BUG_ON_FOLIO(folio_test_active(folio), folio);
+               if (!folio_test_mlocked(folio)) {
+                       int type = folio_is_file_lru(folio);
+                       folio_set_active(folio);
                        stat->nr_activate[type] += nr_pages;
-                       count_memcg_page_event(page, PGACTIVATE);
+                       count_memcg_folio_events(folio, PGACTIVATE, nr_pages);
                }
 keep_locked:
                unlock_page(page);