]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: Convert block_write_begin() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 17 Apr 2024 03:58:48 +0000 (23:58 -0400)
committerChristian Brauner <brauner@kernel.org>
Wed, 7 Aug 2024 09:31:58 +0000 (11:31 +0200)
Use the folio APIs to retrieve the folio from the page cache and
manipulate it.  Saves a few conversions between pages & folios.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/buffer.c

index e55ad471c53060b041b428e6985ea9c0295151c8..a9aeb04da3981416ea2bbf639b86628e1723c8a0 100644 (file)
@@ -2225,21 +2225,22 @@ int block_write_begin(struct address_space *mapping, loff_t pos, unsigned len,
                struct page **pagep, get_block_t *get_block)
 {
        pgoff_t index = pos >> PAGE_SHIFT;
-       struct page *page;
+       struct folio *folio;
        int status;
 
-       page = grab_cache_page_write_begin(mapping, index);
-       if (!page)
-               return -ENOMEM;
+       folio = __filemap_get_folio(mapping, index, FGP_WRITEBEGIN,
+                       mapping_gfp_mask(mapping));
+       if (IS_ERR(folio))
+               return PTR_ERR(folio);
 
-       status = __block_write_begin(page, pos, len, get_block);
+       status = __block_write_begin_int(folio, pos, len, get_block, NULL);
        if (unlikely(status)) {
-               unlock_page(page);
-               put_page(page);
-               page = NULL;
+               folio_unlock(folio);
+               folio_put(folio);
+               folio = NULL;
        }
 
-       *pagep = page;
+       *pagep = &folio->page;
        return status;
 }
 EXPORT_SYMBOL(block_write_begin);