linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Kairui Song <ryncsn@gmail.com>
To: linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	David Hildenbrand <david@redhat.com>,
	Hugh Dickins <hughd@google.com>, Chris Li <chrisl@kernel.org>,
	Yosry Ahmed <yosryahmed@google.com>,
	"Huang, Ying" <ying.huang@linux.alibaba.com>,
	Nhat Pham <nphamcs@gmail.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	linux-kernel@vger.kernel.org, Kairui Song <kasong@tencent.com>
Subject: [PATCH 4/6] filemap: do not use folio_contains for swap cache folios
Date: Mon, 28 Apr 2025 02:59:06 +0800	[thread overview]
Message-ID: <20250427185908.90450-5-ryncsn@gmail.com> (raw)
In-Reply-To: <20250427185908.90450-1-ryncsn@gmail.com>

From: Kairui Song <kasong@tencent.com>

Currently, none of the folio_contains callers will encounter swap
cache folios.

For fs/ callers, swap cache folios are never part of their workflow.

For filemap and truncate, folio_contains is only used for sanity checks
to verify the folio index matches the expected lookup/invalidation target.
The swap cache does not utilize filemap or truncate helpers in ways that
would trigger these checks, as it mostly implements its own cache management.

Shmem won't interact with these sanity checks either unless thing went
wrong, it would directly trigger a BUG, because swap cache index are
unrelated to shmem index, and would almost certainly mismatch (unless
on collide).

While some filemap helpers works for swap cache space, the swap cache
is different from the page cache in many ways. So this helper will
unlikely to work in a helpful way for swap cache folios.

So make it explicit here that folio_contains should not be used for
swap cache folios. This helps to avoid misuse and remove the folio_index
usage here.

Signed-off-by: Kairui Song <kasong@tencent.com>
---
 include/linux/pagemap.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index af25fb640463..a0bed4568c66 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -935,14 +935,14 @@ static inline struct page *folio_file_page(struct folio *folio, pgoff_t index)
  * @folio: The folio.
  * @index: The page index within the file.
  *
- * Context: The caller should have the page locked in order to prevent
- * (eg) shmem from moving the page between the page cache and swap cache
- * and changing its index in the middle of the operation.
+ * Context: The caller should ensure folio->index is stable and it's
+ * not added to the swap cache.
  * Return: true or false.
  */
 static inline bool folio_contains(struct folio *folio, pgoff_t index)
 {
-	return index - folio_index(folio) < folio_nr_pages(folio);
+	VM_BUG_ON_FOLIO(folio_test_swapcache(folio), folio);
+	return index - folio->index < folio_nr_pages(folio);
 }
 
 unsigned filemap_get_folios(struct address_space *mapping, pgoff_t *start,
-- 
2.49.0



  parent reply	other threads:[~2025-04-27 19:00 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-27 18:59 [PATCH 0/6] mm, swap: clean up swap cache mapping helper Kairui Song
2025-04-27 18:59 ` [PATCH 1/6] fuse: drop usage of folio_index Kairui Song
2025-04-28  0:37   ` Matthew Wilcox
2025-04-29  8:54     ` Kairui Song
2025-04-27 18:59 ` [PATCH 2/6] btrfs: " Kairui Song
2025-04-28  0:38   ` Matthew Wilcox
2025-04-28  0:54   ` Qu Wenruo
2025-04-28  2:14     ` Kairui Song
2025-04-27 18:59 ` [PATCH 3/6] f2fs: " Kairui Song
2025-04-28  0:41   ` Matthew Wilcox
2025-04-28  2:15     ` Kairui Song
2025-06-09 20:56   ` [f2fs-dev] " patchwork-bot+f2fs
2025-04-27 18:59 ` Kairui Song [this message]
2025-04-28  0:44   ` [PATCH 4/6] filemap: do not use folio_contains for swap cache folios Matthew Wilcox
2025-04-28  2:58     ` Kairui Song
2025-04-28 18:54       ` Kairui Song
2025-04-27 18:59 ` [PATCH 5/6] mm: move folio_index to mm/swap.h and remove no longer needed helper Kairui Song
2025-04-27 21:37   ` kernel test robot
2025-04-27 22:19   ` kernel test robot
2025-04-27 23:58   ` Matthew Wilcox
2025-04-28  3:14     ` Kairui Song
2025-04-27 18:59 ` [PATCH 6/6] mm, swap: remove no longer used swap mapping helper Kairui Song
2025-04-28  0:31   ` Matthew Wilcox
2025-04-27 19:02 ` [PATCH 0/6] mm, swap: clean up swap cache " Kairui Song
2025-04-28  0:34 ` Matthew Wilcox

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=20250427185908.90450-5-ryncsn@gmail.com \
    --to=ryncsn@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chrisl@kernel.org \
    --cc=david@redhat.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=kasong@tencent.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nphamcs@gmail.com \
    --cc=willy@infradead.org \
    --cc=ying.huang@linux.alibaba.com \
    --cc=yosryahmed@google.com \
    /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