]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
btrfs: convert fallback_to_cow() to take a folio
authorJosef Bacik <josef@toxicpanda.com>
Wed, 24 Jul 2024 20:40:34 +0000 (16:40 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 10 Sep 2024 14:51:15 +0000 (16:51 +0200)
With this we can pass the folio directly into cow_file_range().

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index 6047fd35fe43f14a200c07b4fa7eaa18501cbc9a..534b1dec3752347812587d66de7e4df482b30569 100644 (file)
@@ -1763,8 +1763,9 @@ static noinline int run_delalloc_cow(struct btrfs_inode *inode,
        return 1;
 }
 
-static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page,
-                          const u64 start, const u64 end)
+static int fallback_to_cow(struct btrfs_inode *inode,
+                          struct folio *locked_folio, const u64 start,
+                          const u64 end)
 {
        const bool is_space_ino = btrfs_is_free_space_inode(inode);
        const bool is_reloc_ino = btrfs_is_data_reloc_root(inode->root);
@@ -1833,8 +1834,8 @@ static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page,
         * is written out and unlocked directly and a normal NOCOW extent
         * doesn't work.
         */
-       ret = cow_file_range(inode, page_folio(locked_page), start, end, NULL,
-                            false, true);
+       ret = cow_file_range(inode, locked_folio, start, end, NULL, false,
+                            true);
        ASSERT(ret != 1);
        return ret;
 }
@@ -2151,7 +2152,7 @@ must_cow:
                 * NOCOW, following one which needs to be COW'ed
                 */
                if (cow_start != (u64)-1) {
-                       ret = fallback_to_cow(inode, locked_page,
+                       ret = fallback_to_cow(inode, page_folio(locked_page),
                                              cow_start, found_key.offset - 1);
                        cow_start = (u64)-1;
                        if (ret) {
@@ -2230,7 +2231,8 @@ must_cow:
 
        if (cow_start != (u64)-1) {
                cur_offset = end;
-               ret = fallback_to_cow(inode, locked_page, cow_start, end);
+               ret = fallback_to_cow(inode, page_folio(locked_page), cow_start,
+                                     end);
                cow_start = (u64)-1;
                if (ret)
                        goto error;