Skip to content

Commit 49990d8

Browse files
adam900710kdave
authored andcommitted
btrfs: prepare btrfs_page_mkwrite() for large folios
This changes the assumption that the folio is always page sized. (Although the ASSERT() for folio order is still kept as-is). Just replace the PAGE_SIZE with folio_size(). Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent ebaa602 commit 49990d8

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

fs/btrfs/file.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,6 +1782,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
17821782
struct extent_changeset *data_reserved = NULL;
17831783
unsigned long zero_start;
17841784
loff_t size;
1785+
size_t fsize = folio_size(folio);
17851786
vm_fault_t ret;
17861787
int ret2;
17871788
int reserved = 0;
@@ -1792,7 +1793,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
17921793

17931794
ASSERT(folio_order(folio) == 0);
17941795

1795-
reserved_space = PAGE_SIZE;
1796+
reserved_space = fsize;
17961797

17971798
sb_start_pagefault(inode->i_sb);
17981799
page_start = folio_pos(folio);
@@ -1846,7 +1847,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
18461847
* We can't set the delalloc bits if there are pending ordered
18471848
* extents. Drop our locks and wait for them to finish.
18481849
*/
1849-
ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, PAGE_SIZE);
1850+
ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, fsize);
18501851
if (ordered) {
18511852
unlock_extent(io_tree, page_start, page_end, &cached_state);
18521853
folio_unlock(folio);
@@ -1858,11 +1859,11 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
18581859

18591860
if (folio->index == ((size - 1) >> PAGE_SHIFT)) {
18601861
reserved_space = round_up(size - page_start, fs_info->sectorsize);
1861-
if (reserved_space < PAGE_SIZE) {
1862+
if (reserved_space < fsize) {
18621863
end = page_start + reserved_space - 1;
18631864
btrfs_delalloc_release_space(BTRFS_I(inode),
18641865
data_reserved, page_start,
1865-
PAGE_SIZE - reserved_space, true);
1866+
fsize - reserved_space, true);
18661867
}
18671868
}
18681869

@@ -1889,12 +1890,12 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
18891890
if (page_start + folio_size(folio) > size)
18901891
zero_start = offset_in_folio(folio, size);
18911892
else
1892-
zero_start = PAGE_SIZE;
1893+
zero_start = fsize;
18931894

1894-
if (zero_start != PAGE_SIZE)
1895+
if (zero_start != fsize)
18951896
folio_zero_range(folio, zero_start, folio_size(folio) - zero_start);
18961897

1897-
btrfs_folio_clear_checked(fs_info, folio, page_start, PAGE_SIZE);
1898+
btrfs_folio_clear_checked(fs_info, folio, page_start, fsize);
18981899
btrfs_folio_set_dirty(fs_info, folio, page_start, end + 1 - page_start);
18991900
btrfs_folio_set_uptodate(fs_info, folio, page_start, end + 1 - page_start);
19001901

@@ -1903,7 +1904,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
19031904
unlock_extent(io_tree, page_start, page_end, &cached_state);
19041905
up_read(&BTRFS_I(inode)->i_mmap_lock);
19051906

1906-
btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE);
1907+
btrfs_delalloc_release_extents(BTRFS_I(inode), fsize);
19071908
sb_end_pagefault(inode->i_sb);
19081909
extent_changeset_free(data_reserved);
19091910
return VM_FAULT_LOCKED;
@@ -1912,7 +1913,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
19121913
folio_unlock(folio);
19131914
up_read(&BTRFS_I(inode)->i_mmap_lock);
19141915
out:
1915-
btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE);
1916+
btrfs_delalloc_release_extents(BTRFS_I(inode), fsize);
19161917
btrfs_delalloc_release_space(BTRFS_I(inode), data_reserved, page_start,
19171918
reserved_space, (ret != 0));
19181919
out_noreserve:

0 commit comments

Comments
 (0)