btrfs-progs: mkfs/rootdir: Fix inline extent creation check
[platform/upstream/btrfs-progs.git] / cmds-inspect-dump-tree.c
index 876ddcb..0802b31 100644 (file)
@@ -31,7 +31,6 @@
 #include "volumes.h"
 #include "commands.h"
 #include "utils.h"
-#include "cmds-inspect-dump-tree.h"
 #include "help.h"
 
 static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
@@ -39,7 +38,6 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
        struct extent_buffer *next;
        int i;
        u32 nr;
-       u32 size;
 
        if (!eb)
                return;
@@ -49,12 +47,11 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
                return;
        }
 
-       size = root->fs_info->nodesize;
        nr = btrfs_header_nritems(eb);
        for (i = 0; i < nr; i++) {
                next = read_tree_block(root->fs_info,
                                btrfs_node_blockptr(eb, i),
-                               size, btrfs_node_ptr_generation(eb, i));
+                               btrfs_node_ptr_generation(eb, i));
                if (!extent_buffer_uptodate(next))
                        continue;
                if (btrfs_is_leaf(next) && btrfs_header_level(eb) != 1) {
@@ -146,7 +143,7 @@ static u64 treeid_from_string(const char *str, const char **end)
                { "CHUNK", BTRFS_CHUNK_TREE_OBJECTID },
                { "DEVICE", BTRFS_DEV_TREE_OBJECTID },
                { "DEV", BTRFS_DEV_TREE_OBJECTID },
-               { "FS_TREE", BTRFS_FS_TREE_OBJECTID },
+               { "FS", BTRFS_FS_TREE_OBJECTID },
                { "CSUM", BTRFS_CSUM_TREE_OBJECTID },
                { "CHECKSUM", BTRFS_CSUM_TREE_OBJECTID },
                { "QUOTA", BTRFS_QUOTA_TREE_OBJECTID },
@@ -201,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
 };
 
@@ -226,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'},
@@ -237,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 }
                };
 
@@ -289,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);
                }
@@ -313,27 +317,21 @@ int cmd_inspect_dump_tree(int argc, char **argv)
 
        if (block_only) {
                root = info->chunk_root;
-               leaf = read_tree_block(info,
-                                     block_only,
-                                     info->nodesize, 0);
-
+               leaf = read_tree_block(info, block_only, 0);
                if (extent_buffer_uptodate(leaf) &&
                    btrfs_header_level(leaf) != 0) {
                        free_extent_buffer(leaf);
                        leaf = NULL;
                }
 
-               if (!leaf) {
-                       leaf = read_tree_block(info,
-                                             block_only,
-                                             info->nodesize, 0);
-               }
+               if (!leaf)
+                       leaf = read_tree_block(info, block_only, 0);
                if (!extent_buffer_uptodate(leaf)) {
                        error("failed to read %llu",
                                (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;
        }
@@ -447,8 +445,7 @@ again:
 
                        offset = btrfs_item_ptr_offset(leaf, slot);
                        read_extent_buffer(leaf, &ri, offset, sizeof(ri));
-                       buf = read_tree_block(info, btrfs_root_bytenr(&ri),
-                                             info->nodesize, 0);
+                       buf = read_tree_block(info, btrfs_root_bytenr(&ri), 0);
                        if (!extent_buffer_uptodate(buf))
                                goto next;
                        if (tree_id && found_key.objectid != tree_id) {