summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-checker.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/tree-checker.c')
-rw-r--r--fs/btrfs/tree-checker.c36
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
46static void generic_err(const struct btrfs_fs_info *fs_info, 46static 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,