summaryrefslogtreecommitdiff
path: root/lib/btrfsprogs/btrfsinspect/scandevices.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/scandevices.go')
-rw-r--r--lib/btrfsprogs/btrfsinspect/scandevices.go29
1 files changed, 15 insertions, 14 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/scandevices.go b/lib/btrfsprogs/btrfsinspect/scandevices.go
index 9b8360c..d54be71 100644
--- a/lib/btrfsprogs/btrfsinspect/scandevices.go
+++ b/lib/btrfsprogs/btrfsinspect/scandevices.go
@@ -105,6 +105,8 @@ func (s scanStats) String() string {
s.NumFoundExtentCSums)
}
+var sbSize = btrfsvol.PhysicalAddr(binstruct.StaticSize(btrfstree.Superblock{}))
+
// ScanOneDevice mostly mimics btrfs-progs
// cmds/rescue-chunk-recover.c:scan_one_device().
func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblock) (ScanOneDeviceResult, error) {
@@ -114,8 +116,6 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
FoundNodes: make(map[btrfsvol.LogicalAddr][]btrfsvol.PhysicalAddr),
}
- sbSize := btrfsvol.PhysicalAddr(binstruct.StaticSize(btrfstree.Superblock{}))
-
devSize := dev.Size()
if sb.NodeSize < sb.SectorSize {
return result, fmt.Errorf("node_size(%v) < sector_size(%v)",
@@ -183,14 +183,14 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
switch item.Key.ItemType {
case btrfsitem.CHUNK_ITEM_KEY:
switch itemBody := item.Body.(type) {
- case btrfsitem.Chunk:
+ case *btrfsitem.Chunk:
dlog.Tracef(ctx, "node@%v: item %v: found chunk",
nodeRef.Addr, i)
result.FoundChunks = append(result.FoundChunks, btrfstree.SysChunk{
Key: item.Key,
- Chunk: itemBody,
+ Chunk: *itemBody,
})
- case btrfsitem.Error:
+ case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed CHUNK_ITEM: %v",
nodeRef.Addr, i, itemBody.Err)
default:
@@ -198,14 +198,14 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
}
case btrfsitem.BLOCK_GROUP_ITEM_KEY:
switch itemBody := item.Body.(type) {
- case btrfsitem.BlockGroup:
+ case *btrfsitem.BlockGroup:
dlog.Tracef(ctx, "node@%v: item %v: found block group",
nodeRef.Addr, i)
result.FoundBlockGroups = append(result.FoundBlockGroups, SysBlockGroup{
Key: item.Key,
- BG: itemBody,
+ BG: *itemBody,
})
- case btrfsitem.Error:
+ case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed BLOCK_GROUP_ITEM: %v",
nodeRef.Addr, i, itemBody.Err)
default:
@@ -213,14 +213,14 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
}
case btrfsitem.DEV_EXTENT_KEY:
switch itemBody := item.Body.(type) {
- case btrfsitem.DevExtent:
+ case *btrfsitem.DevExtent:
dlog.Tracef(ctx, "node@%v: item %v: found dev extent",
nodeRef.Addr, i)
result.FoundDevExtents = append(result.FoundDevExtents, SysDevExtent{
Key: item.Key,
- DevExt: itemBody,
+ DevExt: *itemBody,
})
- case btrfsitem.Error:
+ case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed DEV_EXTENT: %v",
nodeRef.Addr, i, itemBody.Err)
default:
@@ -228,14 +228,14 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
}
case btrfsitem.EXTENT_CSUM_KEY:
switch itemBody := item.Body.(type) {
- case btrfsitem.ExtentCSum:
+ case *btrfsitem.ExtentCSum:
dlog.Tracef(ctx, "node@%v: item %v: found csums",
nodeRef.Addr, i)
result.FoundExtentCSums = append(result.FoundExtentCSums, SysExtentCSum{
Generation: nodeRef.Data.Head.Generation,
- Sums: itemBody,
+ Sums: *itemBody,
})
- case btrfsitem.Error:
+ case *btrfsitem.Error:
dlog.Errorf(ctx, "node@%v: item %v: error: malformed is EXTENT_CSUM: %v",
nodeRef.Addr, i, itemBody.Err)
default:
@@ -245,6 +245,7 @@ func ScanOneDevice(ctx context.Context, dev *btrfs.Device, sb btrfstree.Superblo
}
minNextNode = pos + btrfsvol.PhysicalAddr(sb.NodeSize)
}
+ btrfstree.FreeNodeRef(nodeRef)
}
}
progress(devSize)