If folios were freed from under us, there's no need to reclaim them. Skip these folios to save lots of cpu cycles and avoid possible unnecessary disk IO. Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> --- mm/vmscan.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index f7d9a683e3a7..646dd1efad32 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1556,12 +1556,18 @@ static unsigned int shrink_page_list(struct list_head *page_list, folio = lru_to_folio(page_list); list_del(&folio->lru); + nr_pages = folio_nr_pages(folio); + if (folio_ref_count(folio) == 1) { + /* folio was freed from under us. So we are done. */ + WARN_ON(!folio_put_testzero(folio)); + goto free_it; + } + if (!folio_trylock(folio)) goto keep; VM_BUG_ON_FOLIO(folio_test_active(folio), folio); - nr_pages = folio_nr_pages(folio); /* Account the number of base pages */ sc->nr_scanned += nr_pages; -- 2.23.0