diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-12-27 01:14:34 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-05 19:48:17 -0700 |
commit | 5590315b11557aa48999d09700631ad9239ce03b (patch) | |
tree | 0a2246a0ff601a397219c478f943d05245b71ad6 /lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees | |
parent | f416f777b2c2cac095e851e6799020f91e34aed1 (diff) |
rebuildnodes: Optimize: Try to avoid disk access for DIR_INDEX
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees')
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/rebuilt_btrees.go | 16 |
1 files changed, 12 insertions, 4 deletions
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 } |