From 61907d4e8164ed9504a00b8e2c4ca6601f126b0d Mon Sep 17 00:00:00 2001 From: Shen Feng Date: Wed, 3 Jun 2009 12:02:23 -0400 Subject: Update btrfs-debug-tree to output more readable strings. output objectid in btrfs_disk_key with human readable strings. Other updates are included for more readable output. Thanks Fengguang's fix to this patch. Signed-off-by: Shen Feng Signed-off-by: Chris Mason --- print-tree.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 95 insertions(+), 26 deletions(-) (limited to 'print-tree.c') diff --git a/print-tree.c b/print-tree.c index 846d9662..cd21de1d 100644 --- a/print-tree.c +++ b/print-tree.c @@ -23,6 +23,7 @@ #include "radix-tree.h" #include "ctree.h" #include "disk-io.h" +#include "print-tree.h" static int print_dir_item(struct extent_buffer *eb, struct btrfs_item *item, struct btrfs_dir_item *di) @@ -38,9 +39,9 @@ static int print_dir_item(struct extent_buffer *eb, struct btrfs_item *item, total = btrfs_item_size(eb, item); while(cur < total) { btrfs_dir_item_key(eb, di, &location); - printf("\t\tdir index %llu type %u\n", - (unsigned long long)btrfs_disk_key_objectid(&location), - btrfs_dir_type(eb, di)); + printf("\t\tlocation "); + btrfs_print_key(&location); + printf(" type %u\n", btrfs_dir_type(eb, di)); name_len = btrfs_dir_name_len(eb, di); data_len = btrfs_dir_data_len(eb, di); len = (name_len <= sizeof(namebuf))? name_len: sizeof(namebuf); @@ -226,7 +227,7 @@ static void print_key_type(u8 type) printf("EXTENT_DATA"); break; case BTRFS_BLOCK_GROUP_ITEM_KEY: - printf("GROUP_ITEM"); + printf("BLOCK_GROUP_ITEM"); break; case BTRFS_CHUNK_ITEM_KEY: printf("CHUNK_ITEM"); @@ -245,6 +246,79 @@ static void print_key_type(u8 type) }; } +static void print_objectid(unsigned long long objectid, u8 type) +{ + if (type == BTRFS_DEV_EXTENT_KEY) { + printf("%llu", objectid); /* device id */ + return; + } + + switch (objectid) { + case BTRFS_ROOT_TREE_OBJECTID: + if (type == BTRFS_DEV_ITEM_KEY) + printf("DEV_ITEMS"); + else + printf("ROOT_TREE"); + break; + case BTRFS_EXTENT_TREE_OBJECTID: + printf("EXTENT_TREE"); + break; + case BTRFS_CHUNK_TREE_OBJECTID: + printf("CHUNK_TREE"); + break; + case BTRFS_DEV_TREE_OBJECTID: + printf("DEV_TREE"); + break; + case BTRFS_FS_TREE_OBJECTID: + printf("FS_TREE"); + break; + case BTRFS_ROOT_TREE_DIR_OBJECTID: + printf("ROOT_TREE_DIR"); + break; + case BTRFS_CSUM_TREE_OBJECTID: + printf("CSUM_TREE"); + break; + case BTRFS_ORPHAN_OBJECTID: + printf("ORPHAN"); + break; + case BTRFS_TREE_LOG_OBJECTID: + printf("TREE_LOG"); + break; + case BTRFS_TREE_LOG_FIXUP_OBJECTID: + printf("LOG_FIXUP"); + break; + case BTRFS_TREE_RELOC_OBJECTID: + printf("TREE_RELOC"); + break; + case BTRFS_DATA_RELOC_TREE_OBJECTID: + printf("DATA_RELOC_TREE"); + break; + case BTRFS_EXTENT_CSUM_OBJECTID: + printf("EXTENT_CSUM"); + break; + case BTRFS_MULTIPLE_OBJECTIDS: + printf("MULTIPLE"); + break; + case BTRFS_FIRST_CHUNK_TREE_OBJECTID: + printf("FIRST_CHUNK_TREE"); + break; + default: + printf("%llu", objectid); + } +} + +void btrfs_print_key(struct btrfs_disk_key *disk_key) +{ + u8 type; + printf("key ("); + type = btrfs_disk_key_type(disk_key); + print_objectid((unsigned long long)btrfs_disk_key_objectid(disk_key), + type); + printf(" "); + print_key_type(type); + printf(" %llu)", (unsigned long long)btrfs_disk_key_offset(disk_key)); +} + void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) { int i; @@ -267,7 +341,7 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) u32 nr = btrfs_header_nritems(l); u32 type; - printf("leaf %llu ptrs %d free space %d generation %llu owner %llu\n", + printf("leaf %llu items %d free space %d generation %llu owner %llu\n", (unsigned long long)btrfs_header_bytenr(l), nr, btrfs_leaf_free_space(root, l), (unsigned long long)btrfs_header_generation(l), @@ -278,12 +352,9 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) item = btrfs_item_nr(l, i); btrfs_item_key(l, &disk_key, i); type = btrfs_disk_key_type(&disk_key); - printf("\titem %d key (%llu ", - i, - (unsigned long long)btrfs_disk_key_objectid(&disk_key)); - print_key_type(type); - printf(" %llu) itemoff %d itemsize %d\n", - (unsigned long long)btrfs_disk_key_offset(&disk_key), + printf("\titem %d ", i); + btrfs_print_key(&disk_key); + printf(" itemoff %d itemsize %d\n", btrfs_item_offset(l, item), btrfs_item_size(l, item)); switch (type) { @@ -323,15 +394,13 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) btrfs_root_level(&root_item), (unsigned long long)btrfs_root_dirid(&root_item), btrfs_root_refs(&root_item)); - if (1 || btrfs_root_refs(&root_item) == 0) { + if (btrfs_root_refs(&root_item) == 0) { struct btrfs_key drop_key; btrfs_disk_key_to_cpu(&drop_key, &root_item.drop_progress); - printf("\t\tdrop key %Lu %x %Lu level %d\n", - (unsigned long long)drop_key.objectid, - drop_key.type, - (unsigned long long)drop_key.offset, - root_item.drop_level); + printf("\t\tdrop "); + btrfs_print_key(&root_item.drop_progress); + printf(" level %d\n", root_item.drop_level); } break; case BTRFS_ROOT_REF_KEY: @@ -372,8 +441,9 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l) struct btrfs_block_group_item); read_extent_buffer(l, &bg_item, (unsigned long)bi, sizeof(bg_item)); - printf("\t\tblock group used %llu flags %llu\n", + printf("\t\tblock group used %llu chunk_objectid %llu flags %llu\n", (unsigned long long)btrfs_block_group_used(&bg_item), + (unsigned long long)btrfs_block_group_chunk_objectid(&bg_item), (unsigned long long)btrfs_block_group_flags(&bg_item)); break; case BTRFS_CHUNK_ITEM_KEY: @@ -413,6 +483,7 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb) int i; u32 nr; u32 size; + struct btrfs_disk_key disk_key; struct btrfs_key key; if (!eb) @@ -422,7 +493,7 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb) btrfs_print_leaf(root, eb); return; } - printf("node %llu level %d ptrs %d free %u generation %llu owner %llu\n", + printf("node %llu level %d items %d free %u generation %llu owner %llu\n", (unsigned long long)eb->start, btrfs_header_level(eb), nr, (u32)BTRFS_NODEPTRS_PER_BLOCK(root) - nr, @@ -433,13 +504,11 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb) size = btrfs_level_size(root, btrfs_header_level(eb) - 1); for (i = 0; i < nr; i++) { u64 blocknr = btrfs_node_blockptr(eb, i); - btrfs_node_key_to_cpu(eb, &key, i); - printf("\tkey %d (%llu ", - i, - (unsigned long long)key.objectid); - print_key_type(key.type); - printf(" %llu) block %llu (%llu) gen %llu\n", - (unsigned long long)key.offset, + btrfs_node_key(eb, &disk_key, i); + btrfs_disk_key_to_cpu(&key, &disk_key); + printf("\t"); + btrfs_print_key(&disk_key); + printf(" block %llu (%llu) gen %llu\n", (unsigned long long)blocknr, (unsigned long long)blocknr / size, (unsigned long long)btrfs_node_ptr_generation(eb, i)); -- cgit v1.2.3