From 5590315b11557aa48999d09700631ad9239ce03b Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 27 Dec 2022 01:14:34 -0700 Subject: rebuildnodes: Optimize: Try to avoid disk access for DIR_INDEX --- .../btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees') diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go index b53a28e..b1ae7be 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go @@ -363,15 +363,23 @@ func (tree *rebuiltTree) indexNode(graph pkggraph.Graph, node btrfsvol.LogicalAd } } +// Resolve a key to a keyio.ItemPtr. +// +// It is not nescessary to call AddTree for that tree first; Resolve will +// call it for you. +func (ts *RebuiltTrees) Resolve(ctx context.Context, treeID btrfsprim.ObjID, key btrfsprim.Key) (ptr keyio.ItemPtr, ok bool) { + if !ts.AddTree(ctx, treeID) { + return keyio.ItemPtr{}, false + } + return ts.trees[treeID].Items.Load(key) +} + // Load reads an item from a tree. // // It is not nescessary to call AddTree for that tree first; Load will // call it for you. func (ts *RebuiltTrees) Load(ctx context.Context, treeID btrfsprim.ObjID, key btrfsprim.Key) (item btrfsitem.Item, ok bool) { - if !ts.AddTree(ctx, treeID) { - return nil, false - } - ptr, ok := ts.trees[treeID].Items.Load(key) + ptr, ok := ts.Resolve(ctx, treeID, key) if !ok { return nil, false } -- cgit v1.2.3-2-g168b