diff options
Diffstat (limited to 'fs/btrfs/tree-checker.c')
-rw-r--r-- | fs/btrfs/tree-checker.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c index db835635372f..cab0b1f1f741 100644 --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c | |||
@@ -487,6 +487,13 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
487 | u32 nritems = btrfs_header_nritems(leaf); | 487 | u32 nritems = btrfs_header_nritems(leaf); |
488 | int slot; | 488 | int slot; |
489 | 489 | ||
490 | if (btrfs_header_level(leaf) != 0) { | ||
491 | generic_err(fs_info, leaf, 0, | ||
492 | "invalid level for leaf, have %d expect 0", | ||
493 | btrfs_header_level(leaf)); | ||
494 | return -EUCLEAN; | ||
495 | } | ||
496 | |||
490 | /* | 497 | /* |
491 | * Extent buffers from a relocation tree have a owner field that | 498 | * Extent buffers from a relocation tree have a owner field that |
492 | * corresponds to the subvolume tree they are based on. So just from an | 499 | * corresponds to the subvolume tree they are based on. So just from an |
@@ -645,9 +652,16 @@ int btrfs_check_node(struct btrfs_fs_info *fs_info, struct extent_buffer *node) | |||
645 | unsigned long nr = btrfs_header_nritems(node); | 652 | unsigned long nr = btrfs_header_nritems(node); |
646 | struct btrfs_key key, next_key; | 653 | struct btrfs_key key, next_key; |
647 | int slot; | 654 | int slot; |
655 | int level = btrfs_header_level(node); | ||
648 | u64 bytenr; | 656 | u64 bytenr; |
649 | int ret = 0; | 657 | int ret = 0; |
650 | 658 | ||
659 | if (level <= 0 || level >= BTRFS_MAX_LEVEL) { | ||
660 | generic_err(fs_info, node, 0, | ||
661 | "invalid level for node, have %d expect [1, %d]", | ||
662 | level, BTRFS_MAX_LEVEL - 1); | ||
663 | return -EUCLEAN; | ||
664 | } | ||
651 | if (nr == 0 || nr > BTRFS_NODEPTRS_PER_BLOCK(fs_info)) { | 665 | if (nr == 0 || nr > BTRFS_NODEPTRS_PER_BLOCK(fs_info)) { |
652 | btrfs_crit(fs_info, | 666 | btrfs_crit(fs_info, |
653 | "corrupt node: root=%llu block=%llu, nritems too %s, have %lu expect range [1,%u]", | 667 | "corrupt node: root=%llu block=%llu, nritems too %s, have %lu expect range [1,%u]", |