Lines Matching full:leaf

10  * The objective is to do leaf/node validation checks when tree block is read
38 * @type: leaf or node
39 * @identifier: the necessary info to locate the leaf/node.
51 * Append generic "corrupt leaf/node root=%llu block=%llu slot=%d: " to @fmt.
71 btrfs_header_level(eb) == 0 ? "leaf" : "node", in generic_err()
99 btrfs_header_level(eb) == 0 ? "leaf" : "node", in file_extent_err()
109 #define CHECK_FE_ALIGNED(leaf, slot, fi, name, alignment) \ argument
111 if (unlikely(!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), \
113 file_extent_err((leaf), (slot), \
115 (#name), btrfs_file_extent_##name((leaf), (fi)), \
117 (!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), (alignment))); \
120 static u64 file_extent_end(struct extent_buffer *leaf, in file_extent_end() argument
127 if (btrfs_file_extent_type(leaf, extent) == BTRFS_FILE_EXTENT_INLINE) { in file_extent_end()
128 len = btrfs_file_extent_ram_bytes(leaf, extent); in file_extent_end()
129 end = ALIGN(key->offset + len, leaf->fs_info->sectorsize); in file_extent_end()
131 len = btrfs_file_extent_num_bytes(leaf, extent); in file_extent_end()
160 btrfs_header_level(eb) == 0 ? "leaf" : "node", in dir_item_err()
175 static bool check_prev_ino(struct extent_buffer *leaf, in check_prev_ino() argument
194 if (!is_fstree(btrfs_header_owner(leaf))) in check_prev_ino()
201 dir_item_err(leaf, slot, in check_prev_ino()
206 static int check_extent_data_item(struct extent_buffer *leaf, in check_extent_data_item() argument
210 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_data_item()
213 u32 item_size = btrfs_item_size(leaf, slot); in check_extent_data_item()
217 file_extent_err(leaf, slot, in check_extent_data_item()
229 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_extent_data_item()
232 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); in check_extent_data_item()
239 file_extent_err(leaf, slot, in check_extent_data_item()
245 if (unlikely(btrfs_file_extent_type(leaf, fi) >= in check_extent_data_item()
247 file_extent_err(leaf, slot, in check_extent_data_item()
249 btrfs_file_extent_type(leaf, fi), in check_extent_data_item()
258 if (unlikely(btrfs_file_extent_compression(leaf, fi) >= in check_extent_data_item()
260 file_extent_err(leaf, slot, in check_extent_data_item()
262 btrfs_file_extent_compression(leaf, fi), in check_extent_data_item()
266 if (unlikely(btrfs_file_extent_encryption(leaf, fi))) { in check_extent_data_item()
267 file_extent_err(leaf, slot, in check_extent_data_item()
269 btrfs_file_extent_encryption(leaf, fi)); in check_extent_data_item()
272 if (btrfs_file_extent_type(leaf, fi) == BTRFS_FILE_EXTENT_INLINE) { in check_extent_data_item()
275 file_extent_err(leaf, slot, in check_extent_data_item()
282 if (btrfs_file_extent_compression(leaf, fi) != in check_extent_data_item()
288 btrfs_file_extent_ram_bytes(leaf, fi))) { in check_extent_data_item()
289 file_extent_err(leaf, slot, in check_extent_data_item()
292 btrfs_file_extent_ram_bytes(leaf, fi)); in check_extent_data_item()
300 file_extent_err(leaf, slot, in check_extent_data_item()
305 if (unlikely(CHECK_FE_ALIGNED(leaf, slot, fi, ram_bytes, sectorsize) || in check_extent_data_item()
306 CHECK_FE_ALIGNED(leaf, slot, fi, disk_bytenr, sectorsize) || in check_extent_data_item()
307 CHECK_FE_ALIGNED(leaf, slot, fi, disk_num_bytes, sectorsize) || in check_extent_data_item()
308 CHECK_FE_ALIGNED(leaf, slot, fi, offset, sectorsize) || in check_extent_data_item()
309 CHECK_FE_ALIGNED(leaf, slot, fi, num_bytes, sectorsize))) in check_extent_data_item()
313 if (unlikely(check_add_overflow(btrfs_file_extent_num_bytes(leaf, fi), in check_extent_data_item()
315 file_extent_err(leaf, slot, in check_extent_data_item()
318 btrfs_file_extent_num_bytes(leaf, fi)); in check_extent_data_item()
323 * Check that no two consecutive file extent items, in the same leaf, in check_extent_data_item()
332 prev_fi = btrfs_item_ptr(leaf, slot - 1, in check_extent_data_item()
334 prev_end = file_extent_end(leaf, prev_key, prev_fi); in check_extent_data_item()
336 file_extent_err(leaf, slot - 1, in check_extent_data_item()
351 btrfs_file_extent_compression(leaf, fi) == BTRFS_COMPRESS_NONE && in check_extent_data_item()
352 btrfs_file_extent_disk_bytenr(leaf, fi)) { in check_extent_data_item()
353 if (WARN_ON(btrfs_file_extent_ram_bytes(leaf, fi) != in check_extent_data_item()
354 btrfs_file_extent_disk_num_bytes(leaf, fi))) in check_extent_data_item()
355 file_extent_err(leaf, slot, in check_extent_data_item()
357 btrfs_file_extent_ram_bytes(leaf, fi), in check_extent_data_item()
358 btrfs_file_extent_disk_num_bytes(leaf, fi)); in check_extent_data_item()
364 static int check_csum_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_csum_item() argument
367 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_csum_item()
372 generic_err(leaf, slot, in check_csum_item()
378 generic_err(leaf, slot, in check_csum_item()
383 if (unlikely(!IS_ALIGNED(btrfs_item_size(leaf, slot), csumsize))) { in check_csum_item()
384 generic_err(leaf, slot, in check_csum_item()
386 btrfs_item_size(leaf, slot), csumsize); in check_csum_item()
393 prev_item_size = btrfs_item_size(leaf, slot - 1); in check_csum_item()
397 generic_err(leaf, slot - 1, in check_csum_item()
410 static int check_inode_key(struct extent_buffer *leaf, struct btrfs_key *key, in check_inode_key() argument
416 btrfs_item_key_to_cpu(leaf, &item_key, slot); in check_inode_key()
432 generic_err(leaf, slot, in check_inode_key()
439 dir_item_err(leaf, slot, in check_inode_key()
450 inode_item_err(leaf, slot, in check_inode_key()
454 dir_item_err(leaf, slot, in check_inode_key()
462 static int check_root_key(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_key() argument
468 btrfs_item_key_to_cpu(leaf, &item_key, slot); in check_root_key()
479 generic_err(leaf, slot, in check_root_key()
488 generic_err(leaf, slot, "invalid root id 0"); in check_root_key()
490 dir_item_err(leaf, slot, in check_root_key()
497 dir_item_err(leaf, slot, in check_root_key()
514 generic_err(leaf, slot, "invalid root id 0 for reloc tree"); in check_root_key()
520 static int check_dir_item(struct extent_buffer *leaf, in check_dir_item() argument
524 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_dir_item()
526 u32 item_size = btrfs_item_size(leaf, slot); in check_dir_item()
529 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_dir_item()
532 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); in check_dir_item()
545 dir_item_err(leaf, slot, in check_dir_item()
552 btrfs_dir_item_key_to_cpu(leaf, di, &location_key); in check_dir_item()
554 ret = check_root_key(leaf, &location_key, slot); in check_dir_item()
559 ret = check_inode_key(leaf, &location_key, slot); in check_dir_item()
563 dir_item_err(leaf, slot, in check_dir_item()
571 dir_type = btrfs_dir_ftype(leaf, di); in check_dir_item()
574 dir_item_err(leaf, slot, in check_dir_item()
582 dir_item_err(leaf, slot, in check_dir_item()
589 dir_item_err(leaf, slot, in check_dir_item()
599 name_len = btrfs_dir_name_len(leaf, di); in check_dir_item()
600 data_len = btrfs_dir_data_len(leaf, di); in check_dir_item()
602 dir_item_err(leaf, slot, in check_dir_item()
608 dir_item_err(leaf, slot, in check_dir_item()
616 dir_item_err(leaf, slot, in check_dir_item()
626 dir_item_err(leaf, slot, in check_dir_item()
640 read_extent_buffer(leaf, namebuf, in check_dir_item()
644 dir_item_err(leaf, slot, in check_dir_item()
675 btrfs_header_level(eb) == 0 ? "leaf" : "node", in block_group_err()
681 static int check_block_group_item(struct extent_buffer *leaf, in check_block_group_item() argument
684 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_block_group_item()
686 u32 item_size = btrfs_item_size(leaf, slot); in check_block_group_item()
696 block_group_err(leaf, slot, in check_block_group_item()
702 block_group_err(leaf, slot, in check_block_group_item()
708 read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot), in check_block_group_item()
720 block_group_err(leaf, slot, in check_block_group_item()
727 block_group_err(leaf, slot, in check_block_group_item()
735 block_group_err(leaf, slot, in check_block_group_item()
743 block_group_err(leaf, slot, in check_block_group_item()
756 block_group_err(leaf, slot, in check_block_group_item()
770 const struct extent_buffer *leaf, in chunk_err() argument
774 bool is_sb = !leaf; in chunk_err()
785 for (i = 0; i < btrfs_header_nritems(leaf); i++) { in chunk_err()
786 if (btrfs_item_ptr_offset(leaf, i) == in chunk_err()
803 "corrupt leaf: root=%llu block=%llu slot=%d chunk_start=%llu, %pV", in chunk_err()
804 BTRFS_CHUNK_TREE_OBJECTID, leaf->start, slot, in chunk_err()
812 * If @leaf is NULL, then @chunk must be an on-stack chunk item.
819 const struct extent_buffer *leaf, in btrfs_check_chunk_valid() argument
836 if (leaf) { in btrfs_check_chunk_valid()
837 length = btrfs_chunk_length(leaf, chunk); in btrfs_check_chunk_valid()
838 stripe_len = btrfs_chunk_stripe_len(leaf, chunk); in btrfs_check_chunk_valid()
839 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in btrfs_check_chunk_valid()
840 sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk); in btrfs_check_chunk_valid()
841 type = btrfs_chunk_type(leaf, chunk); in btrfs_check_chunk_valid()
842 chunk_sector_size = btrfs_chunk_sector_size(leaf, chunk); in btrfs_check_chunk_valid()
856 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
861 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
867 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
873 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
879 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
885 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
890 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
896 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
910 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
917 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
926 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
932 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
941 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
954 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
976 chunk_err(fs_info, leaf, chunk, logical, in btrfs_check_chunk_valid()
992 static int check_leaf_chunk_item(struct extent_buffer *leaf, in check_leaf_chunk_item() argument
996 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_leaf_chunk_item()
999 if (unlikely(btrfs_item_size(leaf, slot) < sizeof(struct btrfs_chunk))) { in check_leaf_chunk_item()
1000 chunk_err(fs_info, leaf, chunk, key->offset, in check_leaf_chunk_item()
1002 btrfs_item_size(leaf, slot), in check_leaf_chunk_item()
1008 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in check_leaf_chunk_item()
1014 btrfs_item_size(leaf, slot))) { in check_leaf_chunk_item()
1015 chunk_err(fs_info, leaf, chunk, key->offset, in check_leaf_chunk_item()
1017 btrfs_item_size(leaf, slot), in check_leaf_chunk_item()
1022 return btrfs_check_chunk_valid(fs_info, leaf, chunk, key->offset, in check_leaf_chunk_item()
1044 btrfs_header_level(eb) == 0 ? "leaf" : "node", in dev_item_err()
1050 static int check_dev_item(struct extent_buffer *leaf, in check_dev_item() argument
1054 const u32 item_size = btrfs_item_size(leaf, slot); in check_dev_item()
1057 dev_item_err(leaf, slot, in check_dev_item()
1064 dev_item_err(leaf, slot, "invalid item size: has %u expect %zu", in check_dev_item()
1069 ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item); in check_dev_item()
1070 if (unlikely(btrfs_device_id(leaf, ditem) != key->offset)) { in check_dev_item()
1071 dev_item_err(leaf, slot, in check_dev_item()
1073 key->offset, btrfs_device_id(leaf, ditem)); in check_dev_item()
1082 if (unlikely(btrfs_device_bytes_used(leaf, ditem) > in check_dev_item()
1083 btrfs_device_total_bytes(leaf, ditem))) { in check_dev_item()
1084 dev_item_err(leaf, slot, in check_dev_item()
1086 btrfs_device_bytes_used(leaf, ditem), in check_dev_item()
1087 btrfs_device_total_bytes(leaf, ditem)); in check_dev_item()
1097 static int check_inode_item(struct extent_buffer *leaf, in check_inode_item() argument
1100 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_inode_item()
1104 const u32 item_size = btrfs_item_size(leaf, slot); in check_inode_item()
1110 ret = check_inode_key(leaf, key, slot); in check_inode_item()
1115 generic_err(leaf, slot, "invalid item size: has %u expect %zu", in check_inode_item()
1120 iitem = btrfs_item_ptr(leaf, slot, struct btrfs_inode_item); in check_inode_item()
1123 if (unlikely(btrfs_inode_generation(leaf, iitem) > super_gen + 1)) { in check_inode_item()
1124 inode_item_err(leaf, slot, in check_inode_item()
1126 btrfs_inode_generation(leaf, iitem), in check_inode_item()
1131 if (unlikely(btrfs_inode_transid(leaf, iitem) > super_gen + 1)) { in check_inode_item()
1132 inode_item_err(leaf, slot, in check_inode_item()
1134 btrfs_inode_transid(leaf, iitem), super_gen + 1); in check_inode_item()
1143 mode = btrfs_inode_mode(leaf, iitem); in check_inode_item()
1145 inode_item_err(leaf, slot, in check_inode_item()
1158 inode_item_err(leaf, slot, in check_inode_item()
1164 if (unlikely(S_ISDIR(mode) && btrfs_inode_nlink(leaf, iitem) > 1)) { in check_inode_item()
1165 inode_item_err(leaf, slot, in check_inode_item()
1167 btrfs_inode_nlink(leaf, iitem)); in check_inode_item()
1170 btrfs_inode_split_flags(btrfs_inode_flags(leaf, iitem), &flags, &ro_flags); in check_inode_item()
1172 inode_item_err(leaf, slot, in check_inode_item()
1178 inode_item_err(leaf, slot, in check_inode_item()
1186 static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_item() argument
1189 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_root_item()
1195 ret = check_root_key(leaf, key, slot); in check_root_item()
1199 if (unlikely(btrfs_item_size(leaf, slot) != sizeof(ri) && in check_root_item()
1200 btrfs_item_size(leaf, slot) != in check_root_item()
1202 generic_err(leaf, slot, in check_root_item()
1204 btrfs_item_size(leaf, slot), sizeof(ri), in check_root_item()
1214 read_extent_buffer(leaf, &ri, btrfs_item_ptr_offset(leaf, slot), in check_root_item()
1215 btrfs_item_size(leaf, slot)); in check_root_item()
1220 generic_err(leaf, slot, in check_root_item()
1228 generic_err(leaf, slot, in check_root_item()
1236 generic_err(leaf, slot, in check_root_item()
1245 generic_err(leaf, slot, in check_root_item()
1251 generic_err(leaf, slot, in check_root_item()
1257 generic_err(leaf, slot, in check_root_item()
1265 generic_err(leaf, slot, in check_root_item()
1300 btrfs_header_level(eb) == 0 ? "leaf" : "node", in extent_err()
1318 static int check_extent_item(struct extent_buffer *leaf, in check_extent_item() argument
1322 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_item()
1327 const u32 item_size = btrfs_item_size(leaf, slot); in check_extent_item()
1337 generic_err(leaf, slot, in check_extent_item()
1343 generic_err(leaf, slot, in check_extent_item()
1352 extent_err(leaf, slot, in check_extent_item()
1390 extent_err(leaf, slot, in check_extent_item()
1396 end = item_size + btrfs_item_ptr_offset(leaf, slot); in check_extent_item()
1399 ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item); in check_extent_item()
1400 flags = btrfs_extent_flags(leaf, ei); in check_extent_item()
1401 total_refs = btrfs_extent_refs(leaf, ei); in check_extent_item()
1402 generation = btrfs_extent_generation(leaf, ei); in check_extent_item()
1405 extent_err(leaf, slot, in check_extent_item()
1413 extent_err(leaf, slot, in check_extent_item()
1423 extent_err(leaf, slot, in check_extent_item()
1430 extent_err(leaf, slot, in check_extent_item()
1436 extent_err(leaf, slot, in check_extent_item()
1442 extent_err(leaf, slot, in check_extent_item()
1454 if (unlikely(btrfs_tree_block_level(leaf, info) >= BTRFS_MAX_LEVEL)) { in check_extent_item()
1455 extent_err(leaf, slot, in check_extent_item()
1457 btrfs_tree_block_level(leaf, info), in check_extent_item()
1477 extent_err(leaf, slot, in check_extent_item()
1483 inline_type = btrfs_extent_inline_ref_type(leaf, iref); in check_extent_item()
1484 inline_offset = btrfs_extent_inline_ref_offset(leaf, iref); in check_extent_item()
1487 extent_err(leaf, slot, in check_extent_item()
1502 extent_err(leaf, slot, in check_extent_item()
1515 dref_root = btrfs_extent_data_ref_root(leaf, dref); in check_extent_item()
1516 dref_objectid = btrfs_extent_data_ref_objectid(leaf, dref); in check_extent_item()
1517 dref_offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_item()
1519 btrfs_extent_data_ref_root(leaf, dref), in check_extent_item()
1520 btrfs_extent_data_ref_objectid(leaf, dref), in check_extent_item()
1521 btrfs_extent_data_ref_offset(leaf, dref)); in check_extent_item()
1523 extent_err(leaf, slot, in check_extent_item()
1530 extent_err(leaf, slot, in check_extent_item()
1537 extent_err(leaf, slot, in check_extent_item()
1542 if (unlikely(btrfs_extent_data_ref_count(leaf, dref) == 0)) { in check_extent_item()
1543 extent_err(leaf, slot, in check_extent_item()
1547 inline_refs += btrfs_extent_data_ref_count(leaf, dref); in check_extent_item()
1554 extent_err(leaf, slot, in check_extent_item()
1559 if (unlikely(btrfs_shared_data_ref_count(leaf, sref) == 0)) { in check_extent_item()
1560 extent_err(leaf, slot, in check_extent_item()
1564 inline_refs += btrfs_shared_data_ref_count(leaf, sref); in check_extent_item()
1570 extent_err(leaf, slot, "unknown inline ref type: %u", in check_extent_item()
1575 extent_err(leaf, slot, in check_extent_item()
1584 extent_err(leaf, slot, in check_extent_item()
1596 extent_err(leaf, slot, in check_extent_item()
1603 extent_err(leaf, slot, in check_extent_item()
1619 extent_err(leaf, slot, in check_extent_item()
1631 static int check_simple_keyed_refs(struct extent_buffer *leaf, in check_simple_keyed_refs() argument
1639 sref = btrfs_item_ptr(leaf, slot, struct btrfs_shared_data_ref); in check_simple_keyed_refs()
1640 if (unlikely(btrfs_shared_data_ref_count(leaf, sref) == 0)) { in check_simple_keyed_refs()
1641 extent_err(leaf, slot, in check_simple_keyed_refs()
1649 if (unlikely(btrfs_item_size(leaf, slot) != expect_item_size)) { in check_simple_keyed_refs()
1650 generic_err(leaf, slot, in check_simple_keyed_refs()
1652 btrfs_item_size(leaf, slot), in check_simple_keyed_refs()
1656 if (unlikely(!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize))) { in check_simple_keyed_refs()
1657 generic_err(leaf, slot, in check_simple_keyed_refs()
1659 key->objectid, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1663 !IS_ALIGNED(key->offset, leaf->fs_info->sectorsize))) { in check_simple_keyed_refs()
1664 extent_err(leaf, slot, in check_simple_keyed_refs()
1666 key->offset, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1672 static int check_extent_data_ref(struct extent_buffer *leaf, in check_extent_data_ref() argument
1676 unsigned long ptr = btrfs_item_ptr_offset(leaf, slot); in check_extent_data_ref()
1677 const unsigned long end = ptr + btrfs_item_size(leaf, slot); in check_extent_data_ref()
1679 if (unlikely(btrfs_item_size(leaf, slot) % sizeof(*dref) != 0)) { in check_extent_data_ref()
1680 generic_err(leaf, slot, in check_extent_data_ref()
1682 btrfs_item_size(leaf, slot), in check_extent_data_ref()
1686 if (unlikely(!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize))) { in check_extent_data_ref()
1687 generic_err(leaf, slot, in check_extent_data_ref()
1689 key->objectid, leaf->fs_info->sectorsize); in check_extent_data_ref()
1699 * overflow from the leaf due to hash collisions. in check_extent_data_ref()
1702 root = btrfs_extent_data_ref_root(leaf, dref); in check_extent_data_ref()
1703 objectid = btrfs_extent_data_ref_objectid(leaf, dref); in check_extent_data_ref()
1704 offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_data_ref()
1706 extent_err(leaf, slot, in check_extent_data_ref()
1713 extent_err(leaf, slot, in check_extent_data_ref()
1718 if (unlikely(!IS_ALIGNED(offset, leaf->fs_info->sectorsize))) { in check_extent_data_ref()
1719 extent_err(leaf, slot, in check_extent_data_ref()
1721 offset, leaf->fs_info->sectorsize); in check_extent_data_ref()
1724 if (unlikely(btrfs_extent_data_ref_count(leaf, dref) == 0)) { in check_extent_data_ref()
1725 extent_err(leaf, slot, in check_extent_data_ref()
1735 static int check_inode_ref(struct extent_buffer *leaf, in check_inode_ref() argument
1743 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_inode_ref()
1746 if (unlikely(btrfs_item_size(leaf, slot) <= sizeof(*iref))) { in check_inode_ref()
1747 inode_ref_err(leaf, slot, in check_inode_ref()
1749 btrfs_item_size(leaf, slot), in check_inode_ref()
1750 sizeof(*iref), BTRFS_LEAF_DATA_SIZE(leaf->fs_info)); in check_inode_ref()
1754 ptr = btrfs_item_ptr_offset(leaf, slot); in check_inode_ref()
1755 end = ptr + btrfs_item_size(leaf, slot); in check_inode_ref()
1760 inode_ref_err(leaf, slot, in check_inode_ref()
1767 namelen = btrfs_inode_ref_name_len(leaf, iref); in check_inode_ref()
1769 inode_ref_err(leaf, slot, in check_inode_ref()
1785 static int check_raid_stripe_extent(const struct extent_buffer *leaf, in check_raid_stripe_extent() argument
1788 if (unlikely(!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize))) { in check_raid_stripe_extent()
1789 generic_err(leaf, slot, in check_raid_stripe_extent()
1791 key->objectid, leaf->fs_info->sectorsize); in check_raid_stripe_extent()
1795 if (unlikely(!btrfs_fs_incompat(leaf->fs_info, RAID_STRIPE_TREE))) { in check_raid_stripe_extent()
1796 generic_err(leaf, slot, in check_raid_stripe_extent()
1804 static int check_dev_extent_item(const struct extent_buffer *leaf, in check_dev_extent_item() argument
1810 const u32 sectorsize = leaf->fs_info->sectorsize; in check_dev_extent_item()
1812 de = btrfs_item_ptr(leaf, slot, struct btrfs_dev_extent); in check_dev_extent_item()
1814 if (unlikely(btrfs_dev_extent_chunk_tree(leaf, de) != in check_dev_extent_item()
1816 generic_err(leaf, slot, in check_dev_extent_item()
1818 btrfs_dev_extent_chunk_tree(leaf, de), in check_dev_extent_item()
1822 if (unlikely(btrfs_dev_extent_chunk_objectid(leaf, de) != in check_dev_extent_item()
1824 generic_err(leaf, slot, in check_dev_extent_item()
1826 btrfs_dev_extent_chunk_objectid(leaf, de), in check_dev_extent_item()
1832 generic_err(leaf, slot, in check_dev_extent_item()
1837 if (unlikely(!IS_ALIGNED(btrfs_dev_extent_chunk_offset(leaf, de), in check_dev_extent_item()
1839 generic_err(leaf, slot, in check_dev_extent_item()
1841 btrfs_dev_extent_chunk_objectid(leaf, de), in check_dev_extent_item()
1845 if (unlikely(!IS_ALIGNED(btrfs_dev_extent_length(leaf, de), in check_dev_extent_item()
1847 generic_err(leaf, slot, in check_dev_extent_item()
1849 btrfs_dev_extent_length(leaf, de), sectorsize); in check_dev_extent_item()
1858 prev_de = btrfs_item_ptr(leaf, slot - 1, struct btrfs_dev_extent); in check_dev_extent_item()
1859 prev_len = btrfs_dev_extent_length(leaf, prev_de); in check_dev_extent_item()
1861 generic_err(leaf, slot, in check_dev_extent_item()
1873 static enum btrfs_tree_block_status check_leaf_item(struct extent_buffer *leaf, in check_leaf_item() argument
1883 ret = check_extent_data_item(leaf, key, slot, prev_key); in check_leaf_item()
1886 ret = check_csum_item(leaf, key, slot, prev_key); in check_leaf_item()
1891 ret = check_dir_item(leaf, key, prev_key, slot); in check_leaf_item()
1894 ret = check_inode_ref(leaf, key, prev_key, slot); in check_leaf_item()
1897 ret = check_block_group_item(leaf, key, slot); in check_leaf_item()
1900 chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk); in check_leaf_item()
1901 ret = check_leaf_chunk_item(leaf, chunk, key, slot); in check_leaf_item()
1904 ret = check_dev_item(leaf, key, slot); in check_leaf_item()
1907 ret = check_dev_extent_item(leaf, key, slot, prev_key); in check_leaf_item()
1910 ret = check_inode_item(leaf, key, slot); in check_leaf_item()
1913 ret = check_root_item(leaf, key, slot); in check_leaf_item()
1917 ret = check_extent_item(leaf, key, slot, prev_key); in check_leaf_item()
1922 ret = check_simple_keyed_refs(leaf, key, slot); in check_leaf_item()
1925 ret = check_extent_data_ref(leaf, key, slot); in check_leaf_item()
1928 ret = check_raid_stripe_extent(leaf, key, slot); in check_leaf_item()
1937 enum btrfs_tree_block_status __btrfs_check_leaf(struct extent_buffer *leaf) in __btrfs_check_leaf() argument
1939 struct btrfs_fs_info *fs_info = leaf->fs_info; in __btrfs_check_leaf()
1943 u32 nritems = btrfs_header_nritems(leaf); in __btrfs_check_leaf()
1946 if (unlikely(btrfs_header_level(leaf) != 0)) { in __btrfs_check_leaf()
1947 generic_err(leaf, 0, in __btrfs_check_leaf()
1948 "invalid level for leaf, have %d expect 0", in __btrfs_check_leaf()
1949 btrfs_header_level(leaf)); in __btrfs_check_leaf()
1953 if (unlikely(!btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_WRITTEN))) { in __btrfs_check_leaf()
1954 generic_err(leaf, 0, "invalid flag for leaf, WRITTEN not set"); in __btrfs_check_leaf()
1966 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) { in __btrfs_check_leaf()
1967 u64 owner = btrfs_header_owner(leaf); in __btrfs_check_leaf()
1975 generic_err(leaf, 0, in __btrfs_check_leaf()
1983 generic_err(leaf, 0, in __btrfs_check_leaf()
1993 generic_err(leaf, 0, in __btrfs_check_leaf()
2006 * Check the following things to make sure this is a good leaf, and in __btrfs_check_leaf()
2007 * leaf users won't need to bother with similar sanity checks: in __btrfs_check_leaf()
2011 * No overlap, no hole, all inside the leaf. in __btrfs_check_leaf()
2021 btrfs_item_key_to_cpu(leaf, &key, slot); in __btrfs_check_leaf()
2025 generic_err(leaf, slot, in __btrfs_check_leaf()
2033 item_data_end = (u64)btrfs_item_offset(leaf, slot) + in __btrfs_check_leaf()
2034 btrfs_item_size(leaf, slot); in __btrfs_check_leaf()
2037 * item data starts at the end of the leaf and grows towards the in __btrfs_check_leaf()
2043 item_end_expected = btrfs_item_offset(leaf, in __btrfs_check_leaf()
2046 generic_err(leaf, slot, in __btrfs_check_leaf()
2053 * Check to make sure that we don't point outside of the leaf, in __btrfs_check_leaf()
2055 * all point outside of the leaf. in __btrfs_check_leaf()
2058 generic_err(leaf, slot, in __btrfs_check_leaf()
2059 "slot end outside of leaf, have %llu expect range [0, %u]", in __btrfs_check_leaf()
2065 if (unlikely(btrfs_item_ptr_offset(leaf, slot) < in __btrfs_check_leaf()
2066 btrfs_item_nr_offset(leaf, slot) + sizeof(struct btrfs_item))) { in __btrfs_check_leaf()
2067 generic_err(leaf, slot, in __btrfs_check_leaf()
2069 btrfs_item_nr_offset(leaf, slot) + in __btrfs_check_leaf()
2071 btrfs_item_ptr_offset(leaf, slot)); in __btrfs_check_leaf()
2076 ret = check_leaf_item(leaf, &key, slot, &prev_key); in __btrfs_check_leaf()
2088 int btrfs_check_leaf(struct extent_buffer *leaf) in btrfs_check_leaf() argument
2092 ret = __btrfs_check_leaf(leaf); in btrfs_check_leaf()
2200 btrfs_header_level(eb) == 0 ? "leaf" : "node", in btrfs_check_eb_owner()
2215 btrfs_header_level(eb) == 0 ? "leaf" : "node", in btrfs_check_eb_owner()