diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-17 20:20:51 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-17 20:20:51 -0600 |
commit | 08f36346efae090737ff70b33b73e360d41a5856 (patch) | |
tree | 82614dc1207ecc5db2ab0b9de3b7864c591e672f /lib/btrfsprogs/btrfsinspect/scanforextents/csums.go | |
parent | 1793ed01f3d4a25d2144d3c766d917bc06f8be83 (diff) |
Make sure there's enough free space for gaps at the beginning or end of bgs
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/scanforextents/csums.go')
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/scanforextents/csums.go | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/scanforextents/csums.go b/lib/btrfsprogs/btrfsinspect/scanforextents/csums.go index c1a1597..0ab933e 100644 --- a/lib/btrfsprogs/btrfsinspect/scanforextents/csums.go +++ b/lib/btrfsprogs/btrfsinspect/scanforextents/csums.go @@ -84,31 +84,30 @@ func (run SumRun[Addr]) Walk(ctx context.Context, fn func(Addr, ShortSum) error) // SumRunWithGaps //////////////////////////////////////////////////// -type SumRunWithGaps[Addr btrfsvol.IntAddr[Addr]] []SumRun[Addr] - -func (sg SumRunWithGaps[Addr]) end() Addr { - return sg[len(sg)-1].Addr.Add(sg[len(sg)-1].Size()) +type SumRunWithGaps[Addr btrfsvol.IntAddr[Addr]] struct { + Addr Addr + Size btrfsvol.AddrDelta + Runs []SumRun[Addr] } -func (sg SumRunWithGaps[Addr]) Size() btrfsvol.AddrDelta { - if len(sg) == 0 { - return 0 - } - return sg.end().Sub(sg[0].Addr) +func (sg SumRunWithGaps[Addr]) NumSums() int { + return int(sg.Size / CSumBlockSize) } -func (sg SumRunWithGaps[Addr]) NumSums() int { - return int(sg.Size() / CSumBlockSize) +func (sg SumRunWithGaps[Addr]) PctFull() float64 { + total := sg.NumSums() + var full int + for _, run := range sg.Runs { + full += run.NumSums() + } + return float64(full) / float64(total) } func (sg SumRunWithGaps[Addr]) SumForAddr(addr Addr) (ShortSum, error) { - if len(sg) == 0 { - return "", io.EOF - } - if addr < sg[0].Addr || addr >= sg.end() { + if addr < sg.Addr || addr >= sg.Addr.Add(sg.Size) { return "", io.EOF } - for _, run := range sg { + for _, run := range sg.Runs { if run.Addr > addr { return "", diskio.ErrWildcard } @@ -123,10 +122,7 @@ func (sg SumRunWithGaps[Addr]) SumForAddr(addr Addr) (ShortSum, error) { // Get implements diskio.Sequence[int, ShortSum] func (sg SumRunWithGaps[Addr]) Get(sumIdx int64) (ShortSum, error) { - if len(sg) == 0 { - return "", io.EOF - } - addr := sg[0].Addr.Add(btrfsvol.AddrDelta(sumIdx) * CSumBlockSize) + addr := sg.Addr.Add(btrfsvol.AddrDelta(sumIdx) * CSumBlockSize) return sg.SumForAddr(addr) } |