diff options
author | Qu Wenruo <wqu@suse.com> | 2018-03-14 09:05:38 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-03-30 22:15:54 +0200 |
commit | 992aa558397e519d2251cdc6c4d3a9e019b240a0 (patch) | |
tree | 5397c56996c94da3a33933d1a29bdfa8479d22d2 /cmds-inspect-dump-tree.c | |
parent | f37ae8d275c2f988c9fc967f8272648fb0118d3d (diff) |
btrfs-progs: dump-tree: add option to print children nodes of a given block
When debuging with "btrfs inspect dump-tree", it's not that handy if we
want to iterate all child tree blocks starting from a specified block.
-b can only print a single block, while without -b "btrfs inspect dump-tree"
will need extra tree roots fulfilled to continue, which is not possible
for a damaged filesystem.
Add a new option --follow to iterate a sub-tree starting from block
specified by --block.
Signed-off-by: Qu Wenruo <wqu@suse.com>
[ remove the short option for now ]
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-inspect-dump-tree.c')
-rw-r--r-- | cmds-inspect-dump-tree.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/cmds-inspect-dump-tree.c b/cmds-inspect-dump-tree.c index df44bb63..0802b31e 100644 --- a/cmds-inspect-dump-tree.c +++ b/cmds-inspect-dump-tree.c @@ -198,6 +198,7 @@ const char * const cmd_inspect_dump_tree_usage[] = { "-u|--uuid print only the uuid tree", "-b|--block <block_num> print info from the specified block only", "-t|--tree <tree_id> print only tree with the given id (string or number)", + "--follow use with -b, to show all children tree blocks of <block_num>", NULL }; @@ -223,9 +224,11 @@ int cmd_inspect_dump_tree(int argc, char **argv) u64 block_only = 0; struct btrfs_root *tree_root_scan; u64 tree_id = 0; + bool follow = false; while (1) { int c; + enum { GETOPT_VAL_FOLLOW = 256 }; static const struct option long_options[] = { { "extents", no_argument, NULL, 'e'}, { "device", no_argument, NULL, 'd'}, @@ -234,6 +237,7 @@ int cmd_inspect_dump_tree(int argc, char **argv) { "uuid", no_argument, NULL, 'u'}, { "block", required_argument, NULL, 'b'}, { "tree", required_argument, NULL, 't'}, + { "follow", no_argument, NULL, GETOPT_VAL_FOLLOW }, { NULL, 0, NULL, 0 } }; @@ -286,6 +290,9 @@ int cmd_inspect_dump_tree(int argc, char **argv) } break; } + case GETOPT_VAL_FOLLOW: + follow = true; + break; default: usage(cmd_inspect_dump_tree_usage); } @@ -324,7 +331,7 @@ int cmd_inspect_dump_tree(int argc, char **argv) (unsigned long long)block_only); goto close_root; } - btrfs_print_tree(root, leaf, 0); + btrfs_print_tree(root, leaf, follow); free_extent_buffer(leaf); goto close_root; } |