From 8d3cd03a0339f045ea58878eff6a2c0ced27955e Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 18 Mar 2023 15:18:29 -0400 Subject: btrfsutil: OldRebuiltForrest: Simplify the TreeSearchAll implementation --- lib/btrfsutil/old_rebuilt_forrest.go | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'lib/btrfsutil') diff --git a/lib/btrfsutil/old_rebuilt_forrest.go b/lib/btrfsutil/old_rebuilt_forrest.go index ace79e9..0887bf9 100644 --- a/lib/btrfsutil/old_rebuilt_forrest.go +++ b/lib/btrfsutil/old_rebuilt_forrest.go @@ -297,35 +297,33 @@ func (bt *OldRebuiltForrest) TreeSearchAll(treeID btrfsprim.ObjID, searcher btrf return nil, tree.RootErr } - var indexItems []oldRebuiltTreeValue + var ret []btrfstree.Item + var node *btrfstree.Node tree.Items.Subrange( func(indexItem oldRebuiltTreeValue) int { return searcher.Search(indexItem.Key, indexItem.ItemSize) }, - func(node *containers.RBNode[oldRebuiltTreeValue]) bool { - indexItems = append(indexItems, node.Value) + func(rbNode *containers.RBNode[oldRebuiltTreeValue]) bool { + if node == nil || node.Head.Addr != rbNode.Value.Node.LAddr { + node.Free() + node = bt.readNode(rbNode.Value.Node) + } + item := node.BodyLeaf[rbNode.Value.Slot] + item.Body = item.Body.CloneItem() + ret = append(ret, item) return true }) - if len(indexItems) == 0 { - return nil, fmt.Errorf("items with %s: %w", searcher, tree.addErrs(searcher.Search, btrfstree.ErrNoItem)) - } - - ret := make([]btrfstree.Item, len(indexItems)) - var node *btrfstree.Node - for i, indexItem := range indexItems { - if node == nil || node.Head.Addr != indexItem.Node.LAddr { - node.Free() - node = bt.readNode(indexItem.Node) - } - ret[i] = node.BodyLeaf[indexItem.Slot] - ret[i].Body = ret[i].Body.CloneItem() - } node.Free() - err := tree.addErrs(searcher.Search, nil) + var err error + if len(ret) == 0 { + err = btrfstree.ErrNoItem + } + err = tree.addErrs(searcher.Search, err) if err != nil { err = fmt.Errorf("items with %s: %w", searcher, err) } + return ret, err } -- cgit v1.2.3-2-g168b