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.

Fix it.

Reported-by: Nikolay Borisov <nbori...@suse.com>
Signed-off-by: Qu Wenruo <w...@suse.com>
---
 print-tree.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/print-tree.c b/print-tree.c
index 45350fea0963..848e296c4e67 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 presents the generation
+                * when this root is created.
+                * However if this is tree 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:
-- 
2.16.2

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to