diff options
author | Daniel J Blueman <daniel.blueman@gmail.com> | 2011-06-23 11:01:01 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2011-10-20 12:10:50 -0400 |
commit | 068132bad1de70f85f5f6d12c36d64f8f7848d92 (patch) | |
tree | 7e4a4a164b8153cf463662fbc2ce00f5671f4fa6 | |
parent | 60d2adbb1e7fee1cb4bc67f70bd0bd8ace7b6c3c (diff) |
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: Daniel J Blueman <daniel.blueman@gmail.com>
-rw-r--r-- | fs/btrfs/print-tree.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c index fb2605d998e9..f38e452486b8 100644 --- a/fs/btrfs/print-tree.c +++ b/fs/btrfs/print-tree.c | |||
@@ -158,8 +158,7 @@ static void print_extent_ref_v0(struct extent_buffer *eb, int slot) | |||
158 | void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) | 158 | void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) |
159 | { | 159 | { |
160 | int i; | 160 | int i; |
161 | u32 type; | 161 | u32 type, nr; |
162 | u32 nr = btrfs_header_nritems(l); | ||
163 | struct btrfs_item *item; | 162 | struct btrfs_item *item; |
164 | struct btrfs_root_item *ri; | 163 | struct btrfs_root_item *ri; |
165 | struct btrfs_dir_item *di; | 164 | struct btrfs_dir_item *di; |
@@ -172,6 +171,11 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) | |||
172 | struct btrfs_key key; | 171 | struct btrfs_key key; |
173 | struct btrfs_key found_key; | 172 | struct btrfs_key found_key; |
174 | 173 | ||
174 | if (!l) | ||
175 | return; | ||
176 | |||
177 | nr = btrfs_header_nritems(l); | ||
178 | |||
175 | printk(KERN_INFO "leaf %llu total ptrs %d free space %d\n", | 179 | printk(KERN_INFO "leaf %llu total ptrs %d free space %d\n", |
176 | (unsigned long long)btrfs_header_bytenr(l), nr, | 180 | (unsigned long long)btrfs_header_bytenr(l), nr, |
177 | btrfs_leaf_free_space(root, l)); | 181 | btrfs_leaf_free_space(root, l)); |