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()
301 static int check_dir_item(struct extent_buffer *leaf, in check_dir_item() argument
304 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_dir_item()
306 u32 item_size = btrfs_item_size_nr(leaf, slot); in check_dir_item()
309 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); in check_dir_item()
320 dir_item_err(leaf, slot, in check_dir_item()
327 dir_type = btrfs_dir_type(leaf, di); in check_dir_item()
329 dir_item_err(leaf, slot, in check_dir_item()
337 dir_item_err(leaf, slot, in check_dir_item()
344 dir_item_err(leaf, slot, in check_dir_item()
354 name_len = btrfs_dir_name_len(leaf, di); in check_dir_item()
355 data_len = btrfs_dir_data_len(leaf, di); in check_dir_item()
357 dir_item_err(leaf, slot, in check_dir_item()
363 dir_item_err(leaf, slot, in check_dir_item()
371 dir_item_err(leaf, slot, in check_dir_item()
381 dir_item_err(leaf, slot, in check_dir_item()
395 read_extent_buffer(leaf, namebuf, in check_dir_item()
399 dir_item_err(leaf, slot, in check_dir_item()
435 static int check_block_group_item(struct extent_buffer *leaf, in check_block_group_item() argument
439 u32 item_size = btrfs_item_size_nr(leaf, slot); in check_block_group_item()
448 block_group_err(leaf, slot, in check_block_group_item()
454 block_group_err(leaf, slot, in check_block_group_item()
460 read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot), in check_block_group_item()
464 block_group_err(leaf, slot, in check_block_group_item()
472 block_group_err(leaf, slot, in check_block_group_item()
480 block_group_err(leaf, slot, in check_block_group_item()
493 block_group_err(leaf, slot, in check_block_group_item()
506 static void chunk_err(const struct extent_buffer *leaf, in chunk_err() argument
510 const struct btrfs_fs_info *fs_info = leaf->fs_info; in chunk_err()
518 is_sb = (leaf->start == BTRFS_SUPER_INFO_OFFSET); in chunk_err()
525 for (i = 0; i < btrfs_header_nritems(leaf); i++) { in chunk_err()
526 if (btrfs_item_ptr_offset(leaf, i) == in chunk_err()
544 BTRFS_CHUNK_TREE_OBJECTID, leaf->start, slot, in chunk_err()
555 int btrfs_check_chunk_valid(struct extent_buffer *leaf, in btrfs_check_chunk_valid() argument
558 struct btrfs_fs_info *fs_info = leaf->fs_info; in btrfs_check_chunk_valid()
567 length = btrfs_chunk_length(leaf, chunk); in btrfs_check_chunk_valid()
568 stripe_len = btrfs_chunk_stripe_len(leaf, chunk); in btrfs_check_chunk_valid()
569 num_stripes = btrfs_chunk_num_stripes(leaf, chunk); in btrfs_check_chunk_valid()
570 sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk); in btrfs_check_chunk_valid()
571 type = btrfs_chunk_type(leaf, chunk); in btrfs_check_chunk_valid()
574 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
579 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
584 if (btrfs_chunk_sector_size(leaf, chunk) != fs_info->sectorsize) { in btrfs_check_chunk_valid()
585 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
587 btrfs_chunk_sector_size(leaf, chunk), in btrfs_check_chunk_valid()
592 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
597 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
604 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
608 btrfs_chunk_type(leaf, chunk)); in btrfs_check_chunk_valid()
614 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
620 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
628 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
641 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
653 chunk_err(leaf, chunk, logical, in btrfs_check_chunk_valid()
686 static int check_dev_item(struct extent_buffer *leaf, in check_dev_item() argument
692 dev_item_err(leaf, slot, in check_dev_item()
697 ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item); in check_dev_item()
698 if (btrfs_device_id(leaf, ditem) != key->offset) { in check_dev_item()
699 dev_item_err(leaf, slot, in check_dev_item()
701 key->offset, btrfs_device_id(leaf, ditem)); in check_dev_item()
710 if (btrfs_device_bytes_used(leaf, ditem) > in check_dev_item()
711 btrfs_device_total_bytes(leaf, ditem)) { in check_dev_item()
712 dev_item_err(leaf, slot, in check_dev_item()
714 btrfs_device_bytes_used(leaf, ditem), in check_dev_item()
715 btrfs_device_total_bytes(leaf, ditem)); in check_dev_item()
729 static int check_inode_item(struct extent_buffer *leaf, in check_inode_item() argument
732 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_inode_item()
742 generic_err(leaf, slot, in check_inode_item()
751 inode_item_err(fs_info, leaf, slot, in check_inode_item()
756 iitem = btrfs_item_ptr(leaf, slot, struct btrfs_inode_item); in check_inode_item()
759 if (btrfs_inode_generation(leaf, iitem) > super_gen + 1) { in check_inode_item()
760 inode_item_err(fs_info, leaf, slot, in check_inode_item()
762 btrfs_inode_generation(leaf, iitem), in check_inode_item()
767 if (btrfs_inode_transid(leaf, iitem) > super_gen + 1) { in check_inode_item()
768 inode_item_err(fs_info, leaf, slot, in check_inode_item()
770 btrfs_inode_transid(leaf, iitem), super_gen + 1); in check_inode_item()
779 mode = btrfs_inode_mode(leaf, iitem); in check_inode_item()
781 inode_item_err(fs_info, leaf, slot, in check_inode_item()
794 inode_item_err(fs_info, leaf, slot, in check_inode_item()
800 if (S_ISDIR(mode) && btrfs_inode_nlink(leaf, iitem) > 1) { in check_inode_item()
801 inode_item_err(fs_info, leaf, slot, in check_inode_item()
803 btrfs_inode_nlink(leaf, iitem)); in check_inode_item()
806 if (btrfs_inode_flags(leaf, iitem) & ~BTRFS_INODE_FLAG_MASK) { in check_inode_item()
807 inode_item_err(fs_info, leaf, slot, in check_inode_item()
809 btrfs_inode_flags(leaf, iitem) & in check_inode_item()
816 static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key, in check_root_item() argument
819 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_root_item()
826 generic_err(leaf, slot, "invalid root id 0"); in check_root_item()
836 generic_err(leaf, slot, "invalid root id 0 for reloc tree"); in check_root_item()
840 if (btrfs_item_size_nr(leaf, slot) != sizeof(ri)) { in check_root_item()
841 generic_err(leaf, slot, in check_root_item()
843 btrfs_item_size_nr(leaf, slot), sizeof(ri)); in check_root_item()
846 read_extent_buffer(leaf, &ri, btrfs_item_ptr_offset(leaf, slot), in check_root_item()
852 generic_err(leaf, slot, in check_root_item()
860 generic_err(leaf, slot, in check_root_item()
868 generic_err(leaf, slot, in check_root_item()
877 generic_err(leaf, slot, in check_root_item()
883 generic_err(leaf, slot, in check_root_item()
889 generic_err(leaf, slot, in check_root_item()
897 generic_err(leaf, slot, in check_root_item()
936 static int check_extent_item(struct extent_buffer *leaf, in check_extent_item() argument
939 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_extent_item()
944 const u32 item_size = btrfs_item_size_nr(leaf, slot); in check_extent_item()
952 generic_err(leaf, slot, in check_extent_item()
958 generic_err(leaf, slot, in check_extent_item()
967 extent_err(leaf, slot, in check_extent_item()
993 extent_err(leaf, slot, in check_extent_item()
999 end = item_size + btrfs_item_ptr_offset(leaf, slot); in check_extent_item()
1002 ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item); in check_extent_item()
1003 flags = btrfs_extent_flags(leaf, ei); in check_extent_item()
1004 total_refs = btrfs_extent_refs(leaf, ei); in check_extent_item()
1005 generation = btrfs_extent_generation(leaf, ei); in check_extent_item()
1007 extent_err(leaf, slot, in check_extent_item()
1015 extent_err(leaf, slot, in check_extent_item()
1025 extent_err(leaf, slot, in check_extent_item()
1032 extent_err(leaf, slot, in check_extent_item()
1038 extent_err(leaf, slot, in check_extent_item()
1051 if (btrfs_tree_block_level(leaf, info) >= BTRFS_MAX_LEVEL) { in check_extent_item()
1052 extent_err(leaf, slot, in check_extent_item()
1054 btrfs_tree_block_level(leaf, info), in check_extent_item()
1071 extent_err(leaf, slot, in check_extent_item()
1077 inline_type = btrfs_extent_inline_ref_type(leaf, iref); in check_extent_item()
1078 inline_offset = btrfs_extent_inline_ref_offset(leaf, iref); in check_extent_item()
1080 extent_err(leaf, slot, in check_extent_item()
1094 extent_err(leaf, slot, in check_extent_item()
1107 dref_offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_item()
1109 extent_err(leaf, slot, in check_extent_item()
1114 inline_refs += btrfs_extent_data_ref_count(leaf, dref); in check_extent_item()
1120 extent_err(leaf, slot, in check_extent_item()
1125 inline_refs += btrfs_shared_data_ref_count(leaf, sref); in check_extent_item()
1128 extent_err(leaf, slot, "unknown inline ref type: %u", in check_extent_item()
1136 extent_err(leaf, slot, in check_extent_item()
1143 extent_err(leaf, slot, in check_extent_item()
1151 static int check_simple_keyed_refs(struct extent_buffer *leaf, in check_simple_keyed_refs() argument
1159 if (btrfs_item_size_nr(leaf, slot) != expect_item_size) { in check_simple_keyed_refs()
1160 generic_err(leaf, slot, in check_simple_keyed_refs()
1162 btrfs_item_size_nr(leaf, slot), in check_simple_keyed_refs()
1166 if (!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize)) { in check_simple_keyed_refs()
1167 generic_err(leaf, slot, in check_simple_keyed_refs()
1169 key->objectid, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1173 !IS_ALIGNED(key->offset, leaf->fs_info->sectorsize)) { in check_simple_keyed_refs()
1174 extent_err(leaf, slot, in check_simple_keyed_refs()
1176 key->offset, leaf->fs_info->sectorsize); in check_simple_keyed_refs()
1182 static int check_extent_data_ref(struct extent_buffer *leaf, in check_extent_data_ref() argument
1186 unsigned long ptr = btrfs_item_ptr_offset(leaf, slot); in check_extent_data_ref()
1187 const unsigned long end = ptr + btrfs_item_size_nr(leaf, slot); in check_extent_data_ref()
1189 if (btrfs_item_size_nr(leaf, slot) % sizeof(*dref) != 0) { in check_extent_data_ref()
1190 generic_err(leaf, slot, in check_extent_data_ref()
1192 btrfs_item_size_nr(leaf, slot), in check_extent_data_ref()
1195 if (!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize)) { in check_extent_data_ref()
1196 generic_err(leaf, slot, in check_extent_data_ref()
1198 key->objectid, leaf->fs_info->sectorsize); in check_extent_data_ref()
1208 root_objectid = btrfs_extent_data_ref_root(leaf, dref); in check_extent_data_ref()
1209 owner = btrfs_extent_data_ref_objectid(leaf, dref); in check_extent_data_ref()
1210 offset = btrfs_extent_data_ref_offset(leaf, dref); in check_extent_data_ref()
1213 extent_err(leaf, slot, in check_extent_data_ref()
1218 if (!IS_ALIGNED(offset, leaf->fs_info->sectorsize)) { in check_extent_data_ref()
1219 extent_err(leaf, slot, in check_extent_data_ref()
1221 offset, leaf->fs_info->sectorsize); in check_extent_data_ref()
1230 static int check_leaf_item(struct extent_buffer *leaf, in check_leaf_item() argument
1239 ret = check_extent_data_item(leaf, key, slot, prev_key); in check_leaf_item()
1242 ret = check_csum_item(leaf, key, slot); in check_leaf_item()
1247 ret = check_dir_item(leaf, key, slot); in check_leaf_item()
1250 ret = check_block_group_item(leaf, key, slot); in check_leaf_item()
1253 chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk); in check_leaf_item()
1254 ret = btrfs_check_chunk_valid(leaf, chunk, key->offset); in check_leaf_item()
1257 ret = check_dev_item(leaf, key, slot); in check_leaf_item()
1260 ret = check_inode_item(leaf, key, slot); in check_leaf_item()
1263 ret = check_root_item(leaf, key, slot); in check_leaf_item()
1267 ret = check_extent_item(leaf, key, slot); in check_leaf_item()
1272 ret = check_simple_keyed_refs(leaf, key, slot); in check_leaf_item()
1275 ret = check_extent_data_ref(leaf, key, slot); in check_leaf_item()
1281 static int check_leaf(struct extent_buffer *leaf, bool check_item_data) in check_leaf() argument
1283 struct btrfs_fs_info *fs_info = leaf->fs_info; in check_leaf()
1287 u32 nritems = btrfs_header_nritems(leaf); in check_leaf()
1290 if (btrfs_header_level(leaf) != 0) { in check_leaf()
1291 generic_err(leaf, 0, in check_leaf()
1293 btrfs_header_level(leaf)); in check_leaf()
1305 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) { in check_leaf()
1306 u64 owner = btrfs_header_owner(leaf); in check_leaf()
1315 generic_err(leaf, 0, in check_leaf()
1322 generic_err(leaf, 0, in check_leaf()
1347 btrfs_item_key_to_cpu(leaf, &key, slot); in check_leaf()
1351 generic_err(leaf, slot, in check_leaf()
1367 item_end_expected = btrfs_item_offset_nr(leaf, in check_leaf()
1369 if (btrfs_item_end_nr(leaf, slot) != item_end_expected) { in check_leaf()
1370 generic_err(leaf, slot, in check_leaf()
1372 btrfs_item_end_nr(leaf, slot), in check_leaf()
1382 if (btrfs_item_end_nr(leaf, slot) > in check_leaf()
1384 generic_err(leaf, slot, in check_leaf()
1386 btrfs_item_end_nr(leaf, slot), in check_leaf()
1393 btrfs_item_ptr_offset(leaf, slot)) { in check_leaf()
1394 generic_err(leaf, slot, in check_leaf()
1398 btrfs_item_ptr_offset(leaf, slot)); in check_leaf()
1407 ret = check_leaf_item(leaf, &key, slot, &prev_key); in check_leaf()
1420 int btrfs_check_leaf_full(struct extent_buffer *leaf) in btrfs_check_leaf_full() argument
1422 return check_leaf(leaf, true); in btrfs_check_leaf_full()
1426 int btrfs_check_leaf_relaxed(struct extent_buffer *leaf) in btrfs_check_leaf_relaxed() argument
1428 return check_leaf(leaf, false); in btrfs_check_leaf_relaxed()