From bdbf9c6fa89a0e76b48cc695baeb93652513f34d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 23 Aug 2022 21:28:00 -0600 Subject: Combine duplicated code --- .../btrfsinspect/rebuildmappings/blockgroups.go | 31 ++++++++++------------ .../rebuildmappings/rebuildmappings.go | 30 +++------------------ 2 files changed, 18 insertions(+), 43 deletions(-) (limited to 'lib') 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 } diff --git a/lib/btrfsprogs/btrfsinspect/rebuildmappings/rebuildmappings.go b/lib/btrfsprogs/btrfsinspect/rebuildmappings/rebuildmappings.go index ce3b7ed..05aff72 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildmappings/rebuildmappings.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildmappings/rebuildmappings.go @@ -7,7 +7,6 @@ package rebuildmappings import ( "context" "fmt" - "sort" "github.com/datawire/dlib/dlog" @@ -26,30 +25,6 @@ func getNodeSize(fs *btrfs.FS) (btrfsvol.AddrDelta, error) { return btrfsvol.AddrDelta(sb.NodeSize), nil } -type blockgroup struct { - LAddr btrfsvol.LogicalAddr - Size btrfsvol.AddrDelta - Flags btrfsvol.BlockGroupFlags -} - -func dedupBlockGroups(scanResults btrfsinspect.ScanDevicesResult) []blockgroup { - 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, - }] = struct{}{} - } - } - bgsOrdered := maps.Keys(bgsSet) - sort.Slice(bgsOrdered, func(i, j int) bool { - return bgsOrdered[i].LAddr < bgsOrdered[j].LAddr - }) - return bgsOrdered -} - func RebuildMappings(ctx context.Context, fs *btrfs.FS, scanResults btrfsinspect.ScanDevicesResult) error { nodeSize, err := getNodeSize(fs) if err != nil { @@ -133,7 +108,10 @@ func RebuildMappings(ctx context.Context, fs *btrfs.FS, scanResults btrfsinspect // First dedup them, because they change for allocations and // CoW means that they'll bounce around a lot, so you likely // have oodles of duplicates? - bgsOrdered := dedupBlockGroups(scanResults) + bgsOrdered, err := DedupBlockGroups(scanResults) + if err != nil { + return err + } for _, bg := range bgsOrdered { otherLAddr, otherPAddr := fs.LV.ResolveAny(bg.LAddr, bg.Size) if otherLAddr < 0 || otherPAddr.Addr < 0 { -- cgit v1.2.3-2-g168b