]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: output more info when btrfs_subpage_assert() failed
authorQu Wenruo <wqu@suse.com>
Wed, 16 Jul 2025 08:13:06 +0000 (17:43 +0930)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 23:13:03 +0000 (01:13 +0200)
The function btrfs_subpage_assert() is a very commonly utilized assert
to make sure the range passed in is correct inside the folio.

And when some code is not properly subpage/large folio compatible
btrfs_subpage_assert() will be the first to be triggered.
E.g. when I incorrectly enabled large folios for data reloc inodes, it
immediately triggered btrfs_subpage_assert().

In that case, outputting all the involved members will be very helpful,
this includes:

- start
- len
- folio position inside the mapping
- folio size

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 2c5c9262b1a83f136bfc84327c82d09f9cec5b70..c9b3821957f73ffcc6b2295f12fb942d86ac6287 100644 (file)
@@ -186,8 +186,9 @@ static void btrfs_subpage_assert(const struct btrfs_fs_info *fs_info,
         * unmapped page like dummy extent buffer pages.
         */
        if (folio->mapping)
-               ASSERT(folio_pos(folio) <= start &&
-                      start + len <= folio_end(folio));
+               ASSERT(folio_pos(folio) <= start && start + len <= folio_end(folio),
+                      "start=%llu len=%u folio_pos=%llu folio_size=%zu",
+                      start, len, folio_pos(folio), folio_size(folio));
 }
 
 #define subpage_calc_start_bit(fs_info, folio, name, start, len)       \