summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/btrfs/btrfstree/btree.go2
-rw-r--r--lib/btrfs/btrfstree/btree_tree.go3
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/btrfs/btrfstree/btree.go b/lib/btrfs/btrfstree/btree.go
index 9713295..0e02a06 100644
--- a/lib/btrfs/btrfstree/btree.go
+++ b/lib/btrfs/btrfstree/btree.go
@@ -34,7 +34,7 @@ type TreeWalkHandler struct {
BadNode func(Path, *Node, error) error
PostNode func(Path, *Node) error
// Callbacks for items on interior nodes
- PreKeyPointer func(Path, KeyPointer) error
+ PreKeyPointer func(Path, KeyPointer) error // io/fs.SkipDir causes the KP to not be traversed
PostKeyPointer func(Path, KeyPointer) error
// Callbacks for items on leaf nodes
Item func(Path, Item) error
diff --git a/lib/btrfs/btrfstree/btree_tree.go b/lib/btrfs/btrfstree/btree_tree.go
index e16e1c8..6ef195b 100644
--- a/lib/btrfs/btrfstree/btree_tree.go
+++ b/lib/btrfs/btrfstree/btree_tree.go
@@ -96,6 +96,9 @@ func (tree *RawTree) walk(ctx context.Context, path Path, errHandle func(*TreeEr
})
if cbs.PreKeyPointer != nil {
if err := cbs.PreKeyPointer(itemPath, item); err != nil {
+ if errors.Is(err, iofs.SkipDir) {
+ continue
+ }
errHandle(&TreeError{Path: itemPath, Err: err})
}
if ctx.Err() != nil {