linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: [PATCH 07/23] buffer: Convert block_write_end() to take a folio
Date: Wed, 17 Jul 2024 16:46:57 +0100	[thread overview]
Message-ID: <20240717154716.237943-8-willy@infradead.org> (raw)
In-Reply-To: <20240717154716.237943-1-willy@infradead.org>

All callers now have a folio, so pass it in instead of converting
from a folio to a page and back to a folio again.  Saves a call
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 block/fops.c                | 2 +-
 fs/buffer.c                 | 5 ++---
 fs/ext2/dir.c               | 2 +-
 fs/ext4/inode.c             | 4 ++--
 fs/iomap/buffered-io.c      | 2 +-
 fs/minix/dir.c              | 2 +-
 fs/nilfs2/dir.c             | 2 +-
 fs/nilfs2/recovery.c        | 2 +-
 fs/sysv/dir.c               | 2 +-
 fs/ufs/dir.c                | 2 +-
 include/linux/buffer_head.h | 4 ++--
 11 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/block/fops.c b/block/fops.c
index da44fedb23e5..df0e762cf397 100644
--- a/block/fops.c
+++ b/block/fops.c
@@ -462,7 +462,7 @@ static int blkdev_write_end(struct file *file, struct address_space *mapping,
 {
 	struct folio *folio = page_folio(page);
 	int ret;
-	ret = block_write_end(file, mapping, pos, len, copied, page, fsdata);
+	ret = block_write_end(file, mapping, pos, len, copied, folio, fsdata);
 
 	folio_unlock(folio);
 	folio_put(folio);
diff --git a/fs/buffer.c b/fs/buffer.c
index 448338810802..acba3dfe55d8 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -2247,9 +2247,8 @@ EXPORT_SYMBOL(block_write_begin);
 
 int block_write_end(struct file *file, struct address_space *mapping,
 			loff_t pos, unsigned len, unsigned copied,
-			struct page *page, void *fsdata)
+			struct folio *folio, void *fsdata)
 {
-	struct folio *folio = page_folio(page);
 	size_t start = pos - folio_pos(folio);
 
 	if (unlikely(copied < len)) {
@@ -2288,7 +2287,7 @@ int generic_write_end(struct file *file, struct address_space *mapping,
 	loff_t old_size = inode->i_size;
 	bool i_size_changed = false;
 
-	copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
+	copied = block_write_end(file, mapping, pos, len, copied, folio, fsdata);
 
 	/*
 	 * No need to use i_size_read() here, the i_size cannot change under us
diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c
index 087457061c6e..60605fbdd0eb 100644
--- a/fs/ext2/dir.c
+++ b/fs/ext2/dir.c
@@ -87,7 +87,7 @@ static void ext2_commit_chunk(struct folio *folio, loff_t pos, unsigned len)
 	struct inode *dir = mapping->host;
 
 	inode_inc_iversion(dir);
-	block_write_end(NULL, mapping, pos, len, len, &folio->page, NULL);
+	block_write_end(NULL, mapping, pos, len, len, folio, NULL);
 
 	if (pos+len > dir->i_size) {
 		i_size_write(dir, pos+len);
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 941c1c0d5c6e..1e4831d83adc 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1315,7 +1315,7 @@ static int ext4_write_end(struct file *file,
 		return ext4_write_inline_data_end(inode, pos, len, copied,
 						  folio);
 
-	copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
+	copied = block_write_end(file, mapping, pos, len, copied, folio, fsdata);
 	/*
 	 * it's important to update i_size while still holding folio lock:
 	 * page writeout could otherwise come in and zero beyond i_size.
@@ -3029,7 +3029,7 @@ static int ext4_da_do_write_end(struct address_space *mapping,
 	 * flag, which all that's needed to trigger page writeback.
 	 */
 	copied = block_write_end(NULL, mapping, pos, len, copied,
-			&folio->page, NULL);
+			folio, NULL);
 	new_i_size = pos + copied;
 
 	/*
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index f420c53d86ac..9b4ca3811a24 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -900,7 +900,7 @@ static bool iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len,
 		size_t bh_written;
 
 		bh_written = block_write_end(NULL, iter->inode->i_mapping, pos,
-					len, copied, &folio->page, NULL);
+					len, copied, folio, NULL);
 		WARN_ON_ONCE(bh_written != copied && bh_written != 0);
 		return bh_written == copied;
 	}
diff --git a/fs/minix/dir.c b/fs/minix/dir.c
index 5f9e2fc91003..dd2a425b41f0 100644
--- a/fs/minix/dir.c
+++ b/fs/minix/dir.c
@@ -45,7 +45,7 @@ static void dir_commit_chunk(struct folio *folio, loff_t pos, unsigned len)
 	struct address_space *mapping = folio->mapping;
 	struct inode *dir = mapping->host;
 
-	block_write_end(NULL, mapping, pos, len, len, &folio->page, NULL);
+	block_write_end(NULL, mapping, pos, len, len, folio, NULL);
 
 	if (pos+len > dir->i_size) {
 		i_size_write(dir, pos+len);
diff --git a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c
index 4a29b0138d75..66af42f88ca7 100644
--- a/fs/nilfs2/dir.c
+++ b/fs/nilfs2/dir.c
@@ -96,7 +96,7 @@ static void nilfs_commit_chunk(struct folio *folio,
 	int err;
 
 	nr_dirty = nilfs_page_count_clean_buffers(&folio->page, from, to);
-	copied = block_write_end(NULL, mapping, pos, len, len, &folio->page, NULL);
+	copied = block_write_end(NULL, mapping, pos, len, len, folio, NULL);
 	if (pos + copied > dir->i_size)
 		i_size_write(dir, pos + copied);
 	if (IS_DIRSYNC(dir))
diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c
index 15653701b1c8..40c5dfbc9d41 100644
--- a/fs/nilfs2/recovery.c
+++ b/fs/nilfs2/recovery.c
@@ -533,7 +533,7 @@ static int nilfs_recover_dsync_blocks(struct the_nilfs *nilfs,
 			goto failed_page;
 
 		block_write_end(NULL, inode->i_mapping, pos, blocksize,
-				blocksize, page, NULL);
+				blocksize, folio, NULL);
 
 		folio_unlock(folio);
 		folio_put(folio);
diff --git a/fs/sysv/dir.c b/fs/sysv/dir.c
index 27eaa5273ba7..639307e2ff8c 100644
--- a/fs/sysv/dir.c
+++ b/fs/sysv/dir.c
@@ -33,7 +33,7 @@ static void dir_commit_chunk(struct folio *folio, loff_t pos, unsigned len)
 	struct address_space *mapping = folio->mapping;
 	struct inode *dir = mapping->host;
 
-	block_write_end(NULL, mapping, pos, len, len, &folio->page, NULL);
+	block_write_end(NULL, mapping, pos, len, len, folio, NULL);
 	if (pos+len > dir->i_size) {
 		i_size_write(dir, pos+len);
 		mark_inode_dirty(dir);
diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c
index 3b3cd84f1f7f..1579561118f5 100644
--- a/fs/ufs/dir.c
+++ b/fs/ufs/dir.c
@@ -48,7 +48,7 @@ static void ufs_commit_chunk(struct folio *folio, loff_t pos, unsigned len)
 	struct inode *dir = mapping->host;
 
 	inode_inc_iversion(dir);
-	block_write_end(NULL, mapping, pos, len, len, &folio->page, NULL);
+	block_write_end(NULL, mapping, pos, len, len, folio, NULL);
 	if (pos+len > dir->i_size) {
 		i_size_write(dir, pos+len);
 		mark_inode_dirty(dir);
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
index 14acf1bbe0ce..3a3fec154536 100644
--- a/include/linux/buffer_head.h
+++ b/include/linux/buffer_head.h
@@ -262,8 +262,8 @@ int block_write_begin(struct address_space *mapping, loff_t pos, unsigned len,
 int __block_write_begin(struct page *page, loff_t pos, unsigned len,
 		get_block_t *get_block);
 int block_write_end(struct file *, struct address_space *,
-				loff_t, unsigned, unsigned,
-				struct page *, void *);
+				loff_t, unsigned len, unsigned copied,
+				struct folio *, void *);
 int generic_write_end(struct file *, struct address_space *,
 				loff_t, unsigned, unsigned,
 				struct page *, void *);
-- 
2.43.0


  parent reply	other threads:[~2024-07-17 15:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-17 15:46 [PATCH 00/23] Convert write_begin / write_end to take a folio Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 01/23] reiserfs: Convert grab_tail_page() to use " Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 02/23] reiserfs: Convert reiserfs_write_begin() " Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 03/23] block: Use a folio in blkdev_write_end() Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 04/23] buffer: Use a folio in generic_write_end() Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 05/23] nilfs2: Use a folio in nilfs_recover_dsync_blocks() Matthew Wilcox (Oracle)
2024-07-18 17:14   ` Ryusuke Konishi
2024-07-17 15:46 ` [PATCH 06/23] ntfs3: Remove reset_log_file() Matthew Wilcox (Oracle)
2024-07-17 15:46 ` Matthew Wilcox (Oracle) [this message]
2024-07-17 15:46 ` [PATCH 08/23] ecryptfs: Convert ecryptfs_write_end() to use a folio Matthew Wilcox (Oracle)
2024-07-17 15:46 ` [PATCH 09/23] ecryptfs: Use a folio in ecryptfs_write_begin() Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 10/23] f2fs: Convert f2fs_write_end() to use a folio Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 11/23] f2fs: Convert f2fs_write_begin() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 12/23] fuse: Convert fuse_write_end() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 13/23] fuse: Convert fuse_write_begin() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 14/23] hostfs: Convert hostfs_write_end() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 15/23] jffs2: Convert jffs2_write_end() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 16/23] jffs2: Convert jffs2_write_begin() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 17/23] orangefs: Convert orangefs_write_end() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 18/23] orangefs: Convert orangefs_write_begin() " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 19/23] vboxsf: Use a folio in vboxsf_write_end() Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 20/23] fs: Convert aops->write_end to take a folio Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 21/23] fs: Convert aops->write_begin " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 22/23] ocfs2: Convert ocfs2_write_zero_page to use " Matthew Wilcox (Oracle)
2024-07-17 15:47 ` [PATCH 23/23] buffer: Convert __block_write_begin() to take " Matthew Wilcox (Oracle)
2024-07-18 15:24 ` [PATCH 00/23] Convert write_begin / write_end " Josef Bacik
2024-07-23  7:49 ` Christian Brauner
2024-07-23 13:20   ` Matthew Wilcox
2024-07-23 13:41     ` Christian Brauner
2024-07-23 22:54       ` Matthew Wilcox
2024-07-30 14:23         ` Christian Brauner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240717154716.237943-8-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).