summaryrefslogtreecommitdiff
path: root/pkg/btrfs/io2_fs.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-26 22:19:29 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-26 22:19:41 -0600
commit8463b2bff37978124e5210a59590f1ac33e453c0 (patch)
tree37fc4c13f1fdaedf20ee48a53653414fbb3d9ed7 /pkg/btrfs/io2_fs.go
parent64c04fc690ec5a276e11500691173962bbe4d99e (diff)
use devid instead of devuuid, add a Mapping struct
Diffstat (limited to 'pkg/btrfs/io2_fs.go')
-rw-r--r--pkg/btrfs/io2_fs.go33
1 files changed, 10 insertions, 23 deletions
diff --git a/pkg/btrfs/io2_fs.go b/pkg/btrfs/io2_fs.go
index 80f0862..dcf7df8 100644
--- a/pkg/btrfs/io2_fs.go
+++ b/pkg/btrfs/io2_fs.go
@@ -24,7 +24,7 @@ func (fs *FS) AddDevice(dev *Device) error {
if err != nil {
return err
}
- if err := fs.LV.AddPhysicalVolume(sb.Data.DevItem.DevUUID, dev); err != nil {
+ if err := fs.LV.AddPhysicalVolume(sb.Data.DevItem.DevID, dev); err != nil {
return err
}
fs.cacheSuperblocks = nil
@@ -68,7 +68,11 @@ func (fs *FS) Superblocks() ([]*util.Ref[PhysicalAddr, Superblock], error) {
return fs.cacheSuperblocks, nil
}
var ret []*util.Ref[PhysicalAddr, Superblock]
- for _, dev := range fs.LV.PhysicalVolumes() {
+ devs := fs.LV.PhysicalVolumes()
+ if len(devs) == 0 {
+ return nil, fmt.Errorf("no devices")
+ }
+ for _, dev := range devs {
sbs, err := dev.Superblocks()
if err != nil {
return nil, fmt.Errorf("file %q: %w", dev.Name(), err)
@@ -139,16 +143,8 @@ func (fs *FS) initDev(sb *util.Ref[PhysicalAddr, Superblock]) error {
return err
}
for _, chunk := range syschunks {
- for _, stripe := range chunk.Chunk.Stripes {
- if err := fs.LV.AddMapping(
- LogicalAddr(chunk.Key.Offset),
- QualifiedPhysicalAddr{
- Dev: stripe.DeviceUUID,
- Addr: stripe.Offset,
- },
- chunk.Chunk.Head.Size,
- &chunk.Chunk.Head.Type,
- ); err != nil {
+ for _, mapping := range chunk.Chunk.Mappings(chunk.Key) {
+ if err := fs.LV.AddMapping(mapping); err != nil {
return err
}
}
@@ -158,17 +154,8 @@ func (fs *FS) initDev(sb *util.Ref[PhysicalAddr, Superblock]) error {
if item.Head.Key.ItemType != btrfsitem.CHUNK_ITEM_KEY {
return nil
}
- body := item.Body.(btrfsitem.Chunk)
- for _, stripe := range body.Stripes {
- if err := fs.LV.AddMapping(
- LogicalAddr(item.Head.Key.Offset),
- QualifiedPhysicalAddr{
- Dev: stripe.DeviceUUID,
- Addr: stripe.Offset,
- },
- body.Head.Size,
- &body.Head.Type,
- ); err != nil {
+ for _, mapping := range item.Body.(btrfsitem.Chunk).Mappings(item.Head.Key) {
+ if err := fs.LV.AddMapping(mapping); err != nil {
return err
}
}