btrfs-progs: allow btrfs_print_leaf to be called on dummy eb

In certain call sites, like btrfs-image, we want full extent_buffer
accessors, but don't have a btrfs_fs_info.

In that case, if an extent buffer whose fs_info is NULL, then
btrfs_print_leaf() is called on such eb, we will trigger a NULL pointer
dereference, at BTRFS_LEAF_DATA_SIZE(fs_info).

Fix this by using __BTRFS_LEAF_DATA_SIZE(), which only needs nodesize,
and nodesize can be extracted from extent_buffer::len.

This allows us to call btrfs_print_leaf() on any extent buffer, which is
super handy in gdb.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo 2020-05-27 18:28:05 +08:00 committed by David Sterba
parent ba689a384f
commit e9a17c3804

View File

@ -1201,7 +1201,7 @@ void btrfs_print_leaf(struct extent_buffer *eb)
struct btrfs_item *item;
struct btrfs_disk_key disk_key;
char flags_str[128];
u32 leaf_data_size = BTRFS_LEAF_DATA_SIZE(fs_info);
u32 leaf_data_size = __BTRFS_LEAF_DATA_SIZE(eb->len);
u32 i;
u32 nr;
u64 flags;