summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsvol/devext.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-30 04:14:55 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-30 04:14:55 -0600
commitb78fe1835fed316bd8e9e51c91fcc05422330490 (patch)
treeeb8ed91bf6160aa732229cc4374eaf0c527b50ef /pkg/btrfs/btrfsvol/devext.go
parent27d2f3a0efe6de94c7720907557e640e8a2f1428 (diff)
lock sizes, use blockgroups
Diffstat (limited to 'pkg/btrfs/btrfsvol/devext.go')
-rw-r--r--pkg/btrfs/btrfsvol/devext.go18
1 files changed, 14 insertions, 4 deletions
diff --git a/pkg/btrfs/btrfsvol/devext.go b/pkg/btrfs/btrfsvol/devext.go
index 736d39b..8a69c7e 100644
--- a/pkg/btrfs/btrfsvol/devext.go
+++ b/pkg/btrfs/btrfsvol/devext.go
@@ -8,10 +8,11 @@ import (
// physical => logical
type devextMapping struct {
- PAddr PhysicalAddr
- LAddr LogicalAddr
- Size AddrDelta
- Flags *BlockGroupFlags
+ PAddr PhysicalAddr
+ LAddr LogicalAddr
+ Size AddrDelta
+ SizeLocked bool
+ Flags *BlockGroupFlags
}
// return -1 if 'a' is wholly to the left of 'b'
@@ -50,6 +51,15 @@ func (a devextMapping) union(rest ...devextMapping) (devextMapping, error) {
PAddr: beg,
Size: end.Sub(beg),
}
+ for _, ext := range exts {
+ if ext.SizeLocked {
+ ret.SizeLocked = true
+ if ret.Size != ext.Size {
+ return devextMapping{}, fmt.Errorf("member devext has locked size=%v, but union would have size=%v",
+ ext.Size, ret.Size)
+ }
+ }
+ }
// figure out the logical range (.LAddr)
first := true
for _, ext := range exts {