writeback: use the folio_batch queue iterator
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 15 Feb 2024 06:36:46 +0000 (07:36 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 24 Feb 2024 01:48:37 +0000 (17:48 -0800)
Instead of keeping our own local iterator variable, use the one just added
to folio_batch.

Link: https://lkml.kernel.org/r/20240215063649.2164017-12-hch@lst.de
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Acked-by: Dave Chinner <dchinner@redhat.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page-writeback.c

index 358ce3ade9ad1e4f7b2d21f1056c333c00e32ce1..3cbe4a7daa357c9291eeaa48f4d3c13531921358 100644 (file)
@@ -2406,13 +2406,21 @@ static pgoff_t wbc_end(struct writeback_control *wbc)
        return wbc->range_end >> PAGE_SHIFT;
 }
 
-static void writeback_get_batch(struct address_space *mapping,
+static struct folio *writeback_get_folio(struct address_space *mapping,
                struct writeback_control *wbc)
 {
-       folio_batch_release(&wbc->fbatch);
-       cond_resched();
-       filemap_get_folios_tag(mapping, &wbc->index, wbc_end(wbc),
-                       wbc_to_tag(wbc), &wbc->fbatch);
+       struct folio *folio;
+
+       folio = folio_batch_next(&wbc->fbatch);
+       if (!folio) {
+               folio_batch_release(&wbc->fbatch);
+               cond_resched();
+               filemap_get_folios_tag(mapping, &wbc->index, wbc_end(wbc),
+                               wbc_to_tag(wbc), &wbc->fbatch);
+               folio = folio_batch_next(&wbc->fbatch);
+       }
+
+       return folio;
 }
 
 /**
@@ -2454,7 +2462,6 @@ int write_cache_pages(struct address_space *mapping,
        int error;
        struct folio *folio;
        pgoff_t end;            /* Inclusive */
-       int i = 0;
 
        if (wbc->range_cyclic) {
                wbc->index = mapping->writeback_index; /* prev offset */
@@ -2469,15 +2476,10 @@ int write_cache_pages(struct address_space *mapping,
        folio_batch_init(&wbc->fbatch);
 
        for (;;) {
-               if (i == wbc->fbatch.nr) {
-                       writeback_get_batch(mapping, wbc);
-                       i = 0;
-               }
-               if (wbc->fbatch.nr == 0)
+               folio = writeback_get_folio(mapping, wbc);
+               if (!folio)
                        break;
 
-               folio = wbc->fbatch.folios[i++];
-
                folio_lock(folio);
                if (!folio_prepare_writeback(mapping, wbc, folio)) {
                        folio_unlock(folio);