summaryrefslogtreecommitdiff
path: root/lib/btrfsprogs/btrfsinspect/scanforextents/csums.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/scanforextents/csums.go')
-rw-r--r--lib/btrfsprogs/btrfsinspect/scanforextents/csums.go36
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)
}