projects
/
platform
/
upstream
/
btrfs-progs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
btrfs-progs: test: add new cli-test for subvol get/set-default
[platform/upstream/btrfs-progs.git]
/
cmds-inspect-dump-tree.c
diff --git
a/cmds-inspect-dump-tree.c
b/cmds-inspect-dump-tree.c
index
5a5ca53
..
4e72c08
100644
(file)
--- a/
cmds-inspect-dump-tree.c
+++ b/
cmds-inspect-dump-tree.c
@@
-31,7
+31,6
@@
#include "volumes.h"
#include "commands.h"
#include "utils.h"
#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)
#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;
struct extent_buffer *next;
int i;
u32 nr;
- u32 size;
if (!eb)
return;
if (!eb)
return;
@@
-49,11
+47,11
@@
static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
return;
}
return;
}
- size = root->nodesize;
nr = btrfs_header_nritems(eb);
for (i = 0; i < nr; i++) {
nr = btrfs_header_nritems(eb);
for (i = 0; i < nr; i++) {
- next = read_tree_block(root, btrfs_node_blockptr(eb, i),
- size, btrfs_node_ptr_generation(eb, i));
+ next = read_tree_block(root->fs_info,
+ btrfs_node_blockptr(eb, i),
+ btrfs_node_ptr_generation(eb, i));
if (!extent_buffer_uptodate(next))
continue;
if (btrfs_is_leaf(next) && btrfs_header_level(eb) != 1) {
if (!extent_buffer_uptodate(next))
continue;
if (btrfs_is_leaf(next) && btrfs_header_level(eb) != 1) {
@@
-221,6
+219,7
@@
int cmd_inspect_dump_tree(int argc, char **argv)
int uuid_tree_only = 0;
int roots_only = 0;
int root_backups = 0;
int uuid_tree_only = 0;
int roots_only = 0;
int root_backups = 0;
+ unsigned open_ctree_flags = OPEN_CTREE_FS_PARTIAL;
u64 block_only = 0;
struct btrfs_root *tree_root_scan;
u64 tree_id = 0;
u64 block_only = 0;
struct btrfs_root *tree_root_scan;
u64 tree_id = 0;
@@
-259,6
+258,11
@@
int cmd_inspect_dump_tree(int argc, char **argv)
root_backups = 1;
break;
case 'b':
root_backups = 1;
break;
case 'b':
+ /*
+ * If only showing one block, no need to fill roots
+ * other than chunk root
+ */
+ open_ctree_flags |= __OPEN_CTREE_RETURN_CHUNK_ROOT;
block_only = arg_strtou64(optarg);
break;
case 't': {
block_only = arg_strtou64(optarg);
break;
case 't': {
@@
-298,34
+302,23
@@
int cmd_inspect_dump_tree(int argc, char **argv)
printf("%s\n", PACKAGE_STRING);
printf("%s\n", PACKAGE_STRING);
- info = open_ctree_fs_info(argv[optind], 0, 0, 0,
OPEN_CTREE_PARTIAL
);
+ info = open_ctree_fs_info(argv[optind], 0, 0, 0,
open_ctree_flags
);
if (!info) {
error("unable to open %s", argv[optind]);
goto out;
}
if (!info) {
error("unable to open %s", argv[optind]);
goto out;
}
- root = info->fs_root;
- if (!root) {
- error("unable to open %s", argv[optind]);
- goto out;
- }
-
if (block_only) {
if (block_only) {
- leaf = read_tree_block(root,
- block_only,
- root->nodesize, 0);
-
+ root = info->chunk_root;
+ 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 (extent_buffer_uptodate(leaf) &&
btrfs_header_level(leaf) != 0) {
free_extent_buffer(leaf);
leaf = NULL;
}
- if (!leaf) {
- leaf = read_tree_block(root,
- block_only,
- root->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);
if (!extent_buffer_uptodate(leaf)) {
error("failed to read %llu",
(unsigned long long)block_only);
@@
-336,6
+329,12
@@
int cmd_inspect_dump_tree(int argc, char **argv)
goto close_root;
}
goto close_root;
}
+ root = info->fs_root;
+ if (!root) {
+ error("unable to open %s", argv[optind]);
+ goto out;
+ }
+
if (!(extent_only || uuid_tree_only || tree_id)) {
if (roots_only) {
printf("root tree: %llu level %d\n",
if (!(extent_only || uuid_tree_only || tree_id)) {
if (roots_only) {
printf("root tree: %llu level %d\n",
@@
-439,10
+438,7
@@
again:
offset = btrfs_item_ptr_offset(leaf, slot);
read_extent_buffer(leaf, &ri, offset, sizeof(ri));
offset = btrfs_item_ptr_offset(leaf, slot);
read_extent_buffer(leaf, &ri, offset, sizeof(ri));
- buf = read_tree_block(tree_root_scan,
- btrfs_root_bytenr(&ri),
- tree_root_scan->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) {
if (!extent_buffer_uptodate(buf))
goto next;
if (tree_id && found_key.objectid != tree_id) {