summaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2024-02-15 07:36:38 +0100
committerAndrew Morton <akpm@linux-foundation.org>2024-02-23 17:48:35 -0800
commita02829f011b64e6c102929ed55da52e38391e970 (patch)
tree1b70f609dc45b5279e8817c37f22e1a67ea57b0b /mm
parent2a6e1a8f4cf39cd3d10c52fca639a7d6f30b7004 (diff)
downloadlinux-stable-a02829f011b64e6c102929ed55da52e38391e970.tar.gz
linux-stable-a02829f011b64e6c102929ed55da52e38391e970.tar.bz2
linux-stable-a02829f011b64e6c102929ed55da52e38391e970.zip
writeback: fix done_index when hitting the wbc->nr_to_write
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>
Diffstat (limited to 'mm')
-rw-r--r--mm/page-writeback.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 703e83c69ffe..2679176da316 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -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) {