3 #include "kerncompat.h"
4 #include "radix-tree.h"
8 void print_leaf(struct leaf
*l
)
11 u32 nr
= btrfs_header_nritems(&l
->header
);
12 struct btrfs_item
*item
;
13 struct extent_item
*ei
;
14 printf("leaf %Lu total ptrs %d free space %d\n",
15 btrfs_header_blocknr(&l
->header
), nr
, leaf_free_space(l
));
17 for (i
= 0 ; i
< nr
; i
++) {
19 printf("\titem %d key (%Lu %u %Lu) itemoff %d itemsize %d\n",
21 btrfs_key_objectid(&item
->key
),
22 btrfs_key_flags(&item
->key
),
23 btrfs_key_offset(&item
->key
),
24 btrfs_item_offset(item
),
25 btrfs_item_size(item
));
27 printf("\t\titem data %.*s\n", btrfs_item_size(item
),
28 l
->data
+ btrfs_item_offset(item
));
29 ei
= (struct extent_item
*)(l
->data
+ btrfs_item_offset(item
));
30 printf("\t\textent data refs %u owner %Lu\n", ei
->refs
,
35 void print_tree(struct ctree_root
*root
, struct tree_buffer
*t
)
44 nr
= btrfs_header_nritems(&c
->header
);
45 if (btrfs_is_leaf(c
)) {
46 print_leaf((struct leaf
*)c
);
49 printf("node %Lu level %d total ptrs %d free spc %u\n", t
->blocknr
,
50 btrfs_header_level(&c
->header
), nr
,
51 (u32
)NODEPTRS_PER_BLOCK
- nr
);
53 for (i
= 0; i
< nr
; i
++) {
54 printf("\tkey %d (%Lu %u %Lu) block %Lu\n",
56 c
->keys
[i
].objectid
, c
->keys
[i
].flags
, c
->keys
[i
].offset
,
57 btrfs_node_blockptr(c
, i
));
60 for (i
= 0; i
< nr
; i
++) {
61 struct tree_buffer
*next_buf
= read_tree_block(root
,
62 btrfs_node_blockptr(c
, i
));
63 struct node
*next
= &next_buf
->node
;
64 if (btrfs_is_leaf(next
) &&
65 btrfs_header_level(&c
->header
) != 1)
67 if (btrfs_header_level(&next
->header
) !=
68 btrfs_header_level(&c
->header
) - 1)
70 print_tree(root
, next_buf
);
71 tree_block_release(root
, next_buf
);