Hi Andrew, I'd like to fix the bug[1] I mentioned previously. Could you please fold the following changes into this patch? [1] https://lore.kernel.org/linux-mm/20240613065521.15960-1-ioworker0@xxxxxxxxx/ diff --git a/mm/huge_memory.c b/mm/huge_memory.c index f409ea9fcc18..425374ae06ed 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2707,10 +2707,8 @@ static bool __discard_anon_folio_pmd_locked(struct vm_area_struct *vma, if (unlikely(page_folio(page) != folio)) return false; - if (folio_test_dirty(folio) || pmd_dirty(orig_pmd)) { - folio_set_swapbacked(folio); + if (folio_test_dirty(folio) || pmd_dirty(orig_pmd)) return false; - } orig_pmd = pmdp_huge_clear_flush(vma, addr, pmdp); @@ -2737,10 +2735,8 @@ static bool __discard_anon_folio_pmd_locked(struct vm_area_struct *vma, * * The only folio refs must be one from isolation plus the rmap(s). */ - if (folio_test_dirty(folio) || pmd_dirty(orig_pmd)) - folio_set_swapbacked(folio); - - if (folio_test_swapbacked(folio) || ref_count != map_count + 1) { + if (folio_test_dirty(folio) || pmd_dirty(orig_pmd) || + ref_count != map_count + 1) { set_pmd_at(mm, addr, pmdp, orig_pmd); return false; } diff --git a/mm/rmap.c b/mm/rmap.c index b9e5943c8349..393e2c11c44c 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1824,12 +1824,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, */ if (unlikely(folio_test_swapbacked(folio) != folio_test_swapcache(folio))) { - /* - * unmap_huge_pmd_locked() will unmark a - * PMD-mapped folio as lazyfree if the folio or - * its PMD was redirtied. - */ - WARN_ON_ONCE(!pmd_mapped); + WARN_ON_ONCE(1); goto walk_done_err; } -- Thanks, Lance