From: Qu Wenruo Date: Mon, 19 Mar 2018 10:28:10 +0000 (+0800) Subject: btrfs-progs: print-tree: Do correct offset output for ROOT_ITEM X-Git-Tag: upstream/4.16.1~66 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fbtrfs-progs.git;a=commitdiff_plain;h=7065345c9998679521dfcd24bb4312b5bb73aa4e 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 Signed-off-by: Qu Wenruo Reviewed-by: Nikolay Borisov Signed-off-by: David Sterba --- diff --git a/print-tree.c b/print-tree.c index 45350fe..2dbed72 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: