summaryrefslogtreecommitdiff
path: root/debug-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'debug-tree.c')
-rw-r--r--debug-tree.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/debug-tree.c b/debug-tree.c
index 40628e09..0525354b 100644
--- a/debug-tree.c
+++ b/debug-tree.c
@@ -116,6 +116,7 @@ int main(int ac, char **av)
int ret;
int slot;
int extent_only = 0;
+ int device_only = 0;
u64 block_only = 0;
struct btrfs_root *tree_root_scan;
@@ -123,13 +124,16 @@ int main(int ac, char **av)
while(1) {
int c;
- c = getopt(ac, av, "eb:");
+ c = getopt(ac, av, "deb:");
if (c < 0)
break;
switch(c) {
case 'e':
extent_only = 1;
break;
+ case 'd':
+ device_only = 1;
+ break;
case 'b':
block_only = atoll(optarg);
break;
@@ -202,7 +206,7 @@ again:
if (btrfs_key_type(&found_key) == BTRFS_ROOT_ITEM_KEY) {
unsigned long offset;
struct extent_buffer *buf;
- int skip = extent_only;
+ int skip = extent_only | device_only;
offset = btrfs_item_ptr_offset(leaf, slot);
read_extent_buffer(leaf, &ri, offset, sizeof(ri));
@@ -215,8 +219,9 @@ again:
printf("root");
break;
case BTRFS_EXTENT_TREE_OBJECTID:
- skip = 0;
- if (!extent_only)
+ if (!device_only)
+ skip = 0;
+ if (!extent_only && !device_only)
printf("extent");
break;
case BTRFS_CHUNK_TREE_OBJECTID:
@@ -225,9 +230,8 @@ again:
}
break;
case BTRFS_DEV_TREE_OBJECTID:
- if (!skip) {
- printf("device");
- }
+ skip = 0;
+ printf("device");
break;
case BTRFS_FS_TREE_OBJECTID:
if (!skip) {
@@ -235,9 +239,8 @@ again:
}
break;
case BTRFS_ROOT_TREE_DIR_OBJECTID:
- if (!skip) {
- printf("directory");
- }
+ skip = 0;
+ printf("directory");
break;
case BTRFS_CSUM_TREE_OBJECTID:
if (!skip) {
@@ -283,13 +286,13 @@ again:
printf("file");
}
}
- if (!skip && !extent_only) {
+ if (extent_only && !skip) {
+ print_extents(tree_root_scan, buf);
+ } else if (!skip) {
printf(" tree ");
btrfs_print_key(&disk_key);
printf(" \n");
btrfs_print_tree(tree_root_scan, buf, 1);
- } else if (extent_only && !skip) {
- print_extents(tree_root_scan, buf);
}
}
path.slots[0]++;
@@ -302,7 +305,7 @@ again:
goto again;
}
- if (extent_only)
+ if (extent_only || device_only)
return 0;
printf("total bytes %llu\n",