summaryrefslogtreecommitdiff
path: root/cmd/btrfs-rec/inspect
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-03-16 09:17:35 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2023-03-17 18:38:44 -0400
commit1bc243ca607c22e232017b0f1b4badcde288a9b3 (patch)
tree7273d158c1184d2c582a15fc36af695eb1a20943 /cmd/btrfs-rec/inspect
parent0f85e72d1331b49b52925d6cc5ad083a0376104c (diff)
btrfstree: Have ReadNode return a *Node rather than a *diskio.Ref[Addr, Node]
... and take a ReaderAt instead of a diskio.File.
Diffstat (limited to 'cmd/btrfs-rec/inspect')
-rw-r--r--cmd/btrfs-rec/inspect/dumptrees/print_tree.go9
-rw-r--r--cmd/btrfs-rec/inspect/rebuildmappings/scan.go25
-rw-r--r--cmd/btrfs-rec/inspect/rebuildtrees/scan.go10
3 files changed, 21 insertions, 23 deletions
diff --git a/cmd/btrfs-rec/inspect/dumptrees/print_tree.go b/cmd/btrfs-rec/inspect/dumptrees/print_tree.go
index a8c2adf..9572f3a 100644
--- a/cmd/btrfs-rec/inspect/dumptrees/print_tree.go
+++ b/cmd/btrfs-rec/inspect/dumptrees/print_tree.go
@@ -19,7 +19,6 @@ import (
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfssum"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfstree"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
- "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
"git.lukeshu.com/btrfs-progs-ng/lib/slices"
"git.lukeshu.com/btrfs-progs-ng/lib/textui"
)
@@ -100,9 +99,9 @@ var nodeHeaderSize = binstruct.StaticSize(btrfstree.NodeHeader{})
func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfsprim.ObjID) {
var itemOffset uint32
handlers := btrfstree.TreeWalkHandler{
- Node: func(path btrfstree.TreePath, nodeRef *diskio.Ref[btrfsvol.LogicalAddr, btrfstree.Node]) error {
- printHeaderInfo(out, nodeRef.Data)
- itemOffset = nodeRef.Data.Size - uint32(nodeHeaderSize)
+ Node: func(path btrfstree.TreePath, node *btrfstree.Node) error {
+ printHeaderInfo(out, node)
+ itemOffset = node.Size - uint32(nodeHeaderSize)
return nil
},
PreKeyPointer: func(path btrfstree.TreePath, item btrfstree.KeyPointer) error {
@@ -375,7 +374,7 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfspri
}
// printHeaderInfo mimics btrfs-progs kernel-shared/print-tree.c:print_header_info()
-func printHeaderInfo(out io.Writer, node btrfstree.Node) {
+func printHeaderInfo(out io.Writer, node *btrfstree.Node) {
var typename string
if node.Head.Level > 0 { // interior node
typename = "node"
diff --git a/cmd/btrfs-rec/inspect/rebuildmappings/scan.go b/cmd/btrfs-rec/inspect/rebuildmappings/scan.go
index b88f01c..e23314e 100644
--- a/cmd/btrfs-rec/inspect/rebuildmappings/scan.go
+++ b/cmd/btrfs-rec/inspect/rebuildmappings/scan.go
@@ -19,7 +19,6 @@ import (
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfsutil"
"git.lukeshu.com/btrfs-progs-ng/lib/containers"
- "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
"git.lukeshu.com/btrfs-progs-ng/lib/textui"
)
@@ -121,22 +120,22 @@ func (scanner *deviceScanner) ScanSector(_ context.Context, dev *btrfs.Device, p
return nil
}
-func (scanner *deviceScanner) ScanNode(ctx context.Context, nodeRef *diskio.Ref[btrfsvol.PhysicalAddr, btrfstree.Node]) error {
- scanner.result.FoundNodes[nodeRef.Data.Head.Addr] = append(scanner.result.FoundNodes[nodeRef.Data.Head.Addr], nodeRef.Addr)
- for i, item := range nodeRef.Data.BodyLeaf {
+func (scanner *deviceScanner) ScanNode(ctx context.Context, addr btrfsvol.PhysicalAddr, node *btrfstree.Node) error {
+ scanner.result.FoundNodes[node.Head.Addr] = append(scanner.result.FoundNodes[node.Head.Addr], addr)
+ for i, item := range node.BodyLeaf {
switch item.Key.ItemType {
case btrfsitem.CHUNK_ITEM_KEY:
switch itemBody := item.Body.(type) {
case *btrfsitem.Chunk:
dlog.Tracef(ctx, "node@%v: item %v: found chunk",
- nodeRef.Addr, i)
+ addr, i)
scanner.result.FoundChunks = append(scanner.result.FoundChunks, btrfstree.SysChunk{
Key: item.Key,
Chunk: *itemBody,
})
case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed CHUNK_ITEM: %v",
- nodeRef.Addr, i, itemBody.Err)
+ addr, i, itemBody.Err)
default:
panic(fmt.Errorf("should not happen: CHUNK_ITEM has unexpected item type: %T", itemBody))
}
@@ -144,14 +143,14 @@ func (scanner *deviceScanner) ScanNode(ctx context.Context, nodeRef *diskio.Ref[
switch itemBody := item.Body.(type) {
case *btrfsitem.BlockGroup:
dlog.Tracef(ctx, "node@%v: item %v: found block group",
- nodeRef.Addr, i)
+ addr, i)
scanner.result.FoundBlockGroups = append(scanner.result.FoundBlockGroups, SysBlockGroup{
Key: item.Key,
BG: *itemBody,
})
case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed BLOCK_GROUP_ITEM: %v",
- nodeRef.Addr, i, itemBody.Err)
+ addr, i, itemBody.Err)
default:
panic(fmt.Errorf("should not happen: BLOCK_GROUP_ITEM has unexpected item type: %T", itemBody))
}
@@ -159,14 +158,14 @@ func (scanner *deviceScanner) ScanNode(ctx context.Context, nodeRef *diskio.Ref[
switch itemBody := item.Body.(type) {
case *btrfsitem.DevExtent:
dlog.Tracef(ctx, "node@%v: item %v: found dev extent",
- nodeRef.Addr, i)
+ addr, i)
scanner.result.FoundDevExtents = append(scanner.result.FoundDevExtents, SysDevExtent{
Key: item.Key,
DevExt: *itemBody,
})
case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed DEV_EXTENT: %v",
- nodeRef.Addr, i, itemBody.Err)
+ addr, i, itemBody.Err)
default:
panic(fmt.Errorf("should not happen: DEV_EXTENT has unexpected item type: %T", itemBody))
}
@@ -174,14 +173,14 @@ func (scanner *deviceScanner) ScanNode(ctx context.Context, nodeRef *diskio.Ref[
switch itemBody := item.Body.(type) {
case *btrfsitem.ExtentCSum:
dlog.Tracef(ctx, "node@%v: item %v: found csums",
- nodeRef.Addr, i)
+ addr, i)
scanner.result.FoundExtentCSums = append(scanner.result.FoundExtentCSums, SysExtentCSum{
- Generation: nodeRef.Data.Head.Generation,
+ Generation: node.Head.Generation,
Sums: *itemBody,
})
case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed is EXTENT_CSUM: %v",
- nodeRef.Addr, i, itemBody.Err)
+ addr, i, itemBody.Err)
default:
panic(fmt.Errorf("should not happen: EXTENT_CSUM has unexpected item type: %T", itemBody))
}
diff --git a/cmd/btrfs-rec/inspect/rebuildtrees/scan.go b/cmd/btrfs-rec/inspect/rebuildtrees/scan.go
index ba56c5b..4bc09ad 100644
--- a/cmd/btrfs-rec/inspect/rebuildtrees/scan.go
+++ b/cmd/btrfs-rec/inspect/rebuildtrees/scan.go
@@ -41,18 +41,18 @@ func ScanDevices(ctx context.Context, fs *btrfs.FS, nodeList []btrfsvol.LogicalA
if err := ctx.Err(); err != nil {
return btrfstree.Superblock{}, btrfsutil.Graph{}, nil, err
}
- nodeRef, err := btrfstree.ReadNode[btrfsvol.LogicalAddr](fs, *sb, laddr, btrfstree.NodeExpectations{
+ node, err := btrfstree.ReadNode[btrfsvol.LogicalAddr](fs, *sb, laddr, btrfstree.NodeExpectations{
LAddr: containers.Optional[btrfsvol.LogicalAddr]{OK: true, Val: laddr},
})
if err != nil {
- btrfstree.FreeNodeRef(nodeRef)
+ node.Free()
return btrfstree.Superblock{}, btrfsutil.Graph{}, nil, err
}
- nodeGraph.InsertNode(nodeRef)
- keyIO.InsertNode(nodeRef)
+ nodeGraph.InsertNode(node)
+ keyIO.InsertNode(node)
- btrfstree.FreeNodeRef(nodeRef)
+ node.Free()
stats.N++
progressWriter.Set(stats)