btrfs: subpage: prepare for large data folios
authorQu Wenruo <wqu@suse.com>
Mon, 17 Mar 2025 07:10:51 +0000 (17:40 +1030)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:42 +0000 (14:30 +0200)
The subpage handling code has two locations not supporting large folios:

- btrfs_attach_subpage()
  Which is doing a metadata specific ASSERT() check.

  But for the future large data folios support, that check is too
  generic.  Since it's metadata specific, only check the ASSERT() for
  metadata.

- btrfs_subpage_assert()
  Just remove the "ASSERT(folio_order(folio) == 0)" check.

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

index c0a0b8b063d08598f8f36b58f8f8d5182f7b803f..d4f0192334936c1bbd09afe632dd38901b1c6840 100644 (file)
@@ -69,7 +69,8 @@ int btrfs_attach_subpage(const struct btrfs_fs_info *fs_info,
        struct btrfs_subpage *subpage;
 
        /* For metadata we don't support large folio yet. */
-       ASSERT(!folio_test_large(folio));
+       if (type == BTRFS_SUBPAGE_METADATA)
+               ASSERT(!folio_test_large(folio));
 
        /*
         * We have cases like a dummy extent buffer page, which is not mapped
@@ -181,9 +182,6 @@ void btrfs_folio_dec_eb_refs(const struct btrfs_fs_info *fs_info, struct folio *
 static void btrfs_subpage_assert(const struct btrfs_fs_info *fs_info,
                                 struct folio *folio, u64 start, u32 len)
 {
-       /* For subpage support, the folio must be single page. */
-       ASSERT(folio_order(folio) == 0);
-
        /* Basic checks */
        ASSERT(folio_test_private(folio) && folio_get_private(folio));
        ASSERT(IS_ALIGNED(start, fs_info->sectorsize) &&