From 515dfcbef2002aacf49b92aa16843eb8d7232db3 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 11 Jun 2022 23:45:00 -0600 Subject: more? --- cmd/btrfs-fsck/pass2.go | 18 ++++++++---------- pkg/btrfs/io2_fs.go | 19 ++----------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/cmd/btrfs-fsck/pass2.go b/cmd/btrfs-fsck/pass2.go index 1f9e3c2..c1ec61b 100644 --- a/cmd/btrfs-fsck/pass2.go +++ b/cmd/btrfs-fsck/pass2.go @@ -16,7 +16,7 @@ func walkFS(fs *btrfs.FS, cbs btrfs.WalkTreeHandler, errCb func(error)) { if !ok { errCb(fmt.Errorf("ROOT_ITEM_KEY is a %T, not a btrfsitem.Root", body)) } else if err := fs.WalkTree(root.ByteNr, cbs); err != nil { - errCb(err) + errCb(fmt.Errorf("tree %v: %w", key.ObjectID.Format(0), err)) } } if origItem != nil { @@ -27,34 +27,32 @@ func walkFS(fs *btrfs.FS, cbs btrfs.WalkTreeHandler, errCb func(error)) { superblock, err := fs.Superblock() if err != nil { - errCb(err) + errCb(fmt.Errorf("superblock: %w", err)) return } if err := fs.WalkTree(superblock.Data.RootTree, cbs); err != nil { - errCb(err) + errCb(fmt.Errorf("root tree: %w", err)) } if err := fs.WalkTree(superblock.Data.ChunkTree, cbs); err != nil { - errCb(err) + errCb(fmt.Errorf("chunk tree: %w", err)) } if err := fs.WalkTree(superblock.Data.LogTree, cbs); err != nil { - errCb(err) + errCb(fmt.Errorf("log tree: %w", err)) } if err := fs.WalkTree(superblock.Data.BlockGroupRoot, cbs); err != nil { - errCb(err) + errCb(fmt.Errorf("block group tree: %w", err)) } } func pass2(fs *btrfs.FS, foundNodes map[btrfs.LogicalAddr]struct{}) { fmt.Printf("\nPass 2: orphaned nodes\n") - btrfs.Dbg = true - visitedNodes := make(map[btrfs.LogicalAddr]struct{}) walkFS(fs, btrfs.WalkTreeHandler{ Node: func(node *util.Ref[btrfs.LogicalAddr, btrfs.Node], err error) error { if err != nil { - fmt.Printf("Pass 2: error: %v\n", err) + fmt.Printf("Pass 2: node error: %v\n", err) } if node != nil { visitedNodes[node.Addr] = struct{}{} @@ -62,7 +60,7 @@ func pass2(fs *btrfs.FS, foundNodes map[btrfs.LogicalAddr]struct{}) { return nil }, }, func(err error) { - fmt.Printf("Pass 2: error: %v\n", err) + fmt.Printf("Pass 2: walk error: %v\n", err) }) orphanedNodes := make(map[btrfs.LogicalAddr]struct{}) diff --git a/pkg/btrfs/io2_fs.go b/pkg/btrfs/io2_fs.go index cb99d14..1a3a9df 100644 --- a/pkg/btrfs/io2_fs.go +++ b/pkg/btrfs/io2_fs.go @@ -150,9 +150,6 @@ type QualifiedPhysicalAddr struct { Addr PhysicalAddr } -var Dbg = false -var dbg2 = false - func (fs *FS) Resolve(laddr LogicalAddr) (paddrs map[QualifiedPhysicalAddr]struct{}, maxlen uint64) { paddrs = make(map[QualifiedPhysicalAddr]struct{}) maxlen = math.MaxUint64 @@ -160,12 +157,7 @@ func (fs *FS) Resolve(laddr LogicalAddr) (paddrs map[QualifiedPhysicalAddr]struc for _, chunk := range fs.chunks { low := LogicalAddr(chunk.Key.Offset) high := low + LogicalAddr(chunk.Chunk.Head.Size) - match := low <= laddr && laddr < high - if dbg2 { - fmt.Printf("DBG: %v <= %v < %v : %v\n", - low, laddr, high, match) - } - if match { + if low <= laddr && laddr < high { offsetWithinChunk := uint64(laddr) - chunk.Key.Offset maxlen = util.Min(maxlen, chunk.Chunk.Head.Size-offsetWithinChunk) for _, stripe := range chunk.Chunk.Stripes { @@ -176,11 +168,6 @@ func (fs *FS) Resolve(laddr LogicalAddr) (paddrs map[QualifiedPhysicalAddr]struc } } } - if Dbg && len(paddrs) == 0 { - dbg2 = true - fs.Resolve(laddr) - panic(fmt.Errorf("could not resolve %v", laddr)) - } return paddrs, maxlen } @@ -200,9 +187,7 @@ func (fs *FS) ReadAt(dat []byte, laddr LogicalAddr) (int, error) { func (fs *FS) maybeShortReadAt(dat []byte, laddr LogicalAddr) (int, error) { paddrs, maxlen := fs.Resolve(laddr) if len(paddrs) == 0 { - err := fmt.Errorf("read: could not map logical address %v", laddr) - panic(err) - //return 0, err + return 0, fmt.Errorf("read: could not map logical address %v", laddr) } if uint64(len(dat)) > maxlen { dat = dat[:maxlen] -- cgit v1.2.3-2-g168b