- fprintf(stderr, "usage: btrfs-debug-tree [ -e ] [ -d ] [ -r ] [ -R ]\n");
- fprintf(stderr, " [-b block_num ] device\n");
- fprintf(stderr, "\t-e : print detailed extents info\n");
- fprintf(stderr, "\t-d : print info of btrfs device and root tree dirs"
- " only\n");
- fprintf(stderr, "\t-r : print info of roots only\n");
- fprintf(stderr, "\t-R : print info of roots and root backups\n");
- fprintf(stderr, "\t-b block_num : print info of the specified block"
- " only\n");
- fprintf(stderr, "%s\n", BTRFS_BUILD_VERSION);
- exit(1);
-}
-
-static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
-{
- int i;
- u32 nr;
- u32 size;
-
- if (!eb)
- return;
-
- if (btrfs_is_leaf(eb)) {
- btrfs_print_leaf(root, eb);
- return;
- }
-
- size = btrfs_level_size(root, btrfs_header_level(eb) - 1);
- nr = btrfs_header_nritems(eb);
- for (i = 0; i < nr; i++) {
- struct extent_buffer *next = read_tree_block(root,
- btrfs_node_blockptr(eb, i),
- size,
- btrfs_node_ptr_generation(eb, i));
- if (btrfs_is_leaf(next) &&
- btrfs_header_level(eb) != 1)
- BUG();
- if (btrfs_header_level(next) !=
- btrfs_header_level(eb) - 1)
- BUG();
- print_extents(root, next);
- free_extent_buffer(next);
- }
-}
-
-static void print_old_roots(struct btrfs_super_block *super)
-{
- struct btrfs_root_backup *backup;
- int i;
-
- for (i = 0; i < BTRFS_NUM_BACKUP_ROOTS; i++) {
- backup = super->super_roots + i;
- printf("btrfs root backup slot %d\n", i);
- printf("\ttree root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_tree_root_gen(backup),
- (unsigned long long)btrfs_backup_tree_root(backup));
-
- printf("\t\textent root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_extent_root_gen(backup),
- (unsigned long long)btrfs_backup_extent_root(backup));
-
- printf("\t\tchunk root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_chunk_root_gen(backup),
- (unsigned long long)btrfs_backup_chunk_root(backup));
-
- printf("\t\tdevice root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_dev_root_gen(backup),
- (unsigned long long)btrfs_backup_dev_root(backup));
-
- printf("\t\tcsum root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_csum_root_gen(backup),
- (unsigned long long)btrfs_backup_csum_root(backup));
-
- printf("\t\tfs root gen %llu block %llu\n",
- (unsigned long long)btrfs_backup_fs_root_gen(backup),
- (unsigned long long)btrfs_backup_fs_root(backup));
-
- printf("\t\t%llu used %llu total %llu devices\n",
- (unsigned long long)btrfs_backup_bytes_used(backup),
- (unsigned long long)btrfs_backup_total_bytes(backup),
- (unsigned long long)btrfs_backup_num_devices(backup));
- }
-}
-
-int main(int ac, char **av)
-{
- struct btrfs_root *root;
- struct btrfs_fs_info *info;
- struct btrfs_path path;
- struct btrfs_key key;
- struct btrfs_root_item ri;
- struct extent_buffer *leaf;
- struct btrfs_disk_key disk_key;
- struct btrfs_key found_key;
- char uuidbuf[37];