writeback: fix done_index when hitting the wbc->nr_to_write
authorChristoph Hellwig <hch@lst.de>
Thu, 15 Feb 2024 06:36:38 +0000 (07:36 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 24 Feb 2024 01:48:35 +0000 (17:48 -0800)
When write_cache_pages finishes writing out a folio, it fails to update
done_index to account for the number of pages in the folio just written.
That means when range_cyclic writeback is restarted, it will be restarted
at this folio instead of after it as it should.  Fix that by updating
done_index before breaking out of the loop.

Link: https://lkml.kernel.org/r/20240215063649.2164017-4-hch@lst.de
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>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page-writeback.c

index 703e83c69ffe0820fc327619539c7219cf797c13..2679176da316b39ed2d1335c30c4ea60c549291d 100644 (file)
@@ -2505,6 +2505,7 @@ continue_unlock:
                         * keep going until we have written all the pages
                         * we tagged for writeback prior to entering this loop.
                         */
+                       done_index = folio->index + nr;
                        wbc->nr_to_write -= nr;
                        if (wbc->nr_to_write <= 0 &&
                            wbc->sync_mode == WB_SYNC_NONE) {