Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright (C) 2007 Oracle.  All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #include "ctree.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #include "disk-io.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include "print-tree.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) struct root_name_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 	u64 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	char name[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) static const struct root_name_map root_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	{ BTRFS_ROOT_TREE_OBJECTID,		"ROOT_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	{ BTRFS_EXTENT_TREE_OBJECTID,		"EXTENT_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	{ BTRFS_CHUNK_TREE_OBJECTID,		"CHUNK_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	{ BTRFS_DEV_TREE_OBJECTID,		"DEV_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	{ BTRFS_FS_TREE_OBJECTID,		"FS_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	{ BTRFS_CSUM_TREE_OBJECTID,		"CSUM_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	{ BTRFS_TREE_LOG_OBJECTID,		"TREE_LOG"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	{ BTRFS_QUOTA_TREE_OBJECTID,		"QUOTA_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	{ BTRFS_UUID_TREE_OBJECTID,		"UUID_TREE"		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	{ BTRFS_FREE_SPACE_TREE_OBJECTID,	"FREE_SPACE_TREE"	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	{ BTRFS_DATA_RELOC_TREE_OBJECTID,	"DATA_RELOC_TREE"	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) const char *btrfs_root_name(const struct btrfs_key *key, char *buf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	if (key->objectid == BTRFS_TREE_RELOC_OBJECTID) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 		snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 			 "TREE_RELOC offset=%llu", key->offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 		return buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	for (i = 0; i < ARRAY_SIZE(root_map); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 		if (root_map[i].id == key->objectid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 			return root_map[i].name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, "%llu", key->objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	return buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) static void print_chunk(struct extent_buffer *eb, struct btrfs_chunk *chunk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	int num_stripes = btrfs_chunk_num_stripes(eb, chunk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	pr_info("\t\tchunk length %llu owner %llu type %llu num_stripes %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	       btrfs_chunk_length(eb, chunk), btrfs_chunk_owner(eb, chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	       btrfs_chunk_type(eb, chunk), num_stripes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	for (i = 0 ; i < num_stripes ; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 		pr_info("\t\t\tstripe %d devid %llu offset %llu\n", i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 		      btrfs_stripe_devid_nr(eb, chunk, i),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 		      btrfs_stripe_offset_nr(eb, chunk, i));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) static void print_dev_item(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 			   struct btrfs_dev_item *dev_item)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	pr_info("\t\tdev item devid %llu total_bytes %llu bytes used %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	       btrfs_device_id(eb, dev_item),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	       btrfs_device_total_bytes(eb, dev_item),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	       btrfs_device_bytes_used(eb, dev_item));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) static void print_extent_data_ref(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 				  struct btrfs_extent_data_ref *ref)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	pr_cont("extent data backref root %llu objectid %llu offset %llu count %u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	       btrfs_extent_data_ref_root(eb, ref),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	       btrfs_extent_data_ref_objectid(eb, ref),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	       btrfs_extent_data_ref_offset(eb, ref),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	       btrfs_extent_data_ref_count(eb, ref));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) static void print_extent_item(struct extent_buffer *eb, int slot, int type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	struct btrfs_extent_item *ei;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	struct btrfs_extent_inline_ref *iref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	struct btrfs_extent_data_ref *dref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	struct btrfs_shared_data_ref *sref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	struct btrfs_disk_key key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	unsigned long end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	u32 item_size = btrfs_item_size_nr(eb, slot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	u64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	u64 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	int ref_index = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	if (unlikely(item_size < sizeof(*ei))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		btrfs_print_v0_err(eb->fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	ei = btrfs_item_ptr(eb, slot, struct btrfs_extent_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	flags = btrfs_extent_flags(eb, ei);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	pr_info("\t\textent refs %llu gen %llu flags %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	       btrfs_extent_refs(eb, ei), btrfs_extent_generation(eb, ei),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	       flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	if ((type == BTRFS_EXTENT_ITEM_KEY) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	    flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 		struct btrfs_tree_block_info *info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 		info = (struct btrfs_tree_block_info *)(ei + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 		btrfs_tree_block_key(eb, info, &key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 		pr_info("\t\ttree block key (%llu %u %llu) level %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 		       btrfs_disk_key_objectid(&key), key.type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 		       btrfs_disk_key_offset(&key),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 		       btrfs_tree_block_level(eb, info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 		iref = (struct btrfs_extent_inline_ref *)(info + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 		iref = (struct btrfs_extent_inline_ref *)(ei + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	ptr = (unsigned long)iref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	end = (unsigned long)ei + item_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	while (ptr < end) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 		iref = (struct btrfs_extent_inline_ref *)ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 		type = btrfs_extent_inline_ref_type(eb, iref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 		offset = btrfs_extent_inline_ref_offset(eb, iref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 		pr_info("\t\tref#%d: ", ref_index++);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 		switch (type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 		case BTRFS_TREE_BLOCK_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 			pr_cont("tree block backref root %llu\n", offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 		case BTRFS_SHARED_BLOCK_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 			pr_cont("shared block backref parent %llu\n", offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 			/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 			 * offset is supposed to be a tree block which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 			 * must be aligned to nodesize.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 			if (!IS_ALIGNED(offset, eb->fs_info->sectorsize))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 				pr_info(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 			"\t\t\t(parent %llu not aligned to sectorsize %u)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 					offset, eb->fs_info->sectorsize);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		case BTRFS_EXTENT_DATA_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 			dref = (struct btrfs_extent_data_ref *)(&iref->offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 			print_extent_data_ref(eb, dref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 		case BTRFS_SHARED_DATA_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 			sref = (struct btrfs_shared_data_ref *)(iref + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 			pr_cont("shared data backref parent %llu count %u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 			       offset, btrfs_shared_data_ref_count(eb, sref));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 			/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 			 * offset is supposed to be a tree block which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 			 * must be aligned to nodesize.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 			if (!IS_ALIGNED(offset, eb->fs_info->nodesize))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 				pr_info(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 			"\t\t\t(parent %llu not aligned to sectorsize %u)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 				     offset, eb->fs_info->sectorsize);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 		default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 			pr_cont("(extent %llu has INVALID ref type %d)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 				  eb->start, type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 			return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		ptr += btrfs_extent_inline_ref_size(type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	WARN_ON(ptr > end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) static void print_uuid_item(struct extent_buffer *l, unsigned long offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 			    u32 item_size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	if (!IS_ALIGNED(item_size, sizeof(u64))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 		pr_warn("BTRFS: uuid item with illegal size %lu!\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 			(unsigned long)item_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	while (item_size) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		__le64 subvol_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		read_extent_buffer(l, &subvol_id, offset, sizeof(subvol_id));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		pr_info("\t\tsubvol_id %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 		       (unsigned long long)le64_to_cpu(subvol_id));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 		item_size -= sizeof(u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		offset += sizeof(u64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)  * Helper to output refs and locking status of extent buffer.  Useful to debug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)  * race condition related problems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static void print_eb_refs_lock(struct extent_buffer *eb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #ifdef CONFIG_BTRFS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	btrfs_info(eb->fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) "refs %u lock (w:%d r:%d bw:%d br:%d sw:%d sr:%d) lock_owner %u current %u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		   atomic_read(&eb->refs), eb->write_locks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		   atomic_read(&eb->read_locks),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		   eb->blocking_writers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 		   atomic_read(&eb->blocking_readers),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 		   eb->spinning_writers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 		   atomic_read(&eb->spinning_readers),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 		   eb->lock_owner, current->pid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) void btrfs_print_leaf(struct extent_buffer *l)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	struct btrfs_fs_info *fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	u32 type, nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	struct btrfs_item *item;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	struct btrfs_root_item *ri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	struct btrfs_dir_item *di;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	struct btrfs_inode_item *ii;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	struct btrfs_block_group_item *bi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	struct btrfs_file_extent_item *fi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	struct btrfs_extent_data_ref *dref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	struct btrfs_shared_data_ref *sref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	struct btrfs_dev_extent *dev_extent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	struct btrfs_key key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	struct btrfs_key found_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	if (!l)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	fs_info = l->fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	nr = btrfs_header_nritems(l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 		   "leaf %llu gen %llu total ptrs %d free space %d owner %llu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 		   btrfs_header_bytenr(l), btrfs_header_generation(l), nr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 		   btrfs_leaf_free_space(l), btrfs_header_owner(l));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	print_eb_refs_lock(l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	for (i = 0 ; i < nr ; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 		item = btrfs_item_nr(i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 		btrfs_item_key_to_cpu(l, &key, i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 		type = key.type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 		pr_info("\titem %d key (%llu %u %llu) itemoff %d itemsize %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 			i, key.objectid, type, key.offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 			btrfs_item_offset(l, item), btrfs_item_size(l, item));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 		switch (type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 		case BTRFS_INODE_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 			ii = btrfs_item_ptr(l, i, struct btrfs_inode_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 			pr_info("\t\tinode generation %llu size %llu mode %o\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 			       btrfs_inode_generation(l, ii),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 			       btrfs_inode_size(l, ii),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 			       btrfs_inode_mode(l, ii));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 		case BTRFS_DIR_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 			di = btrfs_item_ptr(l, i, struct btrfs_dir_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 			btrfs_dir_item_key_to_cpu(l, di, &found_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 			pr_info("\t\tdir oid %llu type %u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 				found_key.objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 				btrfs_dir_type(l, di));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 		case BTRFS_ROOT_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 			ri = btrfs_item_ptr(l, i, struct btrfs_root_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 			pr_info("\t\troot data bytenr %llu refs %u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 				btrfs_disk_root_bytenr(l, ri),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 				btrfs_disk_root_refs(l, ri));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 		case BTRFS_EXTENT_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 		case BTRFS_METADATA_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 			print_extent_item(l, i, type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 		case BTRFS_TREE_BLOCK_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 			pr_info("\t\ttree block backref\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 		case BTRFS_SHARED_BLOCK_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 			pr_info("\t\tshared block backref\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 		case BTRFS_EXTENT_DATA_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 			dref = btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 					      struct btrfs_extent_data_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 			print_extent_data_ref(l, dref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 		case BTRFS_SHARED_DATA_REF_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 			sref = btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 					      struct btrfs_shared_data_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 			pr_info("\t\tshared data backref count %u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 			       btrfs_shared_data_ref_count(l, sref));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 		case BTRFS_EXTENT_DATA_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 			fi = btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 					    struct btrfs_file_extent_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 			if (btrfs_file_extent_type(l, fi) ==
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 			    BTRFS_FILE_EXTENT_INLINE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 				pr_info("\t\tinline extent data size %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 				       btrfs_file_extent_ram_bytes(l, fi));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 			pr_info("\t\textent data disk bytenr %llu nr %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 			       btrfs_file_extent_disk_bytenr(l, fi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 			       btrfs_file_extent_disk_num_bytes(l, fi));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 			pr_info("\t\textent data offset %llu nr %llu ram %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 			       btrfs_file_extent_offset(l, fi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 			       btrfs_file_extent_num_bytes(l, fi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 			       btrfs_file_extent_ram_bytes(l, fi));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 		case BTRFS_EXTENT_REF_V0_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 			btrfs_print_v0_err(fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 			btrfs_handle_fs_error(fs_info, -EINVAL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 		case BTRFS_BLOCK_GROUP_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 			bi = btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 					    struct btrfs_block_group_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 			pr_info(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 		   "\t\tblock group used %llu chunk_objectid %llu flags %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 				btrfs_block_group_used(l, bi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 				btrfs_block_group_chunk_objectid(l, bi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 				btrfs_block_group_flags(l, bi));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 		case BTRFS_CHUNK_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 			print_chunk(l, btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 						      struct btrfs_chunk));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 		case BTRFS_DEV_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 			print_dev_item(l, btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 					struct btrfs_dev_item));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 		case BTRFS_DEV_EXTENT_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 			dev_extent = btrfs_item_ptr(l, i,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 						    struct btrfs_dev_extent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 			pr_info("\t\tdev extent chunk_tree %llu\n\t\tchunk objectid %llu chunk offset %llu length %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 			       btrfs_dev_extent_chunk_tree(l, dev_extent),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 			       btrfs_dev_extent_chunk_objectid(l, dev_extent),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 			       btrfs_dev_extent_chunk_offset(l, dev_extent),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 			       btrfs_dev_extent_length(l, dev_extent));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 		case BTRFS_PERSISTENT_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 			pr_info("\t\tpersistent item objectid %llu offset %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 					key.objectid, key.offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 			switch (key.objectid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 			case BTRFS_DEV_STATS_OBJECTID:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 				pr_info("\t\tdevice stats\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 			default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 				pr_info("\t\tunknown persistent item\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 		case BTRFS_TEMPORARY_ITEM_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 			pr_info("\t\ttemporary item objectid %llu offset %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 					key.objectid, key.offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 			switch (key.objectid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 			case BTRFS_BALANCE_OBJECTID:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 				pr_info("\t\tbalance status\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 			default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 				pr_info("\t\tunknown temporary item\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 		case BTRFS_DEV_REPLACE_KEY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 			pr_info("\t\tdev replace\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 		case BTRFS_UUID_KEY_SUBVOL:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 		case BTRFS_UUID_KEY_RECEIVED_SUBVOL:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 			print_uuid_item(l, btrfs_item_ptr_offset(l, i),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 					btrfs_item_size_nr(l, i));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) void btrfs_print_tree(struct extent_buffer *c, bool follow)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	struct btrfs_fs_info *fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	int i; u32 nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	struct btrfs_key key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	int level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	if (!c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	fs_info = c->fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	nr = btrfs_header_nritems(c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	level = btrfs_header_level(c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 		btrfs_print_leaf(c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 		   "node %llu level %d gen %llu total ptrs %d free spc %u owner %llu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 		   btrfs_header_bytenr(c), level, btrfs_header_generation(c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 		   nr, (u32)BTRFS_NODEPTRS_PER_BLOCK(fs_info) - nr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 		   btrfs_header_owner(c));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	print_eb_refs_lock(c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	for (i = 0; i < nr; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 		btrfs_node_key_to_cpu(c, &key, i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 		pr_info("\tkey %d (%llu %u %llu) block %llu gen %llu\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 		       i, key.objectid, key.type, key.offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 		       btrfs_node_blockptr(c, i),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 		       btrfs_node_ptr_generation(c, i));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	if (!follow)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	for (i = 0; i < nr; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 		struct btrfs_key first_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 		struct extent_buffer *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 		btrfs_node_key_to_cpu(c, &first_key, i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 		next = read_tree_block(fs_info, btrfs_node_blockptr(c, i),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 				       btrfs_node_ptr_generation(c, i),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 				       level - 1, &first_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 		if (IS_ERR(next)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 		} else if (!extent_buffer_uptodate(next)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 			free_extent_buffer(next);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 		if (btrfs_is_leaf(next) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 		   level != 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 			BUG();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 		if (btrfs_header_level(next) !=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 		       level - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 			BUG();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 		btrfs_print_tree(next, follow);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 		free_extent_buffer(next);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) }