diff options
author | 2025-03-26 14:41:13 +1030 | |
---|---|---|
committer | 2025-04-17 11:55:17 +0200 | |
commit | cf6ae7ed091059a8d1a70cf184f18ebfd18ab4af (patch) | |
tree | 52df2995072a6928ef41dc5e9b7deaa53be554ae | |
parent | btrfs: remove folio order ASSERT()s in super block writeback path (diff) | |
download | wireguard-linux-cf6ae7ed091059a8d1a70cf184f18ebfd18ab4af.tar.xz wireguard-linux-cf6ae7ed091059a8d1a70cf184f18ebfd18ab4af.zip |
btrfs: subpage: access correct object when reading bitmap start in subpage_calc_start_bit()
Inside the macro, subpage_calc_start_bit(), we need to calculate the
offset to the beginning of the folio.
But we're using offset_in_page(), on systems with 4K page size and 4K fs
block size, this means we will always return offset 0 for a large folio,
causing all kinds of errors.
Fix it by using offset_in_folio() instead.
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | fs/btrfs/subpage.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c index 11dbd7be6a3b..bd252c78a261 100644 --- a/fs/btrfs/subpage.c +++ b/fs/btrfs/subpage.c @@ -204,7 +204,7 @@ static void btrfs_subpage_assert(const struct btrfs_fs_info *fs_info, btrfs_blocks_per_folio(fs_info, folio); \ \ btrfs_subpage_assert(fs_info, folio, start, len); \ - __start_bit = offset_in_page(start) >> fs_info->sectorsize_bits; \ + __start_bit = offset_in_folio(folio, start) >> fs_info->sectorsize_bits; \ __start_bit += blocks_per_folio * btrfs_bitmap_nr_##name; \ __start_bit; \ }) |