• Home
  • Raw
  • Download

Lines Matching refs:leaf

100 #define CHECK_FE_ALIGNED(leaf, slot, fi, name, alignment)		      \  argument
102 if (!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), (alignment))) \
103 file_extent_err((leaf), (slot), \
105 (#name), btrfs_file_extent_##name((leaf), (fi)), \
107 (!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), (alignment))); \
110 static u64 file_extent_end(struct extent_buffer *leaf, in file_extent_end() argument
117 if (btrfs_file_extent_type(leaf, extent) == BTRFS_FILE_EXTENT_INLINE) { in file_extent_end()
118 len = btrfs_file_extent_ram_bytes(leaf, extent); in file_extent_end()
119 end = ALIGN(key->offset + len, leaf->fs_info->sectorsize); in file_extent_end()
121 len = btrfs_file_extent_num_bytes(leaf, extent); in file_extent_end()
127 static int check_extent_data_item(struct extent_buffer *leaf, in check_extent_data_item() argument
131 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_data_item()
134 u32 item_size = btrfs_item_size_nr(leaf, slot); in check_extent_data_item()
138 file_extent_err(leaf, slot, in check_extent_data_item()
144 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); in check_extent_data_item()
146 if (btrfs_file_extent_type(leaf, fi) > BTRFS_FILE_EXTENT_TYPES) { in check_extent_data_item()
147 file_extent_err(leaf, slot, in check_extent_data_item()
149 btrfs_file_extent_type(leaf, fi), in check_extent_data_item()
158 if (btrfs_file_extent_compression(leaf, fi) > BTRFS_COMPRESS_TYPES) { in check_extent_data_item()
159 file_extent_err(leaf, slot, in check_extent_data_item()
161 btrfs_file_extent_compression(leaf, fi), in check_extent_data_item()
165 if (btrfs_file_extent_encryption(leaf, fi)) { in check_extent_data_item()
166 file_extent_err(leaf, slot, in check_extent_data_item()
168 btrfs_file_extent_encryption(leaf, fi)); in check_extent_data_item()
171 if (btrfs_file_extent_type(leaf, fi) == BTRFS_FILE_EXTENT_INLINE) { in check_extent_data_item()
174 file_extent_err(leaf, slot, in check_extent_data_item()
181 if (btrfs_file_extent_compression(leaf, fi) != in check_extent_data_item()
187 btrfs_file_extent_ram_bytes(leaf, fi)) { in check_extent_data_item()
188 file_extent_err(leaf, slot, in check_extent_data_item()
191 btrfs_file_extent_ram_bytes(leaf, fi)); in check_extent_data_item()
199 file_extent_err(leaf, slot, in check_extent_data_item()
204 if (CHECK_FE_ALIGNED(leaf, slot, fi, ram_bytes, sectorsize) || in check_extent_data_item()
205 CHECK_FE_ALIGNED(leaf, slot, fi, disk_bytenr, sectorsize) || in check_extent_data_item()
206 CHECK_FE_ALIGNED(leaf, slot, fi, disk_num_bytes, sectorsize) || in check_extent_data_item()
207 CHECK_FE_ALIGNED(leaf, slot, fi, offset, sectorsize) || in check_extent_data_item()
208 CHECK_FE_ALIGNED(leaf, slot, fi, num_bytes, sectorsize)) in check_extent_data_item()
212 if (check_add_overflow(btrfs_file_extent_num_bytes(leaf, fi), in check_extent_data_item()
214 file_extent_err(leaf, slot, in check_extent_data_item()
217 btrfs_file_extent_num_bytes(leaf, fi)); in check_extent_data_item()
231 prev_fi = btrfs_item_ptr(leaf, slot - 1, in check_extent_data_item()
233 prev_end = file_extent_end(leaf, prev_key, prev_fi); in check_extent_data_item()
235 file_extent_err(leaf, slot - 1, in check_extent_data_item()
245 static int check_csum_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_csum_item() argument
248 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_csum_item()
253 generic_err(leaf, slot, in check_csum_item()
259 generic_err(leaf, slot, in check_csum_item()
264 if (!IS_ALIGNED(btrfs_item_size_nr(leaf, slot), csumsize)) { in check_csum_item()
265 generic_err(leaf, slot, in check_csum_item()
267 btrfs_item_size_nr(leaf, slot), csumsize); in check_csum_item()
274 prev_item_size = btrfs_item_size_nr(leaf, slot - 1); in check_csum_item()
278 generic_err(leaf, slot - 1, in check_csum_item()
315 static int check_dir_item(struct extent_buffer *leaf, in check_dir_item() argument
318 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_dir_item()
320 u32 item_size = btrfs_item_size_nr(leaf, slot); in check_dir_item()
323 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); in check_dir_item()
334 dir_item_err(leaf, slot, in check_dir_item()
341 dir_type = btrfs_dir_type(leaf, di); in check_dir_item()
343 dir_item_err(leaf, slot, in check_dir_item()
351 dir_item_err(leaf, slot, in check_dir_item()
358 dir_item_err(leaf, slot, in check_dir_item()
368 name_len = btrfs_dir_name_len(leaf, di); in check_dir_item()
369 data_len = btrfs_dir_data_len(leaf, di); in check_dir_item()
371 dir_item_err(leaf, slot, in check_dir_item()
377 dir_item_err(leaf, slot, in check_dir_item()
385 dir_item_err(leaf, slot, in check_dir_item()
395 dir_item_err(leaf, slot, in check_dir_item()
409 read_extent_buffer(leaf, namebuf, in check_dir_item()
413 dir_item_err(leaf, slot, in check_dir_item()
449 static int check_block_group_item(struct extent_buffer *leaf, in check_block_group_item() argument
453 u32 item_size = btrfs_item_size_nr(leaf, slot); in check_block_group_item()
462 block_group_err(leaf, slot, in check_block_group_item()
468 block_group_err(leaf, slot, in check_block_group_item()
474 read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot), in check_block_group_item()
478 block_group_err(leaf, slot, in check_block_group_item()
486 block_group_err(leaf, slot, in check_block_group_item()
494 block_group_err(leaf, slot, in check_block_group_item()
507 block_group_err(leaf, slot, in check_block_group_item()
520 static void chunk_err(const struct extent_buffer *leaf, in chunk_err() argument
524 const struct btrfs_fs_info *fs_info = leaf->fs_info; in chunk_err()
532 is_sb = (leaf->start == BTRFS_SUPER_INFO_OFFSET); in chunk_err()
539 for (i = 0; i < btrfs_header_nritems(leaf); i++) { in chunk_err()
540 if (btrfs_item_ptr_offset(leaf, i) == in chunk_err()
558 BTRFS_CHUNK_TREE_OBJECTID, leaf->start, slot, in chunk_err()
569 int btrfs_check_chunk_valid(struct extent_buffer *leaf, in btrfs_check_chunk_valid() argument
572 struct btrfs_fs_info *fs_info = leaf->fs_info; in btrfs_check_chunk_valid()
585 length = btrfs_chunk_length(leaf, chunk); in btrfs_check_chunk_valid()
586 stripe_len = btrfs_chunk_stripe_len(leaf, chunk); in btrfs_check_chunk_valid()
587 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in btrfs_check_chunk_valid()
588 sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk); in btrfs_check_chunk_valid()
589 type = btrfs_chunk_type(leaf, chunk); in btrfs_check_chunk_valid()
595 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
600 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
606 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
612 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
617 if (btrfs_chunk_sector_size(leaf, chunk) != fs_info->sectorsize) { in btrfs_check_chunk_valid()
618 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
620 btrfs_chunk_sector_size(leaf, chunk), in btrfs_check_chunk_valid()
625 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
630 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
636 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
643 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
647 btrfs_chunk_type(leaf, chunk)); in btrfs_check_chunk_valid()
653 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
659 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
667 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
680 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
692 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
708 static int check_leaf_chunk_item(struct extent_buffer *leaf, in check_leaf_chunk_item() argument
714 if (btrfs_item_size_nr(leaf, slot) < sizeof(struct btrfs_chunk)) { in check_leaf_chunk_item()
715 chunk_err(leaf, chunk, key->offset, in check_leaf_chunk_item()
717 btrfs_item_size_nr(leaf, slot), in check_leaf_chunk_item()
719 BTRFS_LEAF_DATA_SIZE(leaf->fs_info)); in check_leaf_chunk_item()
723 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in check_leaf_chunk_item()
729 btrfs_item_size_nr(leaf, slot)) { in check_leaf_chunk_item()
730 chunk_err(leaf, chunk, key->offset, in check_leaf_chunk_item()
732 btrfs_item_size_nr(leaf, slot), in check_leaf_chunk_item()
737 return btrfs_check_chunk_valid(leaf, chunk, key->offset); in check_leaf_chunk_item()
763 static int check_dev_item(struct extent_buffer *leaf, in check_dev_item() argument
769 dev_item_err(leaf, slot, in check_dev_item()
774 ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item); in check_dev_item()
775 if (btrfs_device_id(leaf, ditem) != key->offset) { in check_dev_item()
776 dev_item_err(leaf, slot, in check_dev_item()
778 key->offset, btrfs_device_id(leaf, ditem)); in check_dev_item()
787 if (btrfs_device_bytes_used(leaf, ditem) > in check_dev_item()
788 btrfs_device_total_bytes(leaf, ditem)) { in check_dev_item()
789 dev_item_err(leaf, slot, in check_dev_item()
791 btrfs_device_bytes_used(leaf, ditem), in check_dev_item()
792 btrfs_device_total_bytes(leaf, ditem)); in check_dev_item()
806 static int check_inode_item(struct extent_buffer *leaf, in check_inode_item() argument
809 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_inode_item()
819 generic_err(leaf, slot, in check_inode_item()
828 inode_item_err(fs_info, leaf, slot, in check_inode_item()
833 iitem = btrfs_item_ptr(leaf, slot, struct btrfs_inode_item); in check_inode_item()
836 if (btrfs_inode_generation(leaf, iitem) > super_gen + 1) { in check_inode_item()
837 inode_item_err(fs_info, leaf, slot, in check_inode_item()
839 btrfs_inode_generation(leaf, iitem), in check_inode_item()
844 if (btrfs_inode_transid(leaf, iitem) > super_gen + 1) { in check_inode_item()
845 inode_item_err(fs_info, leaf, slot, in check_inode_item()
847 btrfs_inode_transid(leaf, iitem), super_gen + 1); in check_inode_item()
856 mode = btrfs_inode_mode(leaf, iitem); in check_inode_item()
858 inode_item_err(fs_info, leaf, slot, in check_inode_item()
871 inode_item_err(fs_info, leaf, slot, in check_inode_item()
877 if (S_ISDIR(mode) && btrfs_inode_nlink(leaf, iitem) > 1) { in check_inode_item()
878 inode_item_err(fs_info, leaf, slot, in check_inode_item()
880 btrfs_inode_nlink(leaf, iitem)); in check_inode_item()
883 if (btrfs_inode_flags(leaf, iitem) & ~BTRFS_INODE_FLAG_MASK) { in check_inode_item()
884 inode_item_err(fs_info, leaf, slot, in check_inode_item()
886 btrfs_inode_flags(leaf, iitem) & in check_inode_item()
893 static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_item() argument
896 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_root_item()
903 generic_err(leaf, slot, "invalid root id 0"); in check_root_item()
913 generic_err(leaf, slot, "invalid root id 0 for reloc tree"); in check_root_item()
917 if (btrfs_item_size_nr(leaf, slot) != sizeof(ri) && in check_root_item()
918 btrfs_item_size_nr(leaf, slot) != btrfs_legacy_root_item_size()) { in check_root_item()
919 generic_err(leaf, slot, in check_root_item()
921 btrfs_item_size_nr(leaf, slot), sizeof(ri), in check_root_item()
931 read_extent_buffer(leaf, &ri, btrfs_item_ptr_offset(leaf, slot), in check_root_item()
932 btrfs_item_size_nr(leaf, slot)); in check_root_item()
937 generic_err(leaf, slot, in check_root_item()
945 generic_err(leaf, slot, in check_root_item()
953 generic_err(leaf, slot, in check_root_item()
962 generic_err(leaf, slot, in check_root_item()
968 generic_err(leaf, slot, in check_root_item()
974 generic_err(leaf, slot, in check_root_item()
982 generic_err(leaf, slot, in check_root_item()
1021 static int check_extent_item(struct extent_buffer *leaf, in check_extent_item() argument
1025 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_item()
1030 const u32 item_size = btrfs_item_size_nr(leaf, slot); in check_extent_item()
1038 generic_err(leaf, slot, in check_extent_item()
1044 generic_err(leaf, slot, in check_extent_item()
1053 extent_err(leaf, slot, in check_extent_item()
1079 extent_err(leaf, slot, in check_extent_item()
1085 end = item_size + btrfs_item_ptr_offset(leaf, slot); in check_extent_item()
1088 ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item); in check_extent_item()
1089 flags = btrfs_extent_flags(leaf, ei); in check_extent_item()
1090 total_refs = btrfs_extent_refs(leaf, ei); in check_extent_item()
1091 generation = btrfs_extent_generation(leaf, ei); in check_extent_item()
1093 extent_err(leaf, slot, in check_extent_item()
1101 extent_err(leaf, slot, in check_extent_item()
1111 extent_err(leaf, slot, in check_extent_item()
1118 extent_err(leaf, slot, in check_extent_item()
1124 extent_err(leaf, slot, in check_extent_item()
1137 if (btrfs_tree_block_level(leaf, info) >= BTRFS_MAX_LEVEL) { in check_extent_item()
1138 extent_err(leaf, slot, in check_extent_item()
1140 btrfs_tree_block_level(leaf, info), in check_extent_item()
1157 extent_err(leaf, slot, in check_extent_item()
1163 inline_type = btrfs_extent_inline_ref_type(leaf, iref); in check_extent_item()
1164 inline_offset = btrfs_extent_inline_ref_offset(leaf, iref); in check_extent_item()
1166 extent_err(leaf, slot, in check_extent_item()
1180 extent_err(leaf, slot, in check_extent_item()
1193 dref_offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_item()
1195 extent_err(leaf, slot, in check_extent_item()
1200 inline_refs += btrfs_extent_data_ref_count(leaf, dref); in check_extent_item()
1206 extent_err(leaf, slot, in check_extent_item()
1211 inline_refs += btrfs_shared_data_ref_count(leaf, sref); in check_extent_item()
1214 extent_err(leaf, slot, "unknown inline ref type: %u", in check_extent_item()
1222 extent_err(leaf, slot, in check_extent_item()
1229 extent_err(leaf, slot, in check_extent_item()
1245 extent_err(leaf, slot, in check_extent_item()
1257 static int check_simple_keyed_refs(struct extent_buffer *leaf, in check_simple_keyed_refs() argument
1265 if (btrfs_item_size_nr(leaf, slot) != expect_item_size) { in check_simple_keyed_refs()
1266 generic_err(leaf, slot, in check_simple_keyed_refs()
1268 btrfs_item_size_nr(leaf, slot), in check_simple_keyed_refs()
1272 if (!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize)) { in check_simple_keyed_refs()
1273 generic_err(leaf, slot, in check_simple_keyed_refs()
1275 key->objectid, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1279 !IS_ALIGNED(key->offset, leaf->fs_info->sectorsize)) { in check_simple_keyed_refs()
1280 extent_err(leaf, slot, in check_simple_keyed_refs()
1282 key->offset, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1288 static int check_extent_data_ref(struct extent_buffer *leaf, in check_extent_data_ref() argument
1292 unsigned long ptr = btrfs_item_ptr_offset(leaf, slot); in check_extent_data_ref()
1293 const unsigned long end = ptr + btrfs_item_size_nr(leaf, slot); in check_extent_data_ref()
1295 if (btrfs_item_size_nr(leaf, slot) % sizeof(*dref) != 0) { in check_extent_data_ref()
1296 generic_err(leaf, slot, in check_extent_data_ref()
1298 btrfs_item_size_nr(leaf, slot), in check_extent_data_ref()
1302 if (!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize)) { in check_extent_data_ref()
1303 generic_err(leaf, slot, in check_extent_data_ref()
1305 key->objectid, leaf->fs_info->sectorsize); in check_extent_data_ref()
1316 offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_data_ref()
1317 if (!IS_ALIGNED(offset, leaf->fs_info->sectorsize)) { in check_extent_data_ref()
1318 extent_err(leaf, slot, in check_extent_data_ref()
1320 offset, leaf->fs_info->sectorsize); in check_extent_data_ref()
1330 static int check_leaf_item(struct extent_buffer *leaf, in check_leaf_item() argument
1339 ret = check_extent_data_item(leaf, key, slot, prev_key); in check_leaf_item()
1342 ret = check_csum_item(leaf, key, slot, prev_key); in check_leaf_item()
1347 ret = check_dir_item(leaf, key, slot); in check_leaf_item()
1350 ret = check_block_group_item(leaf, key, slot); in check_leaf_item()
1353 chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk); in check_leaf_item()
1354 ret = check_leaf_chunk_item(leaf, chunk, key, slot); in check_leaf_item()
1357 ret = check_dev_item(leaf, key, slot); in check_leaf_item()
1360 ret = check_inode_item(leaf, key, slot); in check_leaf_item()
1363 ret = check_root_item(leaf, key, slot); in check_leaf_item()
1367 ret = check_extent_item(leaf, key, slot, prev_key); in check_leaf_item()
1372 ret = check_simple_keyed_refs(leaf, key, slot); in check_leaf_item()
1375 ret = check_extent_data_ref(leaf, key, slot); in check_leaf_item()
1381 static int check_leaf(struct extent_buffer *leaf, bool check_item_data) in check_leaf() argument
1383 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_leaf()
1387 u32 nritems = btrfs_header_nritems(leaf); in check_leaf()
1390 if (btrfs_header_level(leaf) != 0) { in check_leaf()
1391 generic_err(leaf, 0, in check_leaf()
1393 btrfs_header_level(leaf)); in check_leaf()
1405 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) { in check_leaf()
1406 u64 owner = btrfs_header_owner(leaf); in check_leaf()
1415 generic_err(leaf, 0, in check_leaf()
1422 generic_err(leaf, 0, in check_leaf()
1447 btrfs_item_key_to_cpu(leaf, &key, slot); in check_leaf()
1451 generic_err(leaf, slot, in check_leaf()
1467 item_end_expected = btrfs_item_offset_nr(leaf, in check_leaf()
1469 if (btrfs_item_end_nr(leaf, slot) != item_end_expected) { in check_leaf()
1470 generic_err(leaf, slot, in check_leaf()
1472 btrfs_item_end_nr(leaf, slot), in check_leaf()
1482 if (btrfs_item_end_nr(leaf, slot) > in check_leaf()
1484 generic_err(leaf, slot, in check_leaf()
1486 btrfs_item_end_nr(leaf, slot), in check_leaf()
1493 btrfs_item_ptr_offset(leaf, slot)) { in check_leaf()
1494 generic_err(leaf, slot, in check_leaf()
1498 btrfs_item_ptr_offset(leaf, slot)); in check_leaf()
1507 ret = check_leaf_item(leaf, &key, slot, &prev_key); in check_leaf()
1520 int btrfs_check_leaf_full(struct extent_buffer *leaf) in btrfs_check_leaf_full() argument
1522 return check_leaf(leaf, true); in btrfs_check_leaf_full()
1526 int btrfs_check_leaf_relaxed(struct extent_buffer *leaf) in btrfs_check_leaf_relaxed() argument
1528 return check_leaf(leaf, false); in btrfs_check_leaf_relaxed()