Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 068132ba authored by Daniel J Blueman's avatar Daniel J Blueman Committed by David Sterba
Browse files

btrfs: fix oops on failure path



If lookup_extent_backref fails, path->nodes[0] reasonably could be
null along with other callers of btrfs_print_leaf, so ensure we have a
valid extent buffer before dereferencing.

Signed-off-by: default avatarDaniel J Blueman <daniel.blueman@gmail.com>
parent 60d2adbb
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -158,8 +158,7 @@ static void print_extent_ref_v0(struct extent_buffer *eb, int slot)
void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
{
{
	int i;
	int i;
	u32 type;
	u32 type, nr;
	u32 nr = btrfs_header_nritems(l);
	struct btrfs_item *item;
	struct btrfs_item *item;
	struct btrfs_root_item *ri;
	struct btrfs_root_item *ri;
	struct btrfs_dir_item *di;
	struct btrfs_dir_item *di;
@@ -172,6 +171,11 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l)
	struct btrfs_key key;
	struct btrfs_key key;
	struct btrfs_key found_key;
	struct btrfs_key found_key;


	if (!l)
		return;

	nr = btrfs_header_nritems(l);

	printk(KERN_INFO "leaf %llu total ptrs %d free space %d\n",
	printk(KERN_INFO "leaf %llu total ptrs %d free space %d\n",
		(unsigned long long)btrfs_header_bytenr(l), nr,
		(unsigned long long)btrfs_header_bytenr(l), nr,
		btrfs_leaf_free_space(root, l));
		btrfs_leaf_free_space(root, l));