diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2017-05-08 15:38:10 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-05-15 16:13:17 +0200 |
commit | f8c82394c4f9075ff8e006606b309f67281fa771 (patch) | |
tree | 1639c064dd1c82700a1740c32b22d6cb6caa0d97 | |
parent | 1a96fa0e6ba2f15b58dcbf4dd059f703bdfca0bf (diff) |
btrfs-progs: print-tree: Add leaf flags and backref revision output
Btrfs header has a u64 member flags, whose lowest 56 bits are for header
flags like WRITTEN and RELOC.
And its highest 8 bits are for backref revision.
Manually checking btrfs_header_flags() will be a pain, so add such leaf
flags and backref revision output for print-tree.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | print-tree.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/print-tree.c b/print-tree.c index 8352e03d..a0d33956 100644 --- a/print-tree.c +++ b/print-tree.c @@ -956,13 +956,35 @@ static void print_dev_stats(struct extent_buffer *eb, } } +/* Caller must ensure sizeof(*ret) >= 14 "WRITTEN|RELOC" */ +static void header_flags_to_str(u64 flags, char *ret) +{ + int empty = 1; + + if (flags & BTRFS_HEADER_FLAG_WRITTEN) { + empty = 0; + strcpy(ret, "WRITTEN"); + } + if (flags & BTRFS_HEADER_FLAG_RELOC) { + if (!empty) + strcat(ret, "|"); + strcat(ret, "RELOC"); + } +} + void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) { struct btrfs_item *item; struct btrfs_disk_key disk_key; + char flags_str[128]; u32 i; u32 nr; + u64 flags; + u8 backref_rev; + flags = btrfs_header_flags(eb) & ~BTRFS_BACKREF_REV_MASK; + backref_rev = btrfs_header_flags(eb) >> BTRFS_BACKREF_REV_SHIFT; + header_flags_to_str(flags, flags_str); nr = btrfs_header_nritems(eb); printf("leaf %llu items %d free space %d generation %llu owner %llu\n", @@ -970,6 +992,8 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) btrfs_leaf_free_space(root, eb), (unsigned long long)btrfs_header_generation(eb), (unsigned long long)btrfs_header_owner(eb)); + printf("leaf %llu flags 0x%llx(%s) backref revision %d\n", + btrfs_header_bytenr(eb), flags, flags_str, backref_rev); print_uuids(eb); fflush(stdout); |