+ qg_status = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_status_item);
+ memset(flags_str, 0, sizeof(flags_str));
+ qgroup_flags_to_str(btrfs_qgroup_status_flags(eb, qg_status),
+ flags_str);
+ printf("\t\tversion %llu generation %llu flags %s scan %lld\n",
+ (unsigned long long)btrfs_qgroup_status_version(eb, qg_status),
+ (unsigned long long)btrfs_qgroup_status_generation(eb, qg_status),
+ flags_str,
+ (unsigned long long)btrfs_qgroup_status_rescan(eb, qg_status));
+}
+
+static void print_qgroup_info(struct extent_buffer *eb, int slot)
+{
+ struct btrfs_qgroup_info_item *qg_info;
+
+ qg_info = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_info_item);
+ printf("\t\tgeneration %llu\n"
+ "\t\treferenced %llu referenced_compressed %llu\n"
+ "\t\texclusive %llu exclusive_compressed %llu\n",
+ (unsigned long long)btrfs_qgroup_info_generation(eb, qg_info),
+ (unsigned long long)btrfs_qgroup_info_referenced(eb, qg_info),
+ (unsigned long long)btrfs_qgroup_info_referenced_compressed(eb,
+ qg_info),
+ (unsigned long long)btrfs_qgroup_info_exclusive(eb, qg_info),
+ (unsigned long long)btrfs_qgroup_info_exclusive_compressed(eb,
+ qg_info));
+}
+
+static void print_qgroup_limit(struct extent_buffer *eb, int slot)
+{
+ struct btrfs_qgroup_limit_item *qg_limit;
+
+ qg_limit = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_limit_item);
+ printf("\t\tflags %llx\n"
+ "\t\tmax_referenced %lld max_exclusive %lld\n"
+ "\t\trsv_referenced %lld rsv_exclusive %lld\n",
+ (unsigned long long)btrfs_qgroup_limit_flags(eb, qg_limit),
+ (long long)btrfs_qgroup_limit_max_referenced(eb, qg_limit),
+ (long long)btrfs_qgroup_limit_max_exclusive(eb, qg_limit),
+ (long long)btrfs_qgroup_limit_rsv_referenced(eb, qg_limit),
+ (long long)btrfs_qgroup_limit_rsv_exclusive(eb, qg_limit));
+}
+
+static void print_persistent_item(struct extent_buffer *eb, void *ptr,
+ u32 item_size, u64 objectid, u64 offset)
+{
+ printf("\t\tpersistent item objectid ");
+ print_objectid(stdout, objectid, BTRFS_PERSISTENT_ITEM_KEY);
+ printf(" offset %llu\n", (unsigned long long)offset);
+ switch (objectid) {
+ case BTRFS_DEV_STATS_OBJECTID:
+ print_dev_stats(eb, ptr, item_size);
+ break;
+ default:
+ printf("\t\tunknown persistent item objectid %llu\n", objectid);
+ }
+}
+
+static void print_temporary_item(struct extent_buffer *eb, void *ptr,
+ u64 objectid, u64 offset)
+{
+ printf("\t\ttemporary item objectid ");
+ print_objectid(stdout, objectid, BTRFS_TEMPORARY_ITEM_KEY);
+ printf(" offset %llu\n", (unsigned long long)offset);
+ switch (objectid) {
+ case BTRFS_BALANCE_OBJECTID:
+ print_balance_item(eb, ptr);
+ break;
+ default:
+ printf("\t\tunknown temporary item objectid %llu\n", objectid);
+ }
+}
+
+static void print_extent_csum(struct extent_buffer *eb,
+ struct btrfs_fs_info *fs_info, u32 item_size, u64 start)
+{
+ u32 size;
+
+ size = (item_size / btrfs_super_csum_size(fs_info->super_copy)) *
+ fs_info->sectorsize;
+ printf("\t\trange start %llu end %llu length %u\n",
+ (unsigned long long)start,
+ (unsigned long long)start + size, size);
+}
+
+/* Caller must ensure sizeof(*ret) >= 14 "WRITTEN|RELOC" */
+static void header_flags_to_str(u64 flags, char *ret)
+{
+ int empty = 1;
+
+ if (flags & BTRFS_HEADER_FLAG_WRITTEN) {
+ empty = 0;
+ strcpy(ret, "WRITTEN");
+ }
+ if (flags & BTRFS_HEADER_FLAG_RELOC) {
+ if (!empty)
+ strcat(ret, "|");
+ strcat(ret, "RELOC");
+ }
+}
+
+void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb)
+{
+ struct btrfs_item *item;
+ struct btrfs_disk_key disk_key;
+ char flags_str[128];
+ u32 i;
+ u32 nr;
+ u64 flags;
+ u8 backref_rev;
+
+ flags = btrfs_header_flags(eb) & ~BTRFS_BACKREF_REV_MASK;
+ backref_rev = btrfs_header_flags(eb) >> BTRFS_BACKREF_REV_SHIFT;
+ header_flags_to_str(flags, flags_str);
+ nr = btrfs_header_nritems(eb);
+
+ printf("leaf %llu items %d free space %d generation %llu owner ",
+ (unsigned long long)btrfs_header_bytenr(eb), nr,
+ btrfs_leaf_free_space(root, eb),
+ (unsigned long long)btrfs_header_generation(eb));
+ print_objectid(stdout, btrfs_header_owner(eb), 0);
+ printf("\n");
+ printf("leaf %llu flags 0x%llx(%s) backref revision %d\n",
+ btrfs_header_bytenr(eb), flags, flags_str, backref_rev);
+ print_uuids(eb);