Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

udf: stop using write_cache_pages

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

authored by

Christoph Hellwig and committed by
Jan Kara
185d3490 a099b09a

+16 -12
+16 -12
fs/udf/inode.c
··· 181 181 } 182 182 } 183 183 184 - static int udf_adinicb_writepage(struct folio *folio, 185 - struct writeback_control *wbc, void *data) 184 + static int udf_adinicb_writepages(struct address_space *mapping, 185 + struct writeback_control *wbc) 186 186 { 187 - struct inode *inode = folio->mapping->host; 187 + struct inode *inode = mapping->host; 188 188 struct udf_inode_info *iinfo = UDF_I(inode); 189 + struct folio *folio = NULL; 190 + int error = 0; 189 191 190 - BUG_ON(!folio_test_locked(folio)); 191 - BUG_ON(folio->index != 0); 192 - memcpy_from_file_folio(iinfo->i_data + iinfo->i_lenEAttr, folio, 0, 193 - i_size_read(inode)); 194 - folio_unlock(folio); 192 + while ((folio = writeback_iter(mapping, wbc, folio, &error))) { 193 + BUG_ON(!folio_test_locked(folio)); 194 + BUG_ON(folio->index != 0); 195 + memcpy_from_file_folio(iinfo->i_data + iinfo->i_lenEAttr, folio, 196 + 0, i_size_read(inode)); 197 + folio_unlock(folio); 198 + } 199 + 195 200 mark_inode_dirty(inode); 196 - 197 201 return 0; 198 202 } 199 203 ··· 207 203 struct inode *inode = mapping->host; 208 204 struct udf_inode_info *iinfo = UDF_I(inode); 209 205 210 - if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) 211 - return mpage_writepages(mapping, wbc, udf_get_block_wb); 212 - return write_cache_pages(mapping, wbc, udf_adinicb_writepage, NULL); 206 + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 207 + return udf_adinicb_writepages(mapping, wbc); 208 + return mpage_writepages(mapping, wbc, udf_get_block_wb); 213 209 } 214 210 215 211 static void udf_adinicb_read_folio(struct folio *folio)