summaryrefslogtreecommitdiff
path: root/pkg/btrfs
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-26 23:05:57 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-26 23:05:57 -0600
commit00f0caa1c3c0d236aeb74705caa9c71ebe58963e (patch)
treefbd30182b2c0687345fcbb1f3aed2eaec71b0064 /pkg/btrfs
parent8463b2bff37978124e5210a59590f1ac33e453c0 (diff)
use the LV itself to reconstruct the mappings
Diffstat (limited to 'pkg/btrfs')
-rw-r--r--pkg/btrfs/btrfsvol/lvm.go39
1 files changed, 27 insertions, 12 deletions
diff --git a/pkg/btrfs/btrfsvol/lvm.go b/pkg/btrfs/btrfsvol/lvm.go
index c0264b3..a145f3e 100644
--- a/pkg/btrfs/btrfsvol/lvm.go
+++ b/pkg/btrfs/btrfsvol/lvm.go
@@ -95,12 +95,10 @@ func (lv *LogicalVolume[PhysicalVolume]) AddMapping(m Mapping) error {
break
}
}
- if len(logicalOverlaps) > 0 {
- var err error
- newChunk, err = newChunk.union(logicalOverlaps...)
- if err != nil {
- return fmt.Errorf("(%p).AddMapping: %w", lv, err)
- }
+ var err error
+ newChunk, err = newChunk.union(logicalOverlaps...)
+ if err != nil {
+ return fmt.Errorf("(%p).AddMapping: %w", lv, err)
}
// physical2logical
@@ -119,12 +117,9 @@ func (lv *LogicalVolume[PhysicalVolume]) AddMapping(m Mapping) error {
break
}
}
- if len(physicalOverlaps) > 0 {
- var err error
- newExt, err = newExt.union(physicalOverlaps...)
- if err != nil {
- return fmt.Errorf("(%p).AddMapping: %w", lv, err)
- }
+ newExt, err = newExt.union(physicalOverlaps...)
+ if err != nil {
+ return fmt.Errorf("(%p).AddMapping: %w", lv, err)
}
// logical2physical
@@ -189,6 +184,26 @@ func (lv *LogicalVolume[PhysicalVolume]) fsck() error {
return nil
}
+func (lv *LogicalVolume[PhysicalVolume]) Mappings() []Mapping {
+ var ret []Mapping
+ for _, chunk := range lv.logical2physical {
+ 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,
+ })
+ }
+ }
+ return ret
+}
+
func (lv *LogicalVolume[PhysicalVolume]) Resolve(laddr LogicalAddr) (paddrs map[QualifiedPhysicalAddr]struct{}, maxlen AddrDelta) {
paddrs = make(map[QualifiedPhysicalAddr]struct{})
maxlen = math.MaxInt64