diff options
Diffstat (limited to 'lib/btrfs/btrfstree/btree_tree.go')
-rw-r--r-- | lib/btrfs/btrfstree/btree_tree.go | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/btrfs/btrfstree/btree_tree.go b/lib/btrfs/btrfstree/btree_tree.go index a943803..86eab11 100644 --- a/lib/btrfs/btrfstree/btree_tree.go +++ b/lib/btrfs/btrfstree/btree_tree.go @@ -22,6 +22,9 @@ type RawTree struct { } func (tree *RawTree) TreeWalk(ctx context.Context, cbs TreeWalkHandler) { + if tree.RootNode == 0 { + return + } path := Path{{ FromTree: tree.ID, FromItemSlot: -1, @@ -37,13 +40,14 @@ func (tree *RawTree) walk(ctx context.Context, path Path, cbs TreeWalkHandler) { if ctx.Err() != nil { return } - if path.Node(-1).ToNodeAddr == 0 { - return - } // 001 - node, err := tree.Forrest.ReadNode(path) - defer node.Free() + nodeAddr, nodeExp, ok := path.NodeExpectations(tree.Forrest.NodeSource) + if !ok { + return + } + node, err := tree.Forrest.NodeSource.AcquireNode(ctx, nodeAddr, nodeExp) + defer tree.Forrest.NodeSource.ReleaseNode(node) if ctx.Err() != nil { return } |