* [PATCH] reiserfs: Convert to writepages
@ 2024-03-05 18:52 Matthew Wilcox (Oracle)
2024-03-05 18:53 ` Matthew Wilcox
2024-03-06 12:28 ` Jan Kara
0 siblings, 2 replies; 5+ messages in thread
From: Matthew Wilcox (Oracle) @ 2024-03-05 18:52 UTC (permalink / raw)
To: reiserfs_wait_on_write_block
Cc: Matthew Wilcox (Oracle), linux-fsdevel, Jan Kara
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: Matthew Wilcox (Oracle) <willy@infradead.org>
---
fs/reiserfs/inode.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index 1d825459ee6e..c1daedc50f4c 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -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,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] reiserfs: Convert to writepages
2024-03-05 18:52 [PATCH] reiserfs: Convert to writepages Matthew Wilcox (Oracle)
@ 2024-03-05 18:53 ` Matthew Wilcox
2024-04-11 18:08 ` Matthew Wilcox
2024-03-06 12:28 ` Jan Kara
1 sibling, 1 reply; 5+ messages in thread
From: Matthew Wilcox @ 2024-03-05 18:53 UTC (permalink / raw)
To: reiserfs-devel; +Cc: linux-fsdevel, Jan Kara
Apologies, copy-and-paste error on the email address.
On Tue, Mar 05, 2024 at 06:52:05PM +0000, Matthew Wilcox (Oracle) wrote:
> 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: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
> fs/reiserfs/inode.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
> index 1d825459ee6e..c1daedc50f4c 100644
> --- a/fs/reiserfs/inode.c
> +++ b/fs/reiserfs/inode.c
> @@ -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,
> };
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] reiserfs: Convert to writepages
2024-03-05 18:52 [PATCH] reiserfs: Convert to writepages Matthew Wilcox (Oracle)
2024-03-05 18:53 ` Matthew Wilcox
@ 2024-03-06 12:28 ` Jan Kara
1 sibling, 0 replies; 5+ messages in thread
From: Jan Kara @ 2024-03-06 12:28 UTC (permalink / raw)
To: Matthew Wilcox (Oracle)
Cc: reiserfs_wait_on_write_block, linux-fsdevel, Jan Kara
On Tue 05-03-24 18:52:05, Matthew Wilcox (Oracle) wrote:
> 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: Matthew Wilcox (Oracle) <willy@infradead.org>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
Honza
> ---
> fs/reiserfs/inode.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
> index 1d825459ee6e..c1daedc50f4c 100644
> --- a/fs/reiserfs/inode.c
> +++ b/fs/reiserfs/inode.c
> @@ -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,
> };
> --
> 2.43.0
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] reiserfs: Convert to writepages
2024-03-05 18:53 ` Matthew Wilcox
@ 2024-04-11 18:08 ` Matthew Wilcox
2024-04-12 12:38 ` Jan Kara
0 siblings, 1 reply; 5+ messages in thread
From: Matthew Wilcox @ 2024-04-11 18:08 UTC (permalink / raw)
To: reiserfs-devel; +Cc: linux-fsdevel, Jan Kara
On Tue, Mar 05, 2024 at 06:53:08PM +0000, Matthew Wilcox wrote:
> On Tue, Mar 05, 2024 at 06:52:05PM +0000, Matthew Wilcox (Oracle) wrote:
> > 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: Matthew Wilcox (Oracle) <willy@infradead.org>
This patch is not yet in linux-next. Do I need to do anything to
make that happen?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] reiserfs: Convert to writepages
2024-04-11 18:08 ` Matthew Wilcox
@ 2024-04-12 12:38 ` Jan Kara
0 siblings, 0 replies; 5+ messages in thread
From: Jan Kara @ 2024-04-12 12:38 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: reiserfs-devel, linux-fsdevel, Jan Kara
On Thu 11-04-24 19:08:50, Matthew Wilcox wrote:
> On Tue, Mar 05, 2024 at 06:53:08PM +0000, Matthew Wilcox wrote:
> > On Tue, Mar 05, 2024 at 06:52:05PM +0000, Matthew Wilcox (Oracle) wrote:
> > > 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: Matthew Wilcox (Oracle) <willy@infradead.org>
>
> This patch is not yet in linux-next. Do I need to do anything to
> make that happen?
Hum, usually Andrew picks these up but he was not on CC this time. Queued
into my tree.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-04-12 12:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-05 18:52 [PATCH] reiserfs: Convert to writepages Matthew Wilcox (Oracle)
2024-03-05 18:53 ` Matthew Wilcox
2024-04-11 18:08 ` Matthew Wilcox
2024-04-12 12:38 ` Jan Kara
2024-03-06 12:28 ` Jan Kara
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).