From eb19c7c4d4a1a8b49ea4423b706edff651768447 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 17 Apr 2023 08:09:05 -0600 Subject: btrfsutil: RebuiltTree: Don't have laxAncestors hide UUID errors --- lib/btrfsutil/rebuilt_forrest.go | 7 +++++-- lib/btrfsutil/rebuilt_tree.go | 9 +++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/btrfsutil/rebuilt_forrest.go b/lib/btrfsutil/rebuilt_forrest.go index 900e725..5741072 100644 --- a/lib/btrfsutil/rebuilt_forrest.go +++ b/lib/btrfsutil/rebuilt_forrest.go @@ -223,8 +223,11 @@ func (ts *RebuiltForrest) rebuildTree(ctx context.Context, treeID btrfsprim.ObjI ts.trees[treeID].ParentGen = rootOff parentID, ok := ts.cb.LookupUUID(ctx, rootItem.ParentUUID) if !ok { - if !ts.laxAncestors { - ts.trees[treeID].rootErr = fmt.Errorf("failed to look up UUID: %v", rootItem.ParentUUID) + err := fmt.Errorf("failed to look up UUID: %v", rootItem.ParentUUID) + if ts.laxAncestors { + ts.trees[treeID].parentErr = err + } else { + ts.trees[treeID].rootErr = err } return } diff --git a/lib/btrfsutil/rebuilt_tree.go b/lib/btrfsutil/rebuilt_tree.go index a0f5932..0598e05 100644 --- a/lib/btrfsutil/rebuilt_tree.go +++ b/lib/btrfsutil/rebuilt_tree.go @@ -34,6 +34,7 @@ type RebuiltTree struct { Root btrfsvol.LogicalAddr Parent *RebuiltTree ParentGen btrfsprim.Generation // offset of this tree's root item + parentErr error forrest *RebuiltForrest // mutable @@ -553,10 +554,14 @@ var _ btrfstree.Tree = (*RebuiltTree)(nil) // TreeParentID implements btrfstree.Tree. func (tree *RebuiltTree) TreeParentID(_ context.Context) (btrfsprim.ObjID, btrfsprim.Generation, error) { - if tree.Parent == nil { + switch { + case tree.parentErr != nil: + return 0, 0, tree.parentErr + case tree.Parent == nil: return 0, 0, nil + default: + return tree.Parent.ID, tree.ParentGen, nil } - return tree.Parent.ID, tree.ParentGen, nil } // TreeLookup implements btrfstree.Tree. -- cgit v1.1-4-g5e80