summaryrefslogtreecommitdiff
path: root/cmd/btrfs-fsck
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-07-01 00:19:38 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-07-01 00:19:38 -0600
commit7d2d4ae383e02a03dec6aa60207e3a1dfa8e79a9 (patch)
tree5cbe78f32ae384eaae01352a6626bc83461677ff /cmd/btrfs-fsck
parentaee0fa4cf09ef5af90e28441d673ce440e4c2c16 (diff)
move dumb map and sort operations to util/generic.go
Also, the optimization of reversing the node list in pass1 isn't relevant anymore now that I'm using rbtrees
Diffstat (limited to 'cmd/btrfs-fsck')
-rw-r--r--cmd/btrfs-fsck/pass1.go21
-rw-r--r--cmd/btrfs-fsck/pass2.go10
2 files changed, 9 insertions, 22 deletions
diff --git a/cmd/btrfs-fsck/pass1.go b/cmd/btrfs-fsck/pass1.go
index 2cb58bf..6812c73 100644
--- a/cmd/btrfs-fsck/pass1.go
+++ b/cmd/btrfs-fsck/pass1.go
@@ -125,16 +125,7 @@ func (found pass1ScanOneDevResult) AddToLV(fs *btrfs.FS, dev *btrfs.Device) {
// nodes will be subsumed by other things.)
//
// Sort them so that progress numbers are predictable.
- laddrs := make([]btrfsvol.LogicalAddr, 0, len(found.FoundNodes))
- for laddr := range found.FoundNodes {
- laddrs = append(laddrs, laddr)
- }
- sort.Slice(laddrs, func(i, j int) bool {
- // And sort them in reverse order to keep insertions
- // fast.
- return laddrs[i] > laddrs[j]
- })
- for _, laddr := range laddrs {
+ for _, laddr := range util.SortedMapKeys(found.FoundNodes) {
for _, paddr := range found.FoundNodes[laddr] {
if err := fs.LV.AddMapping(btrfsvol.Mapping{
LAddr: laddr,
@@ -164,15 +155,19 @@ func (found pass1ScanOneDevResult) AddToLV(fs *btrfs.FS, dev *btrfs.Device) {
Size btrfsvol.AddrDelta
Flags btrfsvol.BlockGroupFlags
}
- blockgroups := make(map[blockgroup]struct{})
+ bgsSet := make(map[blockgroup]struct{})
for _, bg := range found.FoundBlockGroups {
- blockgroups[blockgroup{
+ bgsSet[blockgroup{
LAddr: btrfsvol.LogicalAddr(bg.Key.ObjectID),
Size: btrfsvol.AddrDelta(bg.Key.Offset),
Flags: bg.BG.Flags,
}] = struct{}{}
}
- for bg := range blockgroups {
+ bgsOrdered := util.MapKeys(bgsSet)
+ sort.Slice(bgsOrdered, func(i, j int) bool {
+ return bgsOrdered[i].LAddr < bgsOrdered[j].LAddr
+ })
+ for _, bg := range bgsOrdered {
otherLAddr, otherPAddr := fs.LV.ResolveAny(bg.LAddr, bg.Size)
if otherLAddr < 0 || otherPAddr.Addr < 0 {
fmt.Printf("Pass 1: ... error: could not pair blockgroup laddr=%v (size=%v flags=%v) with a mapping\n",
diff --git a/cmd/btrfs-fsck/pass2.go b/cmd/btrfs-fsck/pass2.go
index d496d13..acea740 100644
--- a/cmd/btrfs-fsck/pass2.go
+++ b/cmd/btrfs-fsck/pass2.go
@@ -3,7 +3,6 @@ package main
import (
"fmt"
iofs "io/fs"
- "sort"
"lukeshu.com/btrfs-tools/pkg/btrfs"
"lukeshu.com/btrfs-tools/pkg/btrfsmisc"
@@ -53,14 +52,7 @@ func pass2(fs *btrfs.FS, foundNodes map[btrfs.LogicalAddr]struct{}) {
}
}
- var orphanedRootsOrdered []btrfs.LogicalAddr
- for root := range orphanedRoots {
- orphanedRootsOrdered = append(orphanedRootsOrdered, root)
- }
- sort.Slice(orphanedRootsOrdered, func(i, j int) bool {
- return orphanedRootsOrdered[i] < orphanedRootsOrdered[j]
- })
- for _, node := range orphanedRootsOrdered {
+ for _, node := range util.SortedMapKeys(orphanedRoots) {
fmt.Printf("Pass 2: orphaned root: %v\n", node)
}
}