Commit 4f8cf60a authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Jan Kara

reiserfs: Convert to writepages

Use buffer_migrate_folio to handle folio migration instead of writing
out dirty pages and reading them back in again.  Use writepages to write
out folios more efficiently.  We now only do that wait_on_write_block
check once per call to writepages instead of once per page.  It would be
possible to do one transaction per writeback run, but that's a bit of a
big change to do to this old filesystem, so leave it as one transaction
per folio (and leave reiserfs supporting only one page per folio).
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Message-Id: <20240305185208.1200166-1-willy@infradead.org>
parent 3b84adf4
......@@ -2503,8 +2503,8 @@ static int map_block_for_writepage(struct inode *inode,
* start/recovery path as __block_write_full_folio, along with special
* code to handle reiserfs tails.
*/
static int reiserfs_write_full_folio(struct folio *folio,
struct writeback_control *wbc)
static int reiserfs_write_folio(struct folio *folio,
struct writeback_control *wbc, void *data)
{
struct inode *inode = folio->mapping->host;
unsigned long end_index = inode->i_size >> PAGE_SHIFT;
......@@ -2721,12 +2721,11 @@ static int reiserfs_read_folio(struct file *f, struct folio *folio)
return block_read_full_folio(folio, reiserfs_get_block);
}
static int reiserfs_writepage(struct page *page, struct writeback_control *wbc)
static int reiserfs_writepages(struct address_space *mapping,
struct writeback_control *wbc)
{
struct folio *folio = page_folio(page);
struct inode *inode = folio->mapping->host;
reiserfs_wait_on_write_block(inode->i_sb);
return reiserfs_write_full_folio(folio, wbc);
reiserfs_wait_on_write_block(mapping->host->i_sb);
return write_cache_pages(mapping, wbc, reiserfs_write_folio, NULL);
}
static void reiserfs_truncate_failed_write(struct inode *inode)
......@@ -3405,7 +3404,7 @@ int reiserfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
}
const struct address_space_operations reiserfs_address_space_operations = {
.writepage = reiserfs_writepage,
.writepages = reiserfs_writepages,
.read_folio = reiserfs_read_folio,
.readahead = reiserfs_readahead,
.release_folio = reiserfs_release_folio,
......@@ -3415,4 +3414,5 @@ const struct address_space_operations reiserfs_address_space_operations = {
.bmap = reiserfs_aop_bmap,
.direct_IO = reiserfs_direct_IO,
.dirty_folio = reiserfs_dirty_folio,
.migrate_folio = buffer_migrate_folio,
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment