linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: akpm@linuxfoundation.org, linux-mm@kvack.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: [PATCH v2 09/26] vmscan: Convert dirty page handling to folios
Date: Wed,  4 May 2022 19:28:40 +0100	[thread overview]
Message-ID: <20220504182857.4013401-10-willy@infradead.org> (raw)
In-Reply-To: <20220504182857.4013401-1-willy@infradead.org>

Mostly this just eliminates calls to compound_head(), but
NR_VMSCAN_IMMEDIATE was being incremented by 1 instead of by nr_pages.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 mm/vmscan.c | 48 ++++++++++++++++++++++++++----------------------
 1 file changed, 26 insertions(+), 22 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 8f7c32b3d65e..950eeb2f759b 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1768,28 +1768,31 @@ static unsigned int shrink_page_list(struct list_head *page_list,
 			}
 		}
 
-		if (PageDirty(page)) {
+		if (folio_test_dirty(folio)) {
 			/*
-			 * Only kswapd can writeback filesystem pages
+			 * Only kswapd can writeback filesystem folios
 			 * to avoid risk of stack overflow. But avoid
-			 * injecting inefficient single-page IO into
+			 * injecting inefficient single-folio I/O into
 			 * flusher writeback as much as possible: only
-			 * write pages when we've encountered many
-			 * dirty pages, and when we've already scanned
-			 * the rest of the LRU for clean pages and see
-			 * the same dirty pages again (PageReclaim).
+			 * write folios when we've encountered many
+			 * dirty folios, and when we've already scanned
+			 * the rest of the LRU for clean folios and see
+			 * the same dirty folios again (with the reclaim
+			 * flag set).
 			 */
-			if (page_is_file_lru(page) &&
-			    (!current_is_kswapd() || !PageReclaim(page) ||
+			if (folio_is_file_lru(folio) &&
+			    (!current_is_kswapd() ||
+			     !folio_test_reclaim(folio) ||
 			     !test_bit(PGDAT_DIRTY, &pgdat->flags))) {
 				/*
 				 * Immediately reclaim when written back.
-				 * Similar in principal to deactivate_page()
-				 * except we already have the page isolated
+				 * Similar in principle to deactivate_page()
+				 * except we already have the folio isolated
 				 * and know it's dirty
 				 */
-				inc_node_page_state(page, NR_VMSCAN_IMMEDIATE);
-				SetPageReclaim(page);
+				node_stat_mod_folio(folio, NR_VMSCAN_IMMEDIATE,
+						nr_pages);
+				folio_set_reclaim(folio);
 
 				goto activate_locked;
 			}
@@ -1802,8 +1805,8 @@ static unsigned int shrink_page_list(struct list_head *page_list,
 				goto keep_locked;
 
 			/*
-			 * Page is dirty. Flush the TLB if a writable entry
-			 * potentially exists to avoid CPU writes after IO
+			 * Folio is dirty. Flush the TLB if a writable entry
+			 * potentially exists to avoid CPU writes after I/O
 			 * starts and then write it out here.
 			 */
 			try_to_unmap_flush_dirty();
@@ -1815,23 +1818,24 @@ static unsigned int shrink_page_list(struct list_head *page_list,
 			case PAGE_SUCCESS:
 				stat->nr_pageout += nr_pages;
 
-				if (PageWriteback(page))
+				if (folio_test_writeback(folio))
 					goto keep;
-				if (PageDirty(page))
+				if (folio_test_dirty(folio))
 					goto keep;
 
 				/*
 				 * A synchronous write - probably a ramdisk.  Go
-				 * ahead and try to reclaim the page.
+				 * ahead and try to reclaim the folio.
 				 */
-				if (!trylock_page(page))
+				if (!folio_trylock(folio))
 					goto keep;
-				if (PageDirty(page) || PageWriteback(page))
+				if (folio_test_dirty(folio) ||
+				    folio_test_writeback(folio))
 					goto keep_locked;
-				mapping = page_mapping(page);
+				mapping = folio_mapping(folio);
 				fallthrough;
 			case PAGE_CLEAN:
-				; /* try to free the page below */
+				; /* try to free the folio below */
 			}
 		}
 
-- 
2.34.1



  parent reply	other threads:[~2022-05-04 18:29 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-04 18:28 [PATCH v2 00/26] Folio patches for 5.19 Matthew Wilcox (Oracle)
2022-05-04 18:28 ` [PATCH v2 01/26] shmem: Convert shmem_alloc_hugepage() to use vma_alloc_folio() Matthew Wilcox (Oracle)
2022-05-05 15:30   ` Christoph Hellwig
2022-05-05 17:29   ` Zi Yan
2022-05-04 18:28 ` [PATCH v2 02/26] mm/huge_memory: Convert do_huge_pmd_anonymous_page() " Matthew Wilcox (Oracle)
2022-05-05 15:31   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 03/26] alpha: Fix alloc_zeroed_user_highpage_movable() Matthew Wilcox (Oracle)
2022-05-05 15:31   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 04/26] mm: Remove alloc_pages_vma() Matthew Wilcox (Oracle)
2022-05-05 15:34   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 05/26] vmscan: Use folio_mapped() in shrink_page_list() Matthew Wilcox (Oracle)
2022-05-05 15:34   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 06/26] vmscan: Convert the writeback handling in shrink_page_list() to folios Matthew Wilcox (Oracle)
2022-05-05 15:35   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 07/26] swap: Turn get_swap_page() into folio_alloc_swap() Matthew Wilcox (Oracle)
2022-05-05 15:35   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 08/26] swap: Convert add_to_swap() to take a folio Matthew Wilcox (Oracle)
2022-05-05 15:35   ` Christoph Hellwig
2022-05-06  1:21   ` Andrew Morton
2022-05-06  1:39     ` Matthew Wilcox
2022-05-04 18:28 ` Matthew Wilcox (Oracle) [this message]
2022-05-05 15:36   ` [PATCH v2 09/26] vmscan: Convert dirty page handling to folios Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 10/26] vmscan: Convert page buffer handling to use folios Matthew Wilcox (Oracle)
2022-05-05 15:36   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 11/26] vmscan: Convert lazy freeing to folios Matthew Wilcox (Oracle)
2022-05-05 15:37   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 12/26] vmscan: Move initialisation of mapping down Matthew Wilcox (Oracle)
2022-05-05 15:37   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 13/26] vmscan: Convert the activate_locked portion of shrink_page_list to folios Matthew Wilcox (Oracle)
2022-05-05 15:37   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 14/26] mm: Allow can_split_folio() to be called when THP are disabled Matthew Wilcox (Oracle)
2022-05-05 15:38   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 15/26] vmscan: Remove remaining uses of page in shrink_page_list Matthew Wilcox (Oracle)
2022-05-05 15:38   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 16/26] mm/shmem: Use a folio in shmem_unused_huge_shrink Matthew Wilcox (Oracle)
2022-05-05 15:38   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 17/26] mm/swap: Add folio_throttle_swaprate Matthew Wilcox (Oracle)
2022-05-05 15:39   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 18/26] mm/shmem: Convert shmem_add_to_page_cache to take a folio Matthew Wilcox (Oracle)
2022-05-05 15:39   ` Christoph Hellwig
2022-05-11  3:06   ` Mike Kravetz
2022-05-11  3:25     ` Matthew Wilcox
2022-05-04 18:28 ` [PATCH v2 19/26] mm/shmem: Turn shmem_should_replace_page into shmem_should_replace_folio Matthew Wilcox (Oracle)
2022-05-05 15:40   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 20/26] mm/shmem: Add shmem_alloc_folio() Matthew Wilcox (Oracle)
2022-05-05 15:40   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 21/26] mm/shmem: Convert shmem_alloc_and_acct_page to use a folio Matthew Wilcox (Oracle)
2022-05-05 15:40   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 22/26] mm/shmem: Convert shmem_getpage_gfp " Matthew Wilcox (Oracle)
2022-05-05 15:41   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 23/26] mm/shmem: Convert shmem_swapin_page() to shmem_swapin_folio() Matthew Wilcox (Oracle)
2022-05-05 15:41   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 24/26] mm: Add folio_mapping_flags() Matthew Wilcox (Oracle)
2022-05-05 15:41   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 25/26] mm: Add folio_test_movable() Matthew Wilcox (Oracle)
2022-05-05 15:42   ` Christoph Hellwig
2022-05-04 18:28 ` [PATCH v2 26/26] mm/migrate: Convert move_to_new_page() into move_to_new_folio() Matthew Wilcox (Oracle)
2022-05-05 15:42   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220504182857.4013401-10-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=akpm@linuxfoundation.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).