Commit e6d0ab87 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton

writeback: use the folio_batch queue iterator

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.deSigned-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Acked-by: default avatarDave Chinner <dchinner@redhat.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 535c5d9d
...@@ -2406,13 +2406,21 @@ static pgoff_t wbc_end(struct writeback_control *wbc) ...@@ -2406,13 +2406,21 @@ static pgoff_t wbc_end(struct writeback_control *wbc)
return wbc->range_end >> PAGE_SHIFT; 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) struct writeback_control *wbc)
{ {
folio_batch_release(&wbc->fbatch); struct folio *folio;
cond_resched();
filemap_get_folios_tag(mapping, &wbc->index, wbc_end(wbc), folio = folio_batch_next(&wbc->fbatch);
wbc_to_tag(wbc), &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, ...@@ -2454,7 +2462,6 @@ int write_cache_pages(struct address_space *mapping,
int error; int error;
struct folio *folio; struct folio *folio;
pgoff_t end; /* Inclusive */ pgoff_t end; /* Inclusive */
int i = 0;
if (wbc->range_cyclic) { if (wbc->range_cyclic) {
wbc->index = mapping->writeback_index; /* prev offset */ wbc->index = mapping->writeback_index; /* prev offset */
...@@ -2469,15 +2476,10 @@ int write_cache_pages(struct address_space *mapping, ...@@ -2469,15 +2476,10 @@ int write_cache_pages(struct address_space *mapping,
folio_batch_init(&wbc->fbatch); folio_batch_init(&wbc->fbatch);
for (;;) { for (;;) {
if (i == wbc->fbatch.nr) { folio = writeback_get_folio(mapping, wbc);
writeback_get_batch(mapping, wbc); if (!folio)
i = 0;
}
if (wbc->fbatch.nr == 0)
break; break;
folio = wbc->fbatch.folios[i++];
folio_lock(folio); folio_lock(folio);
if (!folio_prepare_writeback(mapping, wbc, folio)) { if (!folio_prepare_writeback(mapping, wbc, folio)) {
folio_unlock(folio); folio_unlock(folio);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment