btrfs: prepare btrfs_page_mkwrite() for large data folios
authorQu Wenruo <wqu@suse.com>
Mon, 17 Mar 2025 07:10:48 +0000 (17:40 +1030)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:42 +0000 (14:30 +0200)
The function btrfs_page_mkwrite() has an explicit ASSERT() checking the
folio order.

To make it support large data folios, we need to:

- Remove the ASSERT(folio_order(folio) == 0)

- Use folio_contains() to check if the folio covers the last page

Otherwise the code is already supporting large folios well.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/file.c

index cbe98e8251623c8215e85b8958352806487f8392..d024f31731dc1045a691edeaeb986b450755b57d 100644 (file)
@@ -1855,8 +1855,6 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
        u64 page_end;
        u64 end;
 
-       ASSERT(folio_order(folio) == 0);
-
        reserved_space = fsize;
 
        sb_start_pagefault(inode->i_sb);
@@ -1921,7 +1919,7 @@ again:
                goto again;
        }
 
-       if (folio->index == ((size - 1) >> PAGE_SHIFT)) {
+       if (folio_contains(folio, (size - 1) >> PAGE_SHIFT)) {
                reserved_space = round_up(size - page_start, fs_info->sectorsize);
                if (reserved_space < fsize) {
                        end = page_start + reserved_space - 1;