X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cmds-inspect-dump-tree.c;h=92a2a45b267e72add6f0aaf43fc4f7b17e8dcdda;hb=refs%2Fheads%2Faccepted%2Ftizen_7.0_unified;hp=0802b31e95966e4b7cfb12dcce4f5338608ee56f;hpb=992aa558397e519d2251cdc6c4d3a9e019b240a0;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/cmds-inspect-dump-tree.c b/cmds-inspect-dump-tree.c index 0802b31..92a2a45 100644 --- a/cmds-inspect-dump-tree.c +++ b/cmds-inspect-dump-tree.c @@ -33,8 +33,9 @@ #include "utils.h" #include "help.h" -static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) +static void print_extents(struct extent_buffer *eb) { + struct btrfs_fs_info *fs_info = eb->fs_info; struct extent_buffer *next; int i; u32 nr; @@ -43,13 +44,13 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) return; if (btrfs_is_leaf(eb)) { - btrfs_print_leaf(root, eb); + btrfs_print_leaf(eb); return; } nr = btrfs_header_nritems(eb); for (i = 0; i < nr; i++) { - next = read_tree_block(root->fs_info, + next = read_tree_block(fs_info, btrfs_node_blockptr(eb, i), btrfs_node_ptr_generation(eb, i)); if (!extent_buffer_uptodate(next)) @@ -68,7 +69,7 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) btrfs_header_level(eb)); goto out; } - print_extents(root, next); + print_extents(next); free_extent_buffer(next); } @@ -220,12 +221,20 @@ int cmd_inspect_dump_tree(int argc, char **argv) int uuid_tree_only = 0; int roots_only = 0; int root_backups = 0; - unsigned open_ctree_flags = OPEN_CTREE_FS_PARTIAL; + unsigned open_ctree_flags; u64 block_only = 0; struct btrfs_root *tree_root_scan; u64 tree_id = 0; bool follow = false; + /* + * For debug-tree, we care nothing about extent tree (it's just backref + * and usage accounting, only makes sense for RW operations). + * Use NO_BLOCK_GROUPS here could also speedup open_ctree() and allow us + * to inspect fs with corrupted extent tree blocks, and show as many good + * tree blocks as possible. + */ + open_ctree_flags = OPEN_CTREE_PARTIAL | OPEN_CTREE_NO_BLOCK_GROUPS; while (1) { int c; enum { GETOPT_VAL_FOLLOW = 256 }; @@ -331,7 +340,7 @@ int cmd_inspect_dump_tree(int argc, char **argv) (unsigned long long)block_only); goto close_root; } - btrfs_print_tree(root, leaf, follow); + btrfs_print_tree(leaf, follow); free_extent_buffer(leaf); goto close_root; } @@ -358,20 +367,17 @@ int cmd_inspect_dump_tree(int argc, char **argv) } else { if (info->tree_root->node) { printf("root tree\n"); - btrfs_print_tree(info->tree_root, - info->tree_root->node, 1); + btrfs_print_tree(info->tree_root->node, 1); } if (info->chunk_root->node) { printf("chunk tree\n"); - btrfs_print_tree(info->chunk_root, - info->chunk_root->node, 1); + btrfs_print_tree(info->chunk_root->node, 1); } if (info->log_root_tree) { printf("log root tree\n"); - btrfs_print_tree(info->log_root_tree, - info->log_root_tree->node, 1); + btrfs_print_tree(info->log_root_tree->node, 1); } } } @@ -391,7 +397,7 @@ again: goto close_root; } printf("root tree\n"); - btrfs_print_tree(info->tree_root, info->tree_root->node, 1); + btrfs_print_tree(info->tree_root->node, 1); goto close_root; } @@ -401,7 +407,7 @@ again: goto close_root; } printf("chunk tree\n"); - btrfs_print_tree(info->chunk_root, info->chunk_root->node, 1); + btrfs_print_tree(info->chunk_root->node, 1); goto close_root; } @@ -411,8 +417,7 @@ again: goto close_root; } printf("log root tree\n"); - btrfs_print_tree(info->log_root_tree, info->log_root_tree->node, - 1); + btrfs_print_tree(info->log_root_tree->node, 1); goto close_root; } @@ -548,7 +553,7 @@ again: printf(" tree "); btrfs_print_key(&disk_key); printf("\n"); - print_extents(tree_root_scan, buf); + print_extents(buf); } else if (!skip) { printf(" tree "); btrfs_print_key(&disk_key); @@ -558,7 +563,7 @@ again: btrfs_header_level(buf)); } else { printf(" \n"); - btrfs_print_tree(tree_root_scan, buf, 1); + btrfs_print_tree(buf, 1); } } free_extent_buffer(buf);