| From: "Matthew Wilcox (Oracle)" <willy@infradead.org> |
| Subject: proc: convert gather_stats to use a folio |
| Date: Wed, 3 Apr 2024 18:14:52 +0100 |
| |
| Patch series "Use folio APIs in procfs". |
| |
| We're down to very few users of the PageFoo macros, with proc being a |
| major user. |
| |
| After this patchset and another patchset I have for khugepaged, we can get |
| rid of PageActive, PageReadahead and PageSwapBacked. This patchset has |
| the usual advantages in its own right of removing hidden calls to |
| compound_head(). We have the page table lock, so the mapcount & refcount |
| are stable and there can't be any races with folios suddenly becoming tail |
| pages. |
| |
| |
| This patch (of 4): |
| |
| Replaces six calls to compound_head() with one. Shrinks the function from |
| 5054 bytes to 1756 bytes in an allmodconfig build. |
| |
| Link: https://lkml.kernel.org/r/20240403171456.1445117-1-willy@infradead.org |
| Link: https://lkml.kernel.org/r/20240403171456.1445117-2-willy@infradead.org |
| Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Cc: Christian Brauner <brauner@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| fs/proc/task_mmu.c | 13 +++++++------ |
| 1 file changed, 7 insertions(+), 6 deletions(-) |
| |
| --- a/fs/proc/task_mmu.c~proc-convert-gather_stats-to-use-a-folio |
| +++ a/fs/proc/task_mmu.c |
| @@ -2549,28 +2549,29 @@ struct numa_maps_private { |
| static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty, |
| unsigned long nr_pages) |
| { |
| + struct folio *folio = page_folio(page); |
| int count = page_mapcount(page); |
| |
| md->pages += nr_pages; |
| - if (pte_dirty || PageDirty(page)) |
| + if (pte_dirty || folio_test_dirty(folio)) |
| md->dirty += nr_pages; |
| |
| - if (PageSwapCache(page)) |
| + if (folio_test_swapcache(folio)) |
| md->swapcache += nr_pages; |
| |
| - if (PageActive(page) || PageUnevictable(page)) |
| + if (folio_test_active(folio) || folio_test_unevictable(folio)) |
| md->active += nr_pages; |
| |
| - if (PageWriteback(page)) |
| + if (folio_test_writeback(folio)) |
| md->writeback += nr_pages; |
| |
| - if (PageAnon(page)) |
| + if (folio_test_anon(folio)) |
| md->anon += nr_pages; |
| |
| if (count > md->mapcount_max) |
| md->mapcount_max = count; |
| |
| - md->node[page_to_nid(page)] += nr_pages; |
| + md->node[folio_nid(folio)] += nr_pages; |
| } |
| |
| static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma, |
| _ |