summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-03-18 15:18:29 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2023-03-20 12:43:08 -0400
commit8d3cd03a0339f045ea58878eff6a2c0ced27955e (patch)
treeaa83959b63669021e1da76232e56ce5118d5e7c5
parentc4597bbacc76eb5ddea4d3a2a062353895c90fbe (diff)
btrfsutil: OldRebuiltForrest: Simplify the TreeSearchAll implementation
-rw-r--r--lib/btrfsutil/old_rebuilt_forrest.go34
1 files changed, 16 insertions, 18 deletions
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
}