If we have a large folio in the swapcache and KSM declines to replace the folio, we must not recalculate the page. Suggested-by: David Hildenbrand <david@xxxxxxxxxx> Reported-by: kernel test robot <oliver.sang@xxxxxxxxx> Closes: https://lore.kernel.org/oe-lkp/202312192319.fa8f5709-oliver.sang@xxxxxxxxx Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> --- mm/memory.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/memory.c b/mm/memory.c index 6ca8a4518844..1e16f1b8b92d 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3952,7 +3952,8 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) folio = swapcache; goto out_page; } - page = folio_page(folio, 0); + if (folio != swapcache) + page = folio_page(folio, 0); /* * If we want to map a page that's in the swapcache writable, we -- 2.43.0