From 7a464fd038977ba1d57d730e7f15a4df5c8ca91a Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 6 Jun 2022 12:26:09 -0600 Subject: fix --- cmd/btrfs-fsck/main.go | 4 ++-- pkg/btrfs/crc32c.go | 5 +++++ pkg/btrfsmisc/fsck.go | 5 ++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cmd/btrfs-fsck/main.go b/cmd/btrfs-fsck/main.go index 79237a6..be9f313 100644 --- a/cmd/btrfs-fsck/main.go +++ b/cmd/btrfs-fsck/main.go @@ -211,7 +211,7 @@ func Main(imgfilename string) (err error) { stripeSize := stripes[0].Size for _, stripe := range stripes { if stripe.Size != stripeSize { - panic("mismatch") + panic("TODO: mismatch") } } itemSize := uint32(binstruct.StaticSize(btrfsitem.ChunkHeader{}) + (len(stripes) * binstruct.StaticSize(btrfsitem.ChunkStripe{}))) @@ -240,7 +240,7 @@ func Main(imgfilename string) (err error) { Size: stripeSize, Owner: btrfs.EXTENT_TREE_OBJECTID, StripeLen: 65536, // ??? - Type: TODO, + Type: 0, // TODO IOOptimalAlign: superblock.Data.DevItem.IOOptimalAlign, IOOptimalWidth: superblock.Data.DevItem.IOOptimalWidth, IOMinSize: superblock.Data.DevItem.IOMinSize, diff --git a/pkg/btrfs/crc32c.go b/pkg/btrfs/crc32c.go index 4ea4169..8266706 100644 --- a/pkg/btrfs/crc32c.go +++ b/pkg/btrfs/crc32c.go @@ -2,11 +2,16 @@ package btrfs import ( "encoding/binary" + "fmt" "hash/crc32" ) type CSum [0x20]byte +func (csum CSum) String() string { + return fmt.Sprintf("%x", csum) +} + func CRC32c(data []byte) CSum { crc := crc32.Update(0, crc32.MakeTable(crc32.Castagnoli), data) diff --git a/pkg/btrfsmisc/fsck.go b/pkg/btrfsmisc/fsck.go index a771cf4..e44dcb6 100644 --- a/pkg/btrfsmisc/fsck.go +++ b/pkg/btrfsmisc/fsck.go @@ -45,14 +45,13 @@ func ScanForNodes(dev *btrfs.Device, sb btrfs.Superblock, fn func(*util.Ref[btrf Size: sb.NodeSize, }, } - var nodeHeader btrfs.NodeHeader - if _, err := binstruct.Unmarshal(nodeBuf, &nodeHeader); err != nil { + if _, err := binstruct.Unmarshal(nodeBuf, &nodeRef.Data.Head); err != nil { fn(nil, fmt.Errorf("sector@%d: %w", pos, err)) } // sanity checking - if nodeHeader.MetadataUUID != sb.EffectiveMetadataUUID() { + if nodeRef.Data.Head.MetadataUUID != sb.EffectiveMetadataUUID() { //fmt.Printf("sector@%d does not look like a node\n", pos) continue } -- cgit v1.2.3-2-g168b