diff options
author | Qu Wenruo <wqu@suse.com> | 2018-04-11 05:08:12 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-04-20 13:18:16 -0400 |
commit | c0872323746e11fc79344e3738b283a8cda86654 (patch) | |
tree | 07864870a0ec520d578d181d97f58e48d75ddd91 /fs/btrfs/print-tree.c | |
parent | 5e388e95815408c27f3612190d089afc0774b870 (diff) |
btrfs: print-tree: debugging output enhancement
This patch enhances the following things:
- tree block header
* add generation and owner output for node and leaf
- node pointer generation output
- allow btrfs_print_tree() to not follow nodes
* just like btrfs-progs
Please note that, although function btrfs_print_tree() is not called by
anyone right now, it's still a pretty useful function to debug kernel.
So that function is still kept for later use.
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/print-tree.c')
-rw-r--r-- | fs/btrfs/print-tree.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c index 124276bba8cf..21a831d3d087 100644 --- a/fs/btrfs/print-tree.c +++ b/fs/btrfs/print-tree.c | |||
@@ -189,9 +189,10 @@ void btrfs_print_leaf(struct extent_buffer *l) | |||
189 | fs_info = l->fs_info; | 189 | fs_info = l->fs_info; |
190 | nr = btrfs_header_nritems(l); | 190 | nr = btrfs_header_nritems(l); |
191 | 191 | ||
192 | btrfs_info(fs_info, "leaf %llu total ptrs %d free space %d", | 192 | btrfs_info(fs_info, |
193 | btrfs_header_bytenr(l), nr, | 193 | "leaf %llu gen %llu total ptrs %d free space %d owner %llu", |
194 | btrfs_leaf_free_space(fs_info, l)); | 194 | btrfs_header_bytenr(l), btrfs_header_generation(l), nr, |
195 | btrfs_leaf_free_space(fs_info, l), btrfs_header_owner(l)); | ||
195 | for (i = 0 ; i < nr ; i++) { | 196 | for (i = 0 ; i < nr ; i++) { |
196 | item = btrfs_item_nr(i); | 197 | item = btrfs_item_nr(i); |
197 | btrfs_item_key_to_cpu(l, &key, i); | 198 | btrfs_item_key_to_cpu(l, &key, i); |
@@ -325,7 +326,7 @@ void btrfs_print_leaf(struct extent_buffer *l) | |||
325 | } | 326 | } |
326 | } | 327 | } |
327 | 328 | ||
328 | void btrfs_print_tree(struct extent_buffer *c) | 329 | void btrfs_print_tree(struct extent_buffer *c, bool follow) |
329 | { | 330 | { |
330 | struct btrfs_fs_info *fs_info; | 331 | struct btrfs_fs_info *fs_info; |
331 | int i; u32 nr; | 332 | int i; u32 nr; |
@@ -342,15 +343,19 @@ void btrfs_print_tree(struct extent_buffer *c) | |||
342 | return; | 343 | return; |
343 | } | 344 | } |
344 | btrfs_info(fs_info, | 345 | btrfs_info(fs_info, |
345 | "node %llu level %d total ptrs %d free spc %u", | 346 | "node %llu level %d gen %llu total ptrs %d free spc %u owner %llu", |
346 | btrfs_header_bytenr(c), level, nr, | 347 | btrfs_header_bytenr(c), level, btrfs_header_generation(c), |
347 | (u32)BTRFS_NODEPTRS_PER_BLOCK(fs_info) - nr); | 348 | nr, (u32)BTRFS_NODEPTRS_PER_BLOCK(fs_info) - nr, |
349 | btrfs_header_owner(c)); | ||
348 | for (i = 0; i < nr; i++) { | 350 | for (i = 0; i < nr; i++) { |
349 | btrfs_node_key_to_cpu(c, &key, i); | 351 | btrfs_node_key_to_cpu(c, &key, i); |
350 | pr_info("\tkey %d (%llu %u %llu) block %llu\n", | 352 | pr_info("\tkey %d (%llu %u %llu) block %llu gen %llu\n", |
351 | i, key.objectid, key.type, key.offset, | 353 | i, key.objectid, key.type, key.offset, |
352 | btrfs_node_blockptr(c, i)); | 354 | btrfs_node_blockptr(c, i), |
355 | btrfs_node_ptr_generation(c, i)); | ||
353 | } | 356 | } |
357 | if (!follow) | ||
358 | return; | ||
354 | for (i = 0; i < nr; i++) { | 359 | for (i = 0; i < nr; i++) { |
355 | struct btrfs_key first_key; | 360 | struct btrfs_key first_key; |
356 | struct extent_buffer *next; | 361 | struct extent_buffer *next; |
@@ -372,7 +377,7 @@ void btrfs_print_tree(struct extent_buffer *c) | |||
372 | if (btrfs_header_level(next) != | 377 | if (btrfs_header_level(next) != |
373 | level - 1) | 378 | level - 1) |
374 | BUG(); | 379 | BUG(); |
375 | btrfs_print_tree(next); | 380 | btrfs_print_tree(next, follow); |
376 | free_extent_buffer(next); | 381 | free_extent_buffer(next); |
377 | } | 382 | } |
378 | } | 383 | } |