summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsvol/devext.go
diff options
context:
space:
mode:
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 {