Re: [PATCH v2 03/15] mm, swap: fix swap cahe index error when retrying reclaim
From: David Hildenbrand
Date: Mon Sep 08 2025 - 07:45:35 EST
On 05.09.25 21:13, Kairui Song wrote:
From: Kairui Song <kasong@xxxxxxxxxxx>
Subject: s/cahe/cache/
The allocator will reclaim cached slots while scanning. Currently, it
will try again if the reclaim found a folio that is already removed from
s/the reclaim/reclaim/
the swap cache due to a race. But the following lookup will be using the
wrong index. It won't cause any OOB issue since the swap cache index is
truncated upon lookup, but it may lead to reclaiming of an irrelevant
folio.
This should not cause a measurable issue, but we should fix it.
Fixes: fae8595505313 ("mm, swap: avoid reclaiming irrelevant swap cache")
Signed-off-by: Kairui Song <kasong@xxxxxxxxxxx>
---
mm/swapfile.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 4b8ab2cb49ca..4c63fc62f4cb 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -240,13 +240,13 @@ static int __try_to_reclaim_swap(struct swap_info_struct *si,
* Offset could point to the middle of a large folio, or folio
* may no longer point to the expected offset before it's locked.
*/
- entry = folio->swap;
- if (offset < swp_offset(entry) || offset >= swp_offset(entry) + nr_pages) {
+ if (offset < swp_offset(folio->swap) ||
+ offset >= swp_offset(folio->swap) + nr_pages) {
folio_unlock(folio);
folio_put(folio);
goto again;
}
- offset = swp_offset(entry);
+ offset = swp_offset(folio->swap);
need_reclaim = ((flags & TTRS_ANYWAY) ||
((flags & TTRS_UNMAPPED) && !folio_mapped(folio)) ||
Acked-by: David Hildenbrand <david@xxxxxxxxxx>
--
Cheers
David / dhildenb