diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-18 00:58:08 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-20 20:59:41 -0700 |
commit | aebdf099d1b02394debd71a40b18050370ba7416 (patch) | |
tree | 97a529f1be955eddc8d99eb0eb46c69aa606b2cf /lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go | |
parent | 01a9a607b9412f482e0a9784ab9013a7213077a0 (diff) |
rebuildnodes: Optimize memory access when indexing orphans
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go')
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go index 5d3f031..89e9ad4 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/orphans.go @@ -22,15 +22,19 @@ import ( ) func listRoots(graph graph.Graph, leaf btrfsvol.LogicalAddr) containers.Set[btrfsvol.LogicalAddr] { + ret := make(containers.Set[btrfsvol.LogicalAddr]) + _listRoots(ret, graph, leaf) + return ret +} + +func _listRoots(ret containers.Set[btrfsvol.LogicalAddr], graph graph.Graph, leaf btrfsvol.LogicalAddr) { kps := graph.EdgesTo[leaf] if len(kps) == 0 { - return containers.NewSet(leaf) + ret.Insert(leaf) } - ret := make(containers.Set[btrfsvol.LogicalAddr]) for _, kp := range kps { - ret.InsertFrom(listRoots(graph, kp.FromNode)) + _listRoots(ret, graph, kp.FromNode) } - return ret } type keyAndTree struct { |