From f8c82394c4f9075ff8e006606b309f67281fa771 Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Mon, 8 May 2017 15:38:10 +0800 Subject: [PATCH] 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 Signed-off-by: David Sterba --- print-tree.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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);