diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-11 22:04:32 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-11 22:34:30 -0600 |
commit | f1a212cddb8dc051c510327c365da42e30b23ab9 (patch) | |
tree | b83f1e9ed0effb995bc3ff04092c60dd9ecbfc93 /pkg/btrfs | |
parent | 2aa95c4e8748027c30dec3e89bb069dae14dfd3f (diff) |
dbg
Diffstat (limited to 'pkg/btrfs')
-rw-r--r-- | pkg/btrfs/io2_fs.go | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/pkg/btrfs/io2_fs.go b/pkg/btrfs/io2_fs.go index dea8537..a59fec4 100644 --- a/pkg/btrfs/io2_fs.go +++ b/pkg/btrfs/io2_fs.go @@ -150,12 +150,22 @@ 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 for _, chunk := range fs.chunks { - if chunk.Key.Offset <= uint64(laddr) && uint64(laddr) < chunk.Key.Offset+uint64(chunk.Chunk.Head.Size) { + low := chunk.Key.Offset + high := chunk.Key.Offset + uint64(chunk.Chunk.Head.Size) + match := low <= uint64(laddr) && uint64(laddr) < high + if dbg2 { + fmt.Printf("DBG: 0x%0x <= 0x%0x < 0x%0x : %v\n", + low, uint64(laddr), high, match) + } + if match { offsetWithinChunk := uint64(laddr) - chunk.Key.Offset maxlen = util.Min(maxlen, chunk.Chunk.Head.Size-offsetWithinChunk) for _, stripe := range chunk.Chunk.Stripes { @@ -166,6 +176,11 @@ 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 } @@ -185,7 +200,9 @@ 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 { - return 0, fmt.Errorf("read: could not map logical address %v", laddr) + err := fmt.Errorf("read: could not map logical address %v", laddr) + panic(err) + //return 0, err } if uint64(len(dat)) > maxlen { dat = dat[:maxlen] |