summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2018-03-19 18:28:10 +0800
committerDavid Sterba <dsterba@suse.com>2018-03-30 22:15:54 +0200
commit7065345c9998679521dfcd24bb4312b5bb73aa4e (patch)
tree07167dd47fd106c3ad13381557c89490a578e8bd
parent92ffad47b5c78ca119e798505e20f1b5cf7b7dd8 (diff)
btrfs-progs: print-tree: Do correct offset output for ROOT_ITEM
Commit Fixes: 8c36786c8198 ("btrfs-progs: print-tree: Print offset as tree objectid for ROOT_ITEM") changes how we translate offset of ROOT_ITEM. However the fact is, even for ROOT_ITEM, we have different meaning of offset. For tree reloc tree, it's indeed subvolume id. But for other trees, it's the transid of when it's created. Reported-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--print-tree.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/print-tree.c b/print-tree.c
index 45350fea..2dbed720 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -834,7 +834,16 @@ void btrfs_print_key(struct btrfs_disk_key *disk_key)
*/
case BTRFS_ROOT_ITEM_KEY:
printf(" ");
- print_objectid(stdout, offset, type);
+ /*
+ * Normally offset of ROOT_ITEM should present the generation
+ * of creation time of the root.
+ * However if this is reloc tree, offset is the subvolume
+ * id of its source. Here we do extra check on this.
+ */
+ if (objectid == BTRFS_TREE_RELOC_OBJECTID)
+ print_objectid(stdout, offset, type);
+ else
+ printf("%lld", offset);
printf(")");
break;
default: