]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
udf: stop using write_cache_pages
authorChristoph Hellwig <hch@lst.de>
Fri, 11 Jul 2025 08:10:36 +0000 (10:10 +0200)
committerJan Kara <jack@suse.cz>
Fri, 11 Jul 2025 16:50:45 +0000 (18:50 +0200)
Stop using the obsolete write_cache_pages and use writeback_iter directly.
Use the chance to refactor the inacb writeback code to not have a separate
writeback helper.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20250711081036.564232-1-hch@lst.de
fs/udf/inode.c

index 4386dd845e40097da75ba8325a12d5c69a37ad36..c0975d5dec251bdc64dde6f949ca904ecf834924 100644 (file)
@@ -181,19 +181,23 @@ static void udf_write_failed(struct address_space *mapping, loff_t to)
        }
 }
 
-static int udf_adinicb_writepage(struct folio *folio,
-                                struct writeback_control *wbc, void *data)
+static int udf_adinicb_writepages(struct address_space *mapping,
+                     struct writeback_control *wbc)
 {
-       struct inode *inode = folio->mapping->host;
+       struct inode *inode = mapping->host;
        struct udf_inode_info *iinfo = UDF_I(inode);
+       struct folio *folio = NULL;
+       int error = 0;
+
+       while ((folio = writeback_iter(mapping, wbc, folio, &error))) {
+               BUG_ON(!folio_test_locked(folio));
+               BUG_ON(folio->index != 0);
+               memcpy_from_file_folio(iinfo->i_data + iinfo->i_lenEAttr, folio,
+                               0, i_size_read(inode));
+               folio_unlock(folio);
+       }
 
-       BUG_ON(!folio_test_locked(folio));
-       BUG_ON(folio->index != 0);
-       memcpy_from_file_folio(iinfo->i_data + iinfo->i_lenEAttr, folio, 0,
-                      i_size_read(inode));
-       folio_unlock(folio);
        mark_inode_dirty(inode);
-
        return 0;
 }
 
@@ -203,9 +207,9 @@ static int udf_writepages(struct address_space *mapping,
        struct inode *inode = mapping->host;
        struct udf_inode_info *iinfo = UDF_I(inode);
 
-       if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB)
-               return mpage_writepages(mapping, wbc, udf_get_block_wb);
-       return write_cache_pages(mapping, wbc, udf_adinicb_writepage, NULL);
+       if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
+               return udf_adinicb_writepages(mapping, wbc);
+       return mpage_writepages(mapping, wbc, udf_get_block_wb);
 }
 
 static void udf_adinicb_read_folio(struct folio *folio)