diff options
Diffstat (limited to 'fs/btrfs/tree-checker.c')
-rw-r--r-- | fs/btrfs/tree-checker.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c index ae4361cc6db5..4ee1102b554a 100644 --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c | |||
@@ -41,12 +41,12 @@ | |||
41 | * Append generic "corrupt leaf/node root=%llu block=%llu slot=%d: " to @fmt. | 41 | * Append generic "corrupt leaf/node root=%llu block=%llu slot=%d: " to @fmt. |
42 | * Allows callers to customize the output. | 42 | * Allows callers to customize the output. |
43 | */ | 43 | */ |
44 | __printf(4, 5) | 44 | __printf(3, 4) |
45 | __cold | 45 | __cold |
46 | static void generic_err(const struct btrfs_fs_info *fs_info, | 46 | static void generic_err(const struct extent_buffer *eb, int slot, |
47 | const struct extent_buffer *eb, int slot, | ||
48 | const char *fmt, ...) | 47 | const char *fmt, ...) |
49 | { | 48 | { |
49 | const struct btrfs_fs_info *fs_info = eb->fs_info; | ||
50 | struct va_format vaf; | 50 | struct va_format vaf; |
51 | va_list args; | 51 | va_list args; |
52 | 52 | ||
@@ -196,19 +196,19 @@ static int check_csum_item(struct btrfs_fs_info *fs_info, | |||
196 | u32 csumsize = btrfs_super_csum_size(fs_info->super_copy); | 196 | u32 csumsize = btrfs_super_csum_size(fs_info->super_copy); |
197 | 197 | ||
198 | if (key->objectid != BTRFS_EXTENT_CSUM_OBJECTID) { | 198 | if (key->objectid != BTRFS_EXTENT_CSUM_OBJECTID) { |
199 | generic_err(fs_info, leaf, slot, | 199 | generic_err(leaf, slot, |
200 | "invalid key objectid for csum item, have %llu expect %llu", | 200 | "invalid key objectid for csum item, have %llu expect %llu", |
201 | key->objectid, BTRFS_EXTENT_CSUM_OBJECTID); | 201 | key->objectid, BTRFS_EXTENT_CSUM_OBJECTID); |
202 | return -EUCLEAN; | 202 | return -EUCLEAN; |
203 | } | 203 | } |
204 | if (!IS_ALIGNED(key->offset, sectorsize)) { | 204 | if (!IS_ALIGNED(key->offset, sectorsize)) { |
205 | generic_err(fs_info, leaf, slot, | 205 | generic_err(leaf, slot, |
206 | "unaligned key offset for csum item, have %llu should be aligned to %u", | 206 | "unaligned key offset for csum item, have %llu should be aligned to %u", |
207 | key->offset, sectorsize); | 207 | key->offset, sectorsize); |
208 | return -EUCLEAN; | 208 | return -EUCLEAN; |
209 | } | 209 | } |
210 | if (!IS_ALIGNED(btrfs_item_size_nr(leaf, slot), csumsize)) { | 210 | if (!IS_ALIGNED(btrfs_item_size_nr(leaf, slot), csumsize)) { |
211 | generic_err(fs_info, leaf, slot, | 211 | generic_err(leaf, slot, |
212 | "unaligned item size for csum item, have %u should be aligned to %u", | 212 | "unaligned item size for csum item, have %u should be aligned to %u", |
213 | btrfs_item_size_nr(leaf, slot), csumsize); | 213 | btrfs_item_size_nr(leaf, slot), csumsize); |
214 | return -EUCLEAN; | 214 | return -EUCLEAN; |
@@ -695,7 +695,7 @@ static int check_inode_item(struct btrfs_fs_info *fs_info, | |||
695 | key->objectid > BTRFS_LAST_FREE_OBJECTID) && | 695 | key->objectid > BTRFS_LAST_FREE_OBJECTID) && |
696 | key->objectid != BTRFS_ROOT_TREE_DIR_OBJECTID && | 696 | key->objectid != BTRFS_ROOT_TREE_DIR_OBJECTID && |
697 | key->objectid != BTRFS_FREE_INO_OBJECTID) { | 697 | key->objectid != BTRFS_FREE_INO_OBJECTID) { |
698 | generic_err(fs_info, leaf, slot, | 698 | generic_err(leaf, slot, |
699 | "invalid key objectid: has %llu expect %llu or [%llu, %llu] or %llu", | 699 | "invalid key objectid: has %llu expect %llu or [%llu, %llu] or %llu", |
700 | key->objectid, BTRFS_ROOT_TREE_DIR_OBJECTID, | 700 | key->objectid, BTRFS_ROOT_TREE_DIR_OBJECTID, |
701 | BTRFS_FIRST_FREE_OBJECTID, | 701 | BTRFS_FIRST_FREE_OBJECTID, |
@@ -819,7 +819,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
819 | int slot; | 819 | int slot; |
820 | 820 | ||
821 | if (btrfs_header_level(leaf) != 0) { | 821 | if (btrfs_header_level(leaf) != 0) { |
822 | generic_err(fs_info, leaf, 0, | 822 | generic_err(leaf, 0, |
823 | "invalid level for leaf, have %d expect 0", | 823 | "invalid level for leaf, have %d expect 0", |
824 | btrfs_header_level(leaf)); | 824 | btrfs_header_level(leaf)); |
825 | return -EUCLEAN; | 825 | return -EUCLEAN; |
@@ -844,7 +844,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
844 | owner == BTRFS_DEV_TREE_OBJECTID || | 844 | owner == BTRFS_DEV_TREE_OBJECTID || |
845 | owner == BTRFS_FS_TREE_OBJECTID || | 845 | owner == BTRFS_FS_TREE_OBJECTID || |
846 | owner == BTRFS_DATA_RELOC_TREE_OBJECTID) { | 846 | owner == BTRFS_DATA_RELOC_TREE_OBJECTID) { |
847 | generic_err(fs_info, leaf, 0, | 847 | generic_err(leaf, 0, |
848 | "invalid root, root %llu must never be empty", | 848 | "invalid root, root %llu must never be empty", |
849 | owner); | 849 | owner); |
850 | return -EUCLEAN; | 850 | return -EUCLEAN; |
@@ -864,7 +864,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
864 | eb = btrfs_root_node(check_root); | 864 | eb = btrfs_root_node(check_root); |
865 | /* if leaf is the root, then it's fine */ | 865 | /* if leaf is the root, then it's fine */ |
866 | if (leaf != eb) { | 866 | if (leaf != eb) { |
867 | generic_err(fs_info, leaf, 0, | 867 | generic_err(leaf, 0, |
868 | "invalid nritems, have %u should not be 0 for non-root leaf", | 868 | "invalid nritems, have %u should not be 0 for non-root leaf", |
869 | nritems); | 869 | nritems); |
870 | free_extent_buffer(eb); | 870 | free_extent_buffer(eb); |
@@ -897,7 +897,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
897 | 897 | ||
898 | /* Make sure the keys are in the right order */ | 898 | /* Make sure the keys are in the right order */ |
899 | if (btrfs_comp_cpu_keys(&prev_key, &key) >= 0) { | 899 | if (btrfs_comp_cpu_keys(&prev_key, &key) >= 0) { |
900 | generic_err(fs_info, leaf, slot, | 900 | generic_err(leaf, slot, |
901 | "bad key order, prev (%llu %u %llu) current (%llu %u %llu)", | 901 | "bad key order, prev (%llu %u %llu) current (%llu %u %llu)", |
902 | prev_key.objectid, prev_key.type, | 902 | prev_key.objectid, prev_key.type, |
903 | prev_key.offset, key.objectid, key.type, | 903 | prev_key.offset, key.objectid, key.type, |
@@ -916,7 +916,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
916 | item_end_expected = btrfs_item_offset_nr(leaf, | 916 | item_end_expected = btrfs_item_offset_nr(leaf, |
917 | slot - 1); | 917 | slot - 1); |
918 | if (btrfs_item_end_nr(leaf, slot) != item_end_expected) { | 918 | if (btrfs_item_end_nr(leaf, slot) != item_end_expected) { |
919 | generic_err(fs_info, leaf, slot, | 919 | generic_err(leaf, slot, |
920 | "unexpected item end, have %u expect %u", | 920 | "unexpected item end, have %u expect %u", |
921 | btrfs_item_end_nr(leaf, slot), | 921 | btrfs_item_end_nr(leaf, slot), |
922 | item_end_expected); | 922 | item_end_expected); |
@@ -930,7 +930,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
930 | */ | 930 | */ |
931 | if (btrfs_item_end_nr(leaf, slot) > | 931 | if (btrfs_item_end_nr(leaf, slot) > |
932 | BTRFS_LEAF_DATA_SIZE(fs_info)) { | 932 | BTRFS_LEAF_DATA_SIZE(fs_info)) { |
933 | generic_err(fs_info, leaf, slot, | 933 | generic_err(leaf, slot, |
934 | "slot end outside of leaf, have %u expect range [0, %u]", | 934 | "slot end outside of leaf, have %u expect range [0, %u]", |
935 | btrfs_item_end_nr(leaf, slot), | 935 | btrfs_item_end_nr(leaf, slot), |
936 | BTRFS_LEAF_DATA_SIZE(fs_info)); | 936 | BTRFS_LEAF_DATA_SIZE(fs_info)); |
@@ -940,7 +940,7 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf, | |||
940 | /* Also check if the item pointer overlaps with btrfs item. */ | 940 | /* Also check if the item pointer overlaps with btrfs item. */ |
941 | if (btrfs_item_nr_offset(slot) + sizeof(struct btrfs_item) > | 941 | if (btrfs_item_nr_offset(slot) + sizeof(struct btrfs_item) > |
942 | btrfs_item_ptr_offset(leaf, slot)) { | 942 | btrfs_item_ptr_offset(leaf, slot)) { |
943 | generic_err(fs_info, leaf, slot, | 943 | generic_err(leaf, slot, |
944 | "slot overlaps with its data, item end %lu data start %lu", | 944 | "slot overlaps with its data, item end %lu data start %lu", |
945 | btrfs_item_nr_offset(slot) + | 945 | btrfs_item_nr_offset(slot) + |
946 | sizeof(struct btrfs_item), | 946 | sizeof(struct btrfs_item), |
@@ -988,7 +988,7 @@ int btrfs_check_node(struct btrfs_fs_info *fs_info, struct extent_buffer *node) | |||
988 | int ret = 0; | 988 | int ret = 0; |
989 | 989 | ||
990 | if (level <= 0 || level >= BTRFS_MAX_LEVEL) { | 990 | if (level <= 0 || level >= BTRFS_MAX_LEVEL) { |
991 | generic_err(fs_info, node, 0, | 991 | generic_err(node, 0, |
992 | "invalid level for node, have %d expect [1, %d]", | 992 | "invalid level for node, have %d expect [1, %d]", |
993 | level, BTRFS_MAX_LEVEL - 1); | 993 | level, BTRFS_MAX_LEVEL - 1); |
994 | return -EUCLEAN; | 994 | return -EUCLEAN; |
@@ -1008,13 +1008,13 @@ int btrfs_check_node(struct btrfs_fs_info *fs_info, struct extent_buffer *node) | |||
1008 | btrfs_node_key_to_cpu(node, &next_key, slot + 1); | 1008 | btrfs_node_key_to_cpu(node, &next_key, slot + 1); |
1009 | 1009 | ||
1010 | if (!bytenr) { | 1010 | if (!bytenr) { |
1011 | generic_err(fs_info, node, slot, | 1011 | generic_err(node, slot, |
1012 | "invalid NULL node pointer"); | 1012 | "invalid NULL node pointer"); |
1013 | ret = -EUCLEAN; | 1013 | ret = -EUCLEAN; |
1014 | goto out; | 1014 | goto out; |
1015 | } | 1015 | } |
1016 | if (!IS_ALIGNED(bytenr, fs_info->sectorsize)) { | 1016 | if (!IS_ALIGNED(bytenr, fs_info->sectorsize)) { |
1017 | generic_err(fs_info, node, slot, | 1017 | generic_err(node, slot, |
1018 | "unaligned pointer, have %llu should be aligned to %u", | 1018 | "unaligned pointer, have %llu should be aligned to %u", |
1019 | bytenr, fs_info->sectorsize); | 1019 | bytenr, fs_info->sectorsize); |
1020 | ret = -EUCLEAN; | 1020 | ret = -EUCLEAN; |
@@ -1022,7 +1022,7 @@ int btrfs_check_node(struct btrfs_fs_info *fs_info, struct extent_buffer *node) | |||
1022 | } | 1022 | } |
1023 | 1023 | ||
1024 | if (btrfs_comp_cpu_keys(&key, &next_key) >= 0) { | 1024 | if (btrfs_comp_cpu_keys(&key, &next_key) >= 0) { |
1025 | generic_err(fs_info, node, slot, | 1025 | generic_err(node, slot, |
1026 | "bad key order, current (%llu %u %llu) next (%llu %u %llu)", | 1026 | "bad key order, current (%llu %u %llu) next (%llu %u %llu)", |
1027 | key.objectid, key.type, key.offset, | 1027 | key.objectid, key.type, key.offset, |
1028 | next_key.objectid, next_key.type, | 1028 | next_key.objectid, next_key.type, |