vmscan: convert the writeback handling in shrink_page_list() to folios
[linux-2.6-block.git] / mm / mmu_gather.c
index afb7185ffdc45484dd578e6a6763693aa0b68388..a71924bd38c0de1b734016300a96da047d126a51 100644 (file)
@@ -47,8 +47,20 @@ static void tlb_batch_pages_flush(struct mmu_gather *tlb)
        struct mmu_gather_batch *batch;
 
        for (batch = &tlb->local; batch && batch->nr; batch = batch->next) {
-               free_pages_and_swap_cache(batch->pages, batch->nr);
-               batch->nr = 0;
+               struct page **pages = batch->pages;
+
+               do {
+                       /*
+                        * limit free batch count when PAGE_SIZE > 4K
+                        */
+                       unsigned int nr = min(512U, batch->nr);
+
+                       free_pages_and_swap_cache(pages, nr);
+                       pages += nr;
+                       batch->nr -= nr;
+
+                       cond_resched();
+               } while (batch->nr);
        }
        tlb->active = &tlb->local;
 }