]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
buffer: Convert block_write_end() to take a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 10 Jul 2024 18:51:11 +0000 (14:51 -0400)
committerChristian Brauner <brauner@kernel.org>
Wed, 7 Aug 2024 09:31:59 +0000 (11:31 +0200)
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().

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
block/fops.c
fs/buffer.c
fs/ext2/dir.c
fs/ext4/inode.c
fs/iomap/buffered-io.c
fs/minix/dir.c
fs/nilfs2/dir.c
fs/nilfs2/recovery.c
fs/sysv/dir.c
fs/ufs/dir.c
include/linux/buffer_head.h

index da44fedb23e51ed418cc5d26b4927a15f93063eb..df0e762cf397ba57666d2591d735196c4c62dae1 100644 (file)
@@ -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);
index 4483388108021e52e7f39d528f3ed24d650dcba8..acba3dfe55d8f9f3dc5fef4ab6592459bc70c4d1 100644 (file)
@@ -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
index 087457061c6ef40fb3135d0f2dd0a1210ef454b8..60605fbdd0eb41d40cbbf96ccba9776cde3c9f6c 100644 (file)
@@ -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);
index 941c1c0d5c6ed93f5ce3ba7b6cbdeb98e3167c75..1e4831d83adcb9f0654d75951755f811dd782796 100644 (file)
@@ -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;
 
        /*
index f420c53d86acc5753a76c34e0c2a05ff9673f36f..9b4ca3811a2423c708b64aa67de4b2fb22d7172a 100644 (file)
@@ -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;
        }
index 5f9e2fc910032fd8acc246bff49e77dbe5aa9321..dd2a425b41f044872dc46e3d514f0a7ad77c8ac0 100644 (file)
@@ -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);
index 4a29b0138d75f5c07fc4c7e3cb4e419f3a34b0dd..66af42f88ca7921714c602b5ab68918ce4354675 100644 (file)
@@ -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))
index 15653701b1c81366e38684c774217aca425865ae..40c5dfbc9d41282e97a01d4b648da1bd772b9715 100644 (file)
@@ -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);
index 27eaa5273ba749ebf91a46a42c3ad46bd848234d..639307e2ff8c0403870a5eca3a49711a6b377f07 100644 (file)
@@ -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);
index 3b3cd84f1f7f674f540fd9e9d2474ef0d6ba9c7a..1579561118f50ec4a7464bc98637dce7a6907860 100644 (file)
@@ -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);
index 14acf1bbe0ce699236fd58406b1f96e1c7fac6b0..3a3fec154536b7b83b5d5eda5129193ab24049d7 100644 (file)
@@ -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 *);