diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-30 04:14:55 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-30 04:14:55 -0600 |
commit | b78fe1835fed316bd8e9e51c91fcc05422330490 (patch) | |
tree | eb8ed91bf6160aa732229cc4374eaf0c527b50ef /pkg/btrfs/btrfsvol/devext.go | |
parent | 27d2f3a0efe6de94c7720907557e640e8a2f1428 (diff) |
lock sizes, use blockgroups
Diffstat (limited to 'pkg/btrfs/btrfsvol/devext.go')
-rw-r--r-- | pkg/btrfs/btrfsvol/devext.go | 18 |
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 { |