btrfs: utilize folio more in btrfs_page_mkwrite()
authorJosef Bacik <josef@toxicpanda.com>
Wed, 24 Jul 2024 19:24:35 +0000 (15:24 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 10 Sep 2024 14:51:14 +0000 (16:51 +0200)
We already have a folio that we're using in btrfs_page_mkwrite, update
the rest of the function to use folio everywhere else.  This will make
it easier on Willy when he drops page->index.

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/file.c

index 2aeb811..c7a7234 100644 (file)
@@ -1920,8 +1920,8 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
        reserved_space = PAGE_SIZE;
 
        sb_start_pagefault(inode->i_sb);
-       page_start = page_offset(page);
-       page_end = page_start + PAGE_SIZE - 1;
+       page_start = folio_pos(folio);
+       page_end = page_start + folio_size(folio) - 1;
        end = page_end;
 
        /*
@@ -1949,18 +1949,18 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
        ret = VM_FAULT_NOPAGE;
 again:
        down_read(&BTRFS_I(inode)->i_mmap_lock);
-       lock_page(page);
+       folio_lock(folio);
        size = i_size_read(inode);
 
-       if ((page->mapping != inode->i_mapping) ||
+       if ((folio->mapping != inode->i_mapping) ||
            (page_start >= size)) {
                /* Page got truncated out from underneath us. */
                goto out_unlock;
        }
-       wait_on_page_writeback(page);
+       folio_wait_writeback(folio);
 
        lock_extent(io_tree, page_start, page_end, &cached_state);
-       ret2 = set_page_extent_mapped(page);
+       ret2 = set_folio_extent_mapped(folio);
        if (ret2 < 0) {
                ret = vmf_error(ret2);
                unlock_extent(io_tree, page_start, page_end, &cached_state);
@@ -1974,14 +1974,14 @@ again:
        ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, PAGE_SIZE);
        if (ordered) {
                unlock_extent(io_tree, page_start, page_end, &cached_state);
-               unlock_page(page);
+               folio_unlock(folio);
                up_read(&BTRFS_I(inode)->i_mmap_lock);
                btrfs_start_ordered_extent(ordered);
                btrfs_put_ordered_extent(ordered);
                goto again;
        }
 
-       if (page->index == ((size - 1) >> PAGE_SHIFT)) {
+       if (folio->index == ((size - 1) >> PAGE_SHIFT)) {
                reserved_space = round_up(size - page_start, fs_info->sectorsize);
                if (reserved_space < PAGE_SIZE) {
                        end = page_start + reserved_space - 1;
@@ -2011,13 +2011,13 @@ again:
        }
 
        /* Page is wholly or partially inside EOF. */
-       if (page_start + PAGE_SIZE > size)
-               zero_start = offset_in_page(size);
+       if (page_start + folio_size(folio) > size)
+               zero_start = offset_in_folio(folio, size);
        else
                zero_start = PAGE_SIZE;
 
        if (zero_start != PAGE_SIZE)
-               memzero_page(page, zero_start, PAGE_SIZE - zero_start);
+               folio_zero_range(folio, zero_start, folio_size(folio) - zero_start);
 
        btrfs_folio_clear_checked(fs_info, folio, page_start, PAGE_SIZE);
        btrfs_folio_set_dirty(fs_info, folio, page_start, end + 1 - page_start);
@@ -2034,7 +2034,7 @@ again:
        return VM_FAULT_LOCKED;
 
 out_unlock:
-       unlock_page(page);
+       folio_unlock(folio);
        up_read(&BTRFS_I(inode)->i_mmap_lock);
 out:
        btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE);