diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-08-23 21:28:00 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-08-23 21:28:00 -0600 |
commit | bdbf9c6fa89a0e76b48cc695baeb93652513f34d (patch) | |
tree | 0006a281cefeef91d9839629016ef42de0dfc2c9 /lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go | |
parent | 9c46c8d8b447ff5e0a5ee688b15ef23034e6ce30 (diff) |
Combine duplicated code
Diffstat (limited to 'lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go')
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go b/lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go index a98bf3f..bd390e0 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildmappings/blockgroups.go @@ -8,7 +8,6 @@ import ( "fmt" "sort" - "git.lukeshu.com/btrfs-progs-ng/lib/btrfs" "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol" "git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsinspect" "git.lukeshu.com/btrfs-progs-ng/lib/maps" @@ -20,12 +19,12 @@ type BlockGroup struct { Flags btrfsvol.BlockGroupFlags } -func ReduceScanResults(fs *btrfs.FS, scanResults btrfsinspect.ScanDevicesResult) (map[btrfsvol.LogicalAddr]BlockGroup, error) { - // Reduce - bgSet := make(map[BlockGroup]struct{}) - for _, found := range scanResults { - for _, bg := range found.FoundBlockGroups { - bgSet[BlockGroup{ +func DedupBlockGroups(scanResults btrfsinspect.ScanDevicesResult) ([]BlockGroup, error) { + // Dedup + bgsSet := make(map[BlockGroup]struct{}) + for _, devResults := range scanResults { + for _, bg := range devResults.FoundBlockGroups { + bgsSet[BlockGroup{ LAddr: btrfsvol.LogicalAddr(bg.Key.ObjectID), Size: btrfsvol.AddrDelta(bg.Key.Offset), Flags: bg.BG.Flags, @@ -33,13 +32,15 @@ func ReduceScanResults(fs *btrfs.FS, scanResults btrfsinspect.ScanDevicesResult) } } - // Sanity check - bgList := maps.Keys(bgSet) - sort.Slice(bgList, func(i, j int) bool { - return bgList[i].LAddr < bgList[j].LAddr + // Sort + bgsOrdered := maps.Keys(bgsSet) + sort.Slice(bgsOrdered, func(i, j int) bool { + return bgsOrdered[i].LAddr < bgsOrdered[j].LAddr }) + + // Sanity check var pos btrfsvol.LogicalAddr - for _, bg := range bgList { + for _, bg := range bgsOrdered { if bg.LAddr < pos || bg.Size < 0 { return nil, fmt.Errorf("found block groups are inconsistent") } @@ -47,9 +48,5 @@ func ReduceScanResults(fs *btrfs.FS, scanResults btrfsinspect.ScanDevicesResult) } // Return - bgMap := make(map[btrfsvol.LogicalAddr]BlockGroup, len(bgSet)) - for bg := range bgSet { - bgMap[bg.LAddr] = bg - } - return bgMap, nil + return bgsOrdered, nil } |