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.
70 btrfs_header_level(eb) == 0 ? "leaf" : "node", in generic_err()
97 btrfs_header_level(eb) == 0 ? "leaf" : "node", in file_extent_err()
107 #define CHECK_FE_ALIGNED(leaf, slot, fi, name, alignment) \ argument
109 if (unlikely(!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), \
111 file_extent_err((leaf), (slot), \
113 (#name), btrfs_file_extent_##name((leaf), (fi)), \
115 (!IS_ALIGNED(btrfs_file_extent_##name((leaf), (fi)), (alignment))); \
118 static u64 file_extent_end(struct extent_buffer *leaf, in file_extent_end() argument
125 if (btrfs_file_extent_type(leaf, extent) == BTRFS_FILE_EXTENT_INLINE) { in file_extent_end()
126 len = btrfs_file_extent_ram_bytes(leaf, extent); in file_extent_end()
127 end = ALIGN(key->offset + len, leaf->fs_info->sectorsize); in file_extent_end()
129 len = btrfs_file_extent_num_bytes(leaf, extent); in file_extent_end()
157 btrfs_header_level(eb) == 0 ? "leaf" : "node", in dir_item_err()
172 static bool check_prev_ino(struct extent_buffer *leaf, in check_prev_ino() argument
191 if (!is_fstree(btrfs_header_owner(leaf))) in check_prev_ino()
198 dir_item_err(leaf, slot, in check_prev_ino()
203 static int check_extent_data_item(struct extent_buffer *leaf, in check_extent_data_item() argument
207 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_data_item()
210 u32 item_size = btrfs_item_size(leaf, slot); in check_extent_data_item()
214 file_extent_err(leaf, slot, in check_extent_data_item()
226 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_extent_data_item()
229 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); in check_extent_data_item()
236 file_extent_err(leaf, slot, in check_extent_data_item()
242 if (unlikely(btrfs_file_extent_type(leaf, fi) >= in check_extent_data_item()
244 file_extent_err(leaf, slot, in check_extent_data_item()
246 btrfs_file_extent_type(leaf, fi), in check_extent_data_item()
255 if (unlikely(btrfs_file_extent_compression(leaf, fi) >= in check_extent_data_item()
257 file_extent_err(leaf, slot, in check_extent_data_item()
259 btrfs_file_extent_compression(leaf, fi), in check_extent_data_item()
263 if (unlikely(btrfs_file_extent_encryption(leaf, fi))) { in check_extent_data_item()
264 file_extent_err(leaf, slot, in check_extent_data_item()
266 btrfs_file_extent_encryption(leaf, fi)); in check_extent_data_item()
269 if (btrfs_file_extent_type(leaf, fi) == BTRFS_FILE_EXTENT_INLINE) { in check_extent_data_item()
272 file_extent_err(leaf, slot, in check_extent_data_item()
279 if (btrfs_file_extent_compression(leaf, fi) != in check_extent_data_item()
285 btrfs_file_extent_ram_bytes(leaf, fi))) { in check_extent_data_item()
286 file_extent_err(leaf, slot, in check_extent_data_item()
289 btrfs_file_extent_ram_bytes(leaf, fi)); in check_extent_data_item()
297 file_extent_err(leaf, slot, in check_extent_data_item()
302 if (unlikely(CHECK_FE_ALIGNED(leaf, slot, fi, ram_bytes, sectorsize) || in check_extent_data_item()
303 CHECK_FE_ALIGNED(leaf, slot, fi, disk_bytenr, sectorsize) || in check_extent_data_item()
304 CHECK_FE_ALIGNED(leaf, slot, fi, disk_num_bytes, sectorsize) || in check_extent_data_item()
305 CHECK_FE_ALIGNED(leaf, slot, fi, offset, sectorsize) || in check_extent_data_item()
306 CHECK_FE_ALIGNED(leaf, slot, fi, num_bytes, sectorsize))) in check_extent_data_item()
310 if (unlikely(check_add_overflow(btrfs_file_extent_num_bytes(leaf, fi), in check_extent_data_item()
312 file_extent_err(leaf, slot, in check_extent_data_item()
315 btrfs_file_extent_num_bytes(leaf, fi)); in check_extent_data_item()
320 * Check that no two consecutive file extent items, in the same leaf, in check_extent_data_item()
329 prev_fi = btrfs_item_ptr(leaf, slot - 1, in check_extent_data_item()
331 prev_end = file_extent_end(leaf, prev_key, prev_fi); in check_extent_data_item()
333 file_extent_err(leaf, slot - 1, in check_extent_data_item()
343 static int check_csum_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_csum_item() argument
346 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_csum_item()
351 generic_err(leaf, slot, in check_csum_item()
357 generic_err(leaf, slot, in check_csum_item()
362 if (unlikely(!IS_ALIGNED(btrfs_item_size(leaf, slot), csumsize))) { in check_csum_item()
363 generic_err(leaf, slot, in check_csum_item()
365 btrfs_item_size(leaf, slot), csumsize); in check_csum_item()
372 prev_item_size = btrfs_item_size(leaf, slot - 1); in check_csum_item()
376 generic_err(leaf, slot - 1, in check_csum_item()
389 static int check_inode_key(struct extent_buffer *leaf, struct btrfs_key *key, in check_inode_key() argument
395 btrfs_item_key_to_cpu(leaf, &item_key, slot); in check_inode_key()
411 generic_err(leaf, slot, in check_inode_key()
418 dir_item_err(leaf, slot, in check_inode_key()
429 inode_item_err(leaf, slot, in check_inode_key()
433 dir_item_err(leaf, slot, in check_inode_key()
441 static int check_root_key(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_key() argument
447 btrfs_item_key_to_cpu(leaf, &item_key, slot); in check_root_key()
458 generic_err(leaf, slot, in check_root_key()
467 generic_err(leaf, slot, "invalid root id 0"); in check_root_key()
469 dir_item_err(leaf, slot, in check_root_key()
476 dir_item_err(leaf, slot, in check_root_key()
493 generic_err(leaf, slot, "invalid root id 0 for reloc tree"); in check_root_key()
499 static int check_dir_item(struct extent_buffer *leaf, in check_dir_item() argument
503 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_dir_item()
505 u32 item_size = btrfs_item_size(leaf, slot); in check_dir_item()
508 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_dir_item()
511 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); in check_dir_item()
524 dir_item_err(leaf, slot, in check_dir_item()
531 btrfs_dir_item_key_to_cpu(leaf, di, &location_key); in check_dir_item()
533 ret = check_root_key(leaf, &location_key, slot); in check_dir_item()
538 ret = check_inode_key(leaf, &location_key, slot); in check_dir_item()
542 dir_item_err(leaf, slot, in check_dir_item()
550 dir_type = btrfs_dir_ftype(leaf, di); in check_dir_item()
553 dir_item_err(leaf, slot, in check_dir_item()
561 dir_item_err(leaf, slot, in check_dir_item()
568 dir_item_err(leaf, slot, in check_dir_item()
578 name_len = btrfs_dir_name_len(leaf, di); in check_dir_item()
579 data_len = btrfs_dir_data_len(leaf, di); in check_dir_item()
581 dir_item_err(leaf, slot, in check_dir_item()
587 dir_item_err(leaf, slot, in check_dir_item()
595 dir_item_err(leaf, slot, in check_dir_item()
605 dir_item_err(leaf, slot, in check_dir_item()
619 read_extent_buffer(leaf, namebuf, in check_dir_item()
623 dir_item_err(leaf, slot, in check_dir_item()
653 btrfs_header_level(eb) == 0 ? "leaf" : "node", in block_group_err()
659 static int check_block_group_item(struct extent_buffer *leaf, in check_block_group_item() argument
662 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_block_group_item()
664 u32 item_size = btrfs_item_size(leaf, slot); in check_block_group_item()
674 block_group_err(leaf, slot, in check_block_group_item()
680 block_group_err(leaf, slot, in check_block_group_item()
686 read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot), in check_block_group_item()
698 block_group_err(leaf, slot, in check_block_group_item()
705 block_group_err(leaf, slot, in check_block_group_item()
713 block_group_err(leaf, slot, in check_block_group_item()
721 block_group_err(leaf, slot, in check_block_group_item()
734 block_group_err(leaf, slot, in check_block_group_item()
747 static void chunk_err(const struct extent_buffer *leaf, in chunk_err() argument
751 const struct btrfs_fs_info *fs_info = leaf->fs_info; in chunk_err()
759 is_sb = (leaf->start == BTRFS_SUPER_INFO_OFFSET); in chunk_err()
766 for (i = 0; i < btrfs_header_nritems(leaf); i++) { in chunk_err()
767 if (btrfs_item_ptr_offset(leaf, i) == in chunk_err()
784 "corrupt leaf: root=%llu block=%llu slot=%d chunk_start=%llu, %pV", in chunk_err()
785 BTRFS_CHUNK_TREE_OBJECTID, leaf->start, slot, in chunk_err()
796 int btrfs_check_chunk_valid(struct extent_buffer *leaf, in btrfs_check_chunk_valid() argument
799 struct btrfs_fs_info *fs_info = leaf->fs_info; in btrfs_check_chunk_valid()
812 length = btrfs_chunk_length(leaf, chunk); in btrfs_check_chunk_valid()
813 stripe_len = btrfs_chunk_stripe_len(leaf, chunk); in btrfs_check_chunk_valid()
814 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in btrfs_check_chunk_valid()
815 sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk); in btrfs_check_chunk_valid()
816 type = btrfs_chunk_type(leaf, chunk); in btrfs_check_chunk_valid()
822 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
827 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
833 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
839 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
844 if (unlikely(btrfs_chunk_sector_size(leaf, chunk) != fs_info->sectorsize)) { in btrfs_check_chunk_valid()
845 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
847 btrfs_chunk_sector_size(leaf, chunk), in btrfs_check_chunk_valid()
852 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
857 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
863 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
877 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
884 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
888 btrfs_chunk_type(leaf, chunk)); in btrfs_check_chunk_valid()
894 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
900 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
909 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
922 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
944 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
960 static int check_leaf_chunk_item(struct extent_buffer *leaf, in check_leaf_chunk_item() argument
966 if (unlikely(btrfs_item_size(leaf, slot) < sizeof(struct btrfs_chunk))) { in check_leaf_chunk_item()
967 chunk_err(leaf, chunk, key->offset, in check_leaf_chunk_item()
969 btrfs_item_size(leaf, slot), in check_leaf_chunk_item()
971 BTRFS_LEAF_DATA_SIZE(leaf->fs_info)); in check_leaf_chunk_item()
975 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in check_leaf_chunk_item()
981 btrfs_item_size(leaf, slot))) { in check_leaf_chunk_item()
982 chunk_err(leaf, chunk, key->offset, in check_leaf_chunk_item()
984 btrfs_item_size(leaf, slot), in check_leaf_chunk_item()
989 return btrfs_check_chunk_valid(leaf, chunk, key->offset); in check_leaf_chunk_item()
1009 btrfs_header_level(eb) == 0 ? "leaf" : "node", in dev_item_err()
1015 static int check_dev_item(struct extent_buffer *leaf, in check_dev_item() argument
1019 const u32 item_size = btrfs_item_size(leaf, slot); in check_dev_item()
1022 dev_item_err(leaf, slot, in check_dev_item()
1029 dev_item_err(leaf, slot, "invalid item size: has %u expect %zu", in check_dev_item()
1034 ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item); in check_dev_item()
1035 if (unlikely(btrfs_device_id(leaf, ditem) != key->offset)) { in check_dev_item()
1036 dev_item_err(leaf, slot, in check_dev_item()
1038 key->offset, btrfs_device_id(leaf, ditem)); in check_dev_item()
1047 if (unlikely(btrfs_device_bytes_used(leaf, ditem) > in check_dev_item()
1048 btrfs_device_total_bytes(leaf, ditem))) { in check_dev_item()
1049 dev_item_err(leaf, slot, in check_dev_item()
1051 btrfs_device_bytes_used(leaf, ditem), in check_dev_item()
1052 btrfs_device_total_bytes(leaf, ditem)); in check_dev_item()
1062 static int check_inode_item(struct extent_buffer *leaf, in check_inode_item() argument
1065 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_inode_item()
1069 const u32 item_size = btrfs_item_size(leaf, slot); in check_inode_item()
1075 ret = check_inode_key(leaf, key, slot); in check_inode_item()
1080 generic_err(leaf, slot, "invalid item size: has %u expect %zu", in check_inode_item()
1085 iitem = btrfs_item_ptr(leaf, slot, struct btrfs_inode_item); in check_inode_item()
1088 if (unlikely(btrfs_inode_generation(leaf, iitem) > super_gen + 1)) { in check_inode_item()
1089 inode_item_err(leaf, slot, in check_inode_item()
1091 btrfs_inode_generation(leaf, iitem), in check_inode_item()
1096 if (unlikely(btrfs_inode_transid(leaf, iitem) > super_gen + 1)) { in check_inode_item()
1097 inode_item_err(leaf, slot, in check_inode_item()
1099 btrfs_inode_transid(leaf, iitem), super_gen + 1); in check_inode_item()
1108 mode = btrfs_inode_mode(leaf, iitem); in check_inode_item()
1110 inode_item_err(leaf, slot, in check_inode_item()
1123 inode_item_err(leaf, slot, in check_inode_item()
1129 if (unlikely(S_ISDIR(mode) && btrfs_inode_nlink(leaf, iitem) > 1)) { in check_inode_item()
1130 inode_item_err(leaf, slot, in check_inode_item()
1132 btrfs_inode_nlink(leaf, iitem)); in check_inode_item()
1135 btrfs_inode_split_flags(btrfs_inode_flags(leaf, iitem), &flags, &ro_flags); in check_inode_item()
1137 inode_item_err(leaf, slot, in check_inode_item()
1143 inode_item_err(leaf, slot, in check_inode_item()
1151 static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_item() argument
1154 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_root_item()
1160 ret = check_root_key(leaf, key, slot); in check_root_item()
1164 if (unlikely(btrfs_item_size(leaf, slot) != sizeof(ri) && in check_root_item()
1165 btrfs_item_size(leaf, slot) != in check_root_item()
1167 generic_err(leaf, slot, in check_root_item()
1169 btrfs_item_size(leaf, slot), sizeof(ri), in check_root_item()
1179 read_extent_buffer(leaf, &ri, btrfs_item_ptr_offset(leaf, slot), in check_root_item()
1180 btrfs_item_size(leaf, slot)); in check_root_item()
1185 generic_err(leaf, slot, in check_root_item()
1193 generic_err(leaf, slot, in check_root_item()
1201 generic_err(leaf, slot, in check_root_item()
1210 generic_err(leaf, slot, in check_root_item()
1216 generic_err(leaf, slot, in check_root_item()
1222 generic_err(leaf, slot, in check_root_item()
1230 generic_err(leaf, slot, in check_root_item()
1264 btrfs_header_level(eb) == 0 ? "leaf" : "node", in extent_err()
1282 static int check_extent_item(struct extent_buffer *leaf, in check_extent_item() argument
1286 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_item()
1291 const u32 item_size = btrfs_item_size(leaf, slot); in check_extent_item()
1301 generic_err(leaf, slot, in check_extent_item()
1307 generic_err(leaf, slot, in check_extent_item()
1316 extent_err(leaf, slot, in check_extent_item()
1354 extent_err(leaf, slot, in check_extent_item()
1360 end = item_size + btrfs_item_ptr_offset(leaf, slot); in check_extent_item()
1363 ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item); in check_extent_item()
1364 flags = btrfs_extent_flags(leaf, ei); in check_extent_item()
1365 total_refs = btrfs_extent_refs(leaf, ei); in check_extent_item()
1366 generation = btrfs_extent_generation(leaf, ei); in check_extent_item()
1369 extent_err(leaf, slot, in check_extent_item()
1377 extent_err(leaf, slot, in check_extent_item()
1387 extent_err(leaf, slot, in check_extent_item()
1394 extent_err(leaf, slot, in check_extent_item()
1400 extent_err(leaf, slot, in check_extent_item()
1406 extent_err(leaf, slot, in check_extent_item()
1418 if (unlikely(btrfs_tree_block_level(leaf, info) >= BTRFS_MAX_LEVEL)) { in check_extent_item()
1419 extent_err(leaf, slot, in check_extent_item()
1421 btrfs_tree_block_level(leaf, info), in check_extent_item()
1441 extent_err(leaf, slot, in check_extent_item()
1447 inline_type = btrfs_extent_inline_ref_type(leaf, iref); in check_extent_item()
1448 inline_offset = btrfs_extent_inline_ref_offset(leaf, iref); in check_extent_item()
1451 extent_err(leaf, slot, in check_extent_item()
1466 extent_err(leaf, slot, in check_extent_item()
1479 dref_root = btrfs_extent_data_ref_root(leaf, dref); in check_extent_item()
1480 dref_objectid = btrfs_extent_data_ref_objectid(leaf, dref); in check_extent_item()
1481 dref_offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_item()
1483 btrfs_extent_data_ref_root(leaf, dref), in check_extent_item()
1484 btrfs_extent_data_ref_objectid(leaf, dref), in check_extent_item()
1485 btrfs_extent_data_ref_offset(leaf, dref)); in check_extent_item()
1487 extent_err(leaf, slot, in check_extent_item()
1494 extent_err(leaf, slot, in check_extent_item()
1501 extent_err(leaf, slot, in check_extent_item()
1506 if (unlikely(btrfs_extent_data_ref_count(leaf, dref) == 0)) { in check_extent_item()
1507 extent_err(leaf, slot, in check_extent_item()
1511 inline_refs += btrfs_extent_data_ref_count(leaf, dref); in check_extent_item()
1518 extent_err(leaf, slot, in check_extent_item()
1523 if (unlikely(btrfs_shared_data_ref_count(leaf, sref) == 0)) { in check_extent_item()
1524 extent_err(leaf, slot, in check_extent_item()
1528 inline_refs += btrfs_shared_data_ref_count(leaf, sref); in check_extent_item()
1531 extent_err(leaf, slot, "unknown inline ref type: %u", in check_extent_item()
1536 extent_err(leaf, slot, in check_extent_item()
1545 extent_err(leaf, slot, in check_extent_item()
1557 extent_err(leaf, slot, in check_extent_item()
1564 extent_err(leaf, slot, in check_extent_item()
1580 extent_err(leaf, slot, in check_extent_item()
1592 static int check_simple_keyed_refs(struct extent_buffer *leaf, in check_simple_keyed_refs() argument
1600 sref = btrfs_item_ptr(leaf, slot, struct btrfs_shared_data_ref); in check_simple_keyed_refs()
1601 if (unlikely(btrfs_shared_data_ref_count(leaf, sref) == 0)) { in check_simple_keyed_refs()
1602 extent_err(leaf, slot, in check_simple_keyed_refs()
1610 if (unlikely(btrfs_item_size(leaf, slot) != expect_item_size)) { in check_simple_keyed_refs()
1611 generic_err(leaf, slot, in check_simple_keyed_refs()
1613 btrfs_item_size(leaf, slot), in check_simple_keyed_refs()
1617 if (unlikely(!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize))) { in check_simple_keyed_refs()
1618 generic_err(leaf, slot, in check_simple_keyed_refs()
1620 key->objectid, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1624 !IS_ALIGNED(key->offset, leaf->fs_info->sectorsize))) { in check_simple_keyed_refs()
1625 extent_err(leaf, slot, in check_simple_keyed_refs()
1627 key->offset, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1633 static int check_extent_data_ref(struct extent_buffer *leaf, in check_extent_data_ref() argument
1637 unsigned long ptr = btrfs_item_ptr_offset(leaf, slot); in check_extent_data_ref()
1638 const unsigned long end = ptr + btrfs_item_size(leaf, slot); in check_extent_data_ref()
1640 if (unlikely(btrfs_item_size(leaf, slot) % sizeof(*dref) != 0)) { in check_extent_data_ref()
1641 generic_err(leaf, slot, in check_extent_data_ref()
1643 btrfs_item_size(leaf, slot), in check_extent_data_ref()
1647 if (unlikely(!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize))) { in check_extent_data_ref()
1648 generic_err(leaf, slot, in check_extent_data_ref()
1650 key->objectid, leaf->fs_info->sectorsize); in check_extent_data_ref()
1660 * overflow from the leaf due to hash collisions. in check_extent_data_ref()
1663 root = btrfs_extent_data_ref_root(leaf, dref); in check_extent_data_ref()
1664 objectid = btrfs_extent_data_ref_objectid(leaf, dref); in check_extent_data_ref()
1665 offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_data_ref()
1667 extent_err(leaf, slot, in check_extent_data_ref()
1674 extent_err(leaf, slot, in check_extent_data_ref()
1679 if (unlikely(!IS_ALIGNED(offset, leaf->fs_info->sectorsize))) { in check_extent_data_ref()
1680 extent_err(leaf, slot, in check_extent_data_ref()
1682 offset, leaf->fs_info->sectorsize); in check_extent_data_ref()
1685 if (unlikely(btrfs_extent_data_ref_count(leaf, dref) == 0)) { in check_extent_data_ref()
1686 extent_err(leaf, slot, in check_extent_data_ref()
1696 static int check_inode_ref(struct extent_buffer *leaf, in check_inode_ref() argument
1704 if (unlikely(!check_prev_ino(leaf, key, slot, prev_key))) in check_inode_ref()
1707 if (unlikely(btrfs_item_size(leaf, slot) <= sizeof(*iref))) { in check_inode_ref()
1708 inode_ref_err(leaf, slot, in check_inode_ref()
1710 btrfs_item_size(leaf, slot), in check_inode_ref()
1711 sizeof(*iref), BTRFS_LEAF_DATA_SIZE(leaf->fs_info)); in check_inode_ref()
1715 ptr = btrfs_item_ptr_offset(leaf, slot); in check_inode_ref()
1716 end = ptr + btrfs_item_size(leaf, slot); in check_inode_ref()
1721 inode_ref_err(leaf, slot, in check_inode_ref()
1728 namelen = btrfs_inode_ref_name_len(leaf, iref); in check_inode_ref()
1730 inode_ref_err(leaf, slot, in check_inode_ref()
1746 static int check_dev_extent_item(const struct extent_buffer *leaf, in check_dev_extent_item() argument
1752 const u32 sectorsize = leaf->fs_info->sectorsize; in check_dev_extent_item()
1754 de = btrfs_item_ptr(leaf, slot, struct btrfs_dev_extent); in check_dev_extent_item()
1756 if (unlikely(btrfs_dev_extent_chunk_tree(leaf, de) != in check_dev_extent_item()
1758 generic_err(leaf, slot, in check_dev_extent_item()
1760 btrfs_dev_extent_chunk_tree(leaf, de), in check_dev_extent_item()
1764 if (unlikely(btrfs_dev_extent_chunk_objectid(leaf, de) != in check_dev_extent_item()
1766 generic_err(leaf, slot, in check_dev_extent_item()
1768 btrfs_dev_extent_chunk_objectid(leaf, de), in check_dev_extent_item()
1774 generic_err(leaf, slot, in check_dev_extent_item()
1779 if (unlikely(!IS_ALIGNED(btrfs_dev_extent_chunk_offset(leaf, de), in check_dev_extent_item()
1781 generic_err(leaf, slot, in check_dev_extent_item()
1783 btrfs_dev_extent_chunk_objectid(leaf, de), in check_dev_extent_item()
1787 if (unlikely(!IS_ALIGNED(btrfs_dev_extent_length(leaf, de), in check_dev_extent_item()
1789 generic_err(leaf, slot, in check_dev_extent_item()
1791 btrfs_dev_extent_length(leaf, de), sectorsize); in check_dev_extent_item()
1800 prev_de = btrfs_item_ptr(leaf, slot - 1, struct btrfs_dev_extent); in check_dev_extent_item()
1801 prev_len = btrfs_dev_extent_length(leaf, prev_de); in check_dev_extent_item()
1803 generic_err(leaf, slot, in check_dev_extent_item()
1815 static enum btrfs_tree_block_status check_leaf_item(struct extent_buffer *leaf, in check_leaf_item() argument
1825 ret = check_extent_data_item(leaf, key, slot, prev_key); in check_leaf_item()
1828 ret = check_csum_item(leaf, key, slot, prev_key); in check_leaf_item()
1833 ret = check_dir_item(leaf, key, prev_key, slot); in check_leaf_item()
1836 ret = check_inode_ref(leaf, key, prev_key, slot); in check_leaf_item()
1839 ret = check_block_group_item(leaf, key, slot); in check_leaf_item()
1842 chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk); in check_leaf_item()
1843 ret = check_leaf_chunk_item(leaf, chunk, key, slot); in check_leaf_item()
1846 ret = check_dev_item(leaf, key, slot); in check_leaf_item()
1849 ret = check_dev_extent_item(leaf, key, slot, prev_key); in check_leaf_item()
1852 ret = check_inode_item(leaf, key, slot); in check_leaf_item()
1855 ret = check_root_item(leaf, key, slot); in check_leaf_item()
1859 ret = check_extent_item(leaf, key, slot, prev_key); in check_leaf_item()
1864 ret = check_simple_keyed_refs(leaf, key, slot); in check_leaf_item()
1867 ret = check_extent_data_ref(leaf, key, slot); in check_leaf_item()
1876 enum btrfs_tree_block_status __btrfs_check_leaf(struct extent_buffer *leaf) in __btrfs_check_leaf() argument
1878 struct btrfs_fs_info *fs_info = leaf->fs_info; in __btrfs_check_leaf()
1882 u32 nritems = btrfs_header_nritems(leaf); in __btrfs_check_leaf()
1885 if (unlikely(btrfs_header_level(leaf) != 0)) { in __btrfs_check_leaf()
1886 generic_err(leaf, 0, in __btrfs_check_leaf()
1887 "invalid level for leaf, have %d expect 0", in __btrfs_check_leaf()
1888 btrfs_header_level(leaf)); in __btrfs_check_leaf()
1892 if (unlikely(!btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_WRITTEN))) { in __btrfs_check_leaf()
1893 generic_err(leaf, 0, "invalid flag for leaf, WRITTEN not set"); in __btrfs_check_leaf()
1905 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) { in __btrfs_check_leaf()
1906 u64 owner = btrfs_header_owner(leaf); in __btrfs_check_leaf()
1914 generic_err(leaf, 0, in __btrfs_check_leaf()
1922 generic_err(leaf, 0, in __btrfs_check_leaf()
1932 generic_err(leaf, 0, in __btrfs_check_leaf()
1945 * Check the following things to make sure this is a good leaf, and in __btrfs_check_leaf()
1946 * leaf users won't need to bother with similar sanity checks: in __btrfs_check_leaf()
1950 * No overlap, no hole, all inside the leaf. in __btrfs_check_leaf()
1960 btrfs_item_key_to_cpu(leaf, &key, slot); in __btrfs_check_leaf()
1964 generic_err(leaf, slot, in __btrfs_check_leaf()
1972 item_data_end = (u64)btrfs_item_offset(leaf, slot) + in __btrfs_check_leaf()
1973 btrfs_item_size(leaf, slot); in __btrfs_check_leaf()
1976 * item data starts at the end of the leaf and grows towards the in __btrfs_check_leaf()
1982 item_end_expected = btrfs_item_offset(leaf, in __btrfs_check_leaf()
1985 generic_err(leaf, slot, in __btrfs_check_leaf()
1992 * Check to make sure that we don't point outside of the leaf, in __btrfs_check_leaf()
1994 * all point outside of the leaf. in __btrfs_check_leaf()
1997 generic_err(leaf, slot, in __btrfs_check_leaf()
1998 "slot end outside of leaf, have %llu expect range [0, %u]", in __btrfs_check_leaf()
2004 if (unlikely(btrfs_item_ptr_offset(leaf, slot) < in __btrfs_check_leaf()
2005 btrfs_item_nr_offset(leaf, slot) + sizeof(struct btrfs_item))) { in __btrfs_check_leaf()
2006 generic_err(leaf, slot, in __btrfs_check_leaf()
2008 btrfs_item_nr_offset(leaf, slot) + in __btrfs_check_leaf()
2010 btrfs_item_ptr_offset(leaf, slot)); in __btrfs_check_leaf()
2015 ret = check_leaf_item(leaf, &key, slot, &prev_key); in __btrfs_check_leaf()
2027 int btrfs_check_leaf(struct extent_buffer *leaf) in btrfs_check_leaf() argument
2031 ret = __btrfs_check_leaf(leaf); in btrfs_check_leaf()
2139 btrfs_header_level(eb) == 0 ? "leaf" : "node", in btrfs_check_eb_owner()
2154 btrfs_header_level(eb) == 0 ? "leaf" : "node", in btrfs_check_eb_owner()