diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-15 14:36:47 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-15 15:51:32 -0600 |
commit | 5627aaea2c15a6fa8cca202614119f72972be37f (patch) | |
tree | 45e6199cb43fc0e64ca7714872cffd86a37d4959 /lib/btrfs/btrfsvol | |
parent | d9cb7963948cfb1d705c35653f5237a5e8fee3f3 (diff) |
tidy up
Diffstat (limited to 'lib/btrfs/btrfsvol')
-rw-r--r-- | lib/btrfs/btrfsvol/addr.go | 7 | ||||
-rw-r--r-- | lib/btrfs/btrfsvol/chunk.go | 19 | ||||
-rw-r--r-- | lib/btrfs/btrfsvol/devext.go | 14 | ||||
-rw-r--r-- | lib/btrfs/btrfsvol/lvm.go | 16 |
4 files changed, 26 insertions, 30 deletions
diff --git a/lib/btrfs/btrfsvol/addr.go b/lib/btrfs/btrfsvol/addr.go index 640a3e8..76b531d 100644 --- a/lib/btrfs/btrfsvol/addr.go +++ b/lib/btrfs/btrfsvol/addr.go @@ -43,6 +43,13 @@ type QualifiedPhysicalAddr struct { Addr PhysicalAddr } +func (a QualifiedPhysicalAddr) Add(b AddrDelta) QualifiedPhysicalAddr { + return QualifiedPhysicalAddr{ + Dev: a.Dev, + Addr: a.Addr.Add(b), + } +} + func (a QualifiedPhysicalAddr) Cmp(b QualifiedPhysicalAddr) int { if d := int(a.Dev - b.Dev); d != 0 { return d diff --git a/lib/btrfs/btrfsvol/chunk.go b/lib/btrfs/btrfsvol/chunk.go index 9c77a49..8a2d439 100644 --- a/lib/btrfs/btrfsvol/chunk.go +++ b/lib/btrfs/btrfsvol/chunk.go @@ -8,6 +8,7 @@ import ( "fmt" "sort" + "git.lukeshu.com/btrfs-progs-ng/lib/containers" "git.lukeshu.com/btrfs-progs-ng/lib/maps" "git.lukeshu.com/btrfs-progs-ng/lib/slices" ) @@ -18,7 +19,7 @@ type chunkMapping struct { PAddrs []QualifiedPhysicalAddr Size AddrDelta SizeLocked bool - Flags *BlockGroupFlags + Flags containers.Optional[BlockGroupFlags] } type ChunkMapping = chunkMapping @@ -73,10 +74,7 @@ func (a chunkMapping) union(rest ...chunkMapping) (chunkMapping, error) { for _, chunk := range chunks { offsetWithinRet := chunk.LAddr.Sub(ret.LAddr) for _, stripe := range chunk.PAddrs { - paddrs[QualifiedPhysicalAddr{ - Dev: stripe.Dev, - Addr: stripe.Addr.Add(-offsetWithinRet), - }] = struct{}{} + paddrs[stripe.Add(-offsetWithinRet)] = struct{}{} } } ret.PAddrs = maps.Keys(paddrs) @@ -85,15 +83,14 @@ func (a chunkMapping) union(rest ...chunkMapping) (chunkMapping, error) { }) // figure out the flags (.Flags) for _, chunk := range chunks { - if chunk.Flags == nil { + if !chunk.Flags.OK { continue } - if ret.Flags == nil { - val := *chunk.Flags - ret.Flags = &val + if !ret.Flags.OK { + ret.Flags = chunk.Flags } - if *ret.Flags != *chunk.Flags { - return ret, fmt.Errorf("mismatch flags: %v != %v", *ret.Flags, *chunk.Flags) + if ret.Flags != chunk.Flags { + return ret, fmt.Errorf("mismatch flags: %v != %v", ret.Flags.Val, chunk.Flags.Val) } } // done diff --git a/lib/btrfs/btrfsvol/devext.go b/lib/btrfs/btrfsvol/devext.go index 83ece99..e8e5446 100644 --- a/lib/btrfs/btrfsvol/devext.go +++ b/lib/btrfs/btrfsvol/devext.go @@ -7,6 +7,7 @@ package btrfsvol import ( "fmt" + "git.lukeshu.com/btrfs-progs-ng/lib/containers" "git.lukeshu.com/btrfs-progs-ng/lib/slices" ) @@ -16,7 +17,7 @@ type devextMapping struct { LAddr LogicalAddr Size AddrDelta SizeLocked bool - Flags *BlockGroupFlags + Flags containers.Optional[BlockGroupFlags] } // return -1 if 'a' is wholly to the left of 'b' @@ -77,15 +78,14 @@ func (a devextMapping) union(rest ...devextMapping) (devextMapping, error) { } // figure out the flags (.Flags) for _, ext := range exts { - if ext.Flags == nil { + if !ext.Flags.OK { continue } - if ret.Flags == nil { - val := *ext.Flags - ret.Flags = &val + if !ret.Flags.OK { + ret.Flags = ext.Flags } - if *ret.Flags != *ext.Flags { - return ret, fmt.Errorf("mismatch flags: %v != %v", *ret.Flags, *ext.Flags) + if ret.Flags != ext.Flags { + return ret, fmt.Errorf("mismatch flags: %v != %v", ret.Flags.Val, ext.Flags.Val) } } // done diff --git a/lib/btrfs/btrfsvol/lvm.go b/lib/btrfs/btrfsvol/lvm.go index 149c8cd..9b16e10 100644 --- a/lib/btrfs/btrfsvol/lvm.go +++ b/lib/btrfs/btrfsvol/lvm.go @@ -113,8 +113,8 @@ type Mapping struct { LAddr LogicalAddr PAddr QualifiedPhysicalAddr Size AddrDelta - SizeLocked bool `json:",omitempty"` - Flags *BlockGroupFlags `json:",omitempty"` + SizeLocked bool `json:",omitempty"` + Flags containers.Optional[BlockGroupFlags] `json:",omitempty"` } func (lv *LogicalVolume[PhysicalVolume]) AddMapping(m Mapping) error { @@ -232,17 +232,12 @@ func (lv *LogicalVolume[PhysicalVolume]) Mappings() []Mapping { var ret []Mapping _ = lv.logical2physical.Walk(func(node *containers.RBNode[chunkMapping]) error { chunk := node.Value - var flags *BlockGroupFlags - if chunk.Flags != nil { - val := *chunk.Flags - flags = &val - } for _, slice := range chunk.PAddrs { ret = append(ret, Mapping{ LAddr: chunk.LAddr, PAddr: slice, Size: chunk.Size, - Flags: flags, + Flags: chunk.Flags, }) } return nil @@ -264,10 +259,7 @@ func (lv *LogicalVolume[PhysicalVolume]) Resolve(laddr LogicalAddr) (paddrs map[ paddrs = make(map[QualifiedPhysicalAddr]struct{}) maxlen = chunk.Size - offsetWithinChunk for _, stripe := range chunk.PAddrs { - paddrs[QualifiedPhysicalAddr{ - Dev: stripe.Dev, - Addr: stripe.Addr.Add(offsetWithinChunk), - }] = struct{}{} + paddrs[stripe.Add(offsetWithinChunk)] = struct{}{} } return paddrs, maxlen |