]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
writeback: Remove a use of write_cache_pages() from do_writepages() writeback-iter
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 26 Jun 2023 17:18:13 +0000 (13:18 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 28 Jun 2023 19:15:56 +0000 (15:15 -0400)
Use the new for_each_writeback_folio() directly instead of indirecting
through a callback.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
mm/page-writeback.c

index 7ee4deb3eef0f70ca033aacf4e7e510eb266f45f..72bf0db7e0b75bb3e13f65f9c04e6cf7fc556151 100644 (file)
@@ -2558,13 +2558,21 @@ int write_cache_pages(struct address_space *mapping,
 }
 EXPORT_SYMBOL(write_cache_pages);
 
-static int writepage_cb(struct folio *folio, struct writeback_control *wbc,
-               void *data)
+static int writeback_use_writepage(struct address_space *mapping,
+               struct writeback_control *wbc)
 {
-       struct address_space *mapping = data;
-       int ret = mapping->a_ops->writepage(&folio->page, wbc);
-       mapping_set_error(mapping, ret);
-       return ret;
+       struct blk_plug plug;
+       struct folio *folio;
+       int err;
+
+       blk_start_plug(&plug);
+       for_each_writeback_folio(mapping, wbc, folio, err) {
+               err = mapping->a_ops->writepage(&folio->page, wbc);
+               mapping_set_error(mapping, err);
+       }
+       blk_finish_plug(&plug);
+
+       return err;
 }
 
 int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
@@ -2580,12 +2588,7 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
                if (mapping->a_ops->writepages) {
                        ret = mapping->a_ops->writepages(mapping, wbc);
                } else if (mapping->a_ops->writepage) {
-                       struct blk_plug plug;
-
-                       blk_start_plug(&plug);
-                       ret = write_cache_pages(mapping, wbc, writepage_cb,
-                                               mapping);
-                       blk_finish_plug(&plug);
+                       ret = writeback_use_writepage(mapping, wbc);
                } else {
                        /* deal with chardevs and other special files */
                        ret = 0;