summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/btrfs-fsck/pass0.go4
-rw-r--r--cmd/btrfs-fsck/pass1.go13
-rw-r--r--cmd/btrfs-rec/inspect_recoverchunks.go2
-rw-r--r--lib/btrfs/io1_pv.go8
-rw-r--r--lib/btrfs/io2_lv.go20
-rw-r--r--lib/btrfs/io3_btree.go24
-rw-r--r--lib/btrfs/types_node.go2
-rw-r--r--lib/btrfsprogs/btrfsinspect/mount.go6
-rw-r--r--lib/btrfsprogs/btrfsinspect/print_tree.go18
-rw-r--r--lib/btrfsprogs/btrfsinspect/recoverchunks.go4
10 files changed, 49 insertions, 52 deletions
diff --git a/cmd/btrfs-fsck/pass0.go b/cmd/btrfs-fsck/pass0.go
index ae86003..fc087e5 100644
--- a/cmd/btrfs-fsck/pass0.go
+++ b/cmd/btrfs-fsck/pass0.go
@@ -10,12 +10,10 @@ import (
"os"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsutil"
- "git.lukeshu.com/btrfs-progs-ng/lib/util"
)
-func pass0(ctx context.Context, filenames ...string) (*btrfs.FS, *util.Ref[btrfsvol.PhysicalAddr, btrfs.Superblock], error) {
+func pass0(ctx context.Context, filenames ...string) (*btrfs.FS, *btrfs.Superblock, error) {
fmt.Printf("\nPass 0: init and superblocks...\n")
fs, err := btrfsutil.Open(ctx, os.O_RDWR, filenames...)
diff --git a/cmd/btrfs-fsck/pass1.go b/cmd/btrfs-fsck/pass1.go
index e8398f9..e41694a 100644
--- a/cmd/btrfs-fsck/pass1.go
+++ b/cmd/btrfs-fsck/pass1.go
@@ -17,7 +17,7 @@ import (
"git.lukeshu.com/btrfs-progs-ng/lib/util"
)
-func pass1(ctx context.Context, fs *btrfs.FS, superblock *util.Ref[btrfsvol.PhysicalAddr, btrfs.Superblock]) (map[btrfsvol.LogicalAddr]struct{}, error) {
+func pass1(ctx context.Context, fs *btrfs.FS, superblock *btrfs.Superblock) (map[btrfsvol.LogicalAddr]struct{}, error) {
fmt.Printf("\nPass 1: chunk mappings...\n")
fmt.Printf("Pass 1: ... walking fs\n")
@@ -37,7 +37,7 @@ func pass1(ctx context.Context, fs *btrfs.FS, superblock *util.Ref[btrfsvol.Phys
fsFoundNodes := make(map[btrfsvol.LogicalAddr]struct{})
for _, dev := range fs.LV.PhysicalVolumes() {
fmt.Printf("Pass 1: ... dev[%q] scanning for nodes...\n", dev.Name())
- devResult, err := btrfsinspect.ScanOneDev(ctx, dev, superblock.Data)
+ devResult, err := btrfsinspect.ScanOneDev(ctx, dev, *superblock)
if err != nil {
return nil, err
}
@@ -63,8 +63,7 @@ func pass1(ctx context.Context, fs *btrfs.FS, superblock *util.Ref[btrfsvol.Phys
}
func pass1WriteReconstructedChunks(fs *btrfs.FS) {
- sbRef, _ := fs.Superblock()
- superblock := sbRef.Data
+ superblock, _ := fs.Superblock()
// FIXME(lukeshu): OK, so this just assumes that all the
// reconstructed stripes fit in one node, and that we can just
@@ -95,9 +94,9 @@ func pass1WriteReconstructedChunks(fs *btrfs.FS) {
Key: btrfs.Key{
ObjectID: btrfs.DEV_ITEMS_OBJECTID,
ItemType: btrfsitem.DEV_ITEM_KEY,
- Offset: uint64(superblock.Data.DevItem.DevID),
+ Offset: uint64(superblock.DevItem.DevID),
},
- Body: superblock.Data.DevItem,
+ Body: superblock.DevItem,
})
}
@@ -131,7 +130,7 @@ func pass1WriteReconstructedChunks(fs *btrfs.FS) {
chunkBody.Stripes = append(chunkBody.Stripes, btrfsitem.ChunkStripe{
DeviceID: mapping.PAddr.Dev,
Offset: mapping.PAddr.Addr,
- DeviceUUID: devSB.Data.DevItem.DevUUID,
+ DeviceUUID: devSB.DevItem.DevUUID,
})
reconstructedNode.Data.BodyLeaf[chunkIdx].Body = chunkBody
}
diff --git a/cmd/btrfs-rec/inspect_recoverchunks.go b/cmd/btrfs-rec/inspect_recoverchunks.go
index bc32248..4314b66 100644
--- a/cmd/btrfs-rec/inspect_recoverchunks.go
+++ b/cmd/btrfs-rec/inspect_recoverchunks.go
@@ -44,7 +44,7 @@ func init() {
for _, dev := range fs.LV.PhysicalVolumes() {
dlog.Infof(ctx, "dev[%q] Scanning for unreachable nodes...", dev.Name())
- devResult, err := btrfsinspect.ScanOneDev(ctx, dev, superblock.Data)
+ devResult, err := btrfsinspect.ScanOneDev(ctx, dev, *superblock)
if err != nil {
return err
}
diff --git a/lib/btrfs/io1_pv.go b/lib/btrfs/io1_pv.go
index 4a69e12..44a8d76 100644
--- a/lib/btrfs/io1_pv.go
+++ b/lib/btrfs/io1_pv.go
@@ -17,7 +17,7 @@ type Device struct {
*os.File
cacheSuperblocks []*util.Ref[btrfsvol.PhysicalAddr, Superblock]
- cacheSuperblock *util.Ref[btrfsvol.PhysicalAddr, Superblock]
+ cacheSuperblock *Superblock
}
var _ util.File[btrfsvol.PhysicalAddr] = (*Device)(nil)
@@ -75,7 +75,7 @@ func (dev *Device) Superblocks() ([]*util.Ref[btrfsvol.PhysicalAddr, Superblock]
return ret, nil
}
-func (dev *Device) Superblock() (*util.Ref[btrfsvol.PhysicalAddr, Superblock], error) {
+func (dev *Device) Superblock() (*Superblock, error) {
if dev.cacheSuperblock != nil {
return dev.cacheSuperblock, nil
}
@@ -95,6 +95,6 @@ func (dev *Device) Superblock() (*util.Ref[btrfsvol.PhysicalAddr, Superblock], e
}
}
- dev.cacheSuperblock = sbs[0]
- return sbs[0], nil
+ dev.cacheSuperblock = &sbs[0].Data
+ return &sbs[0].Data, nil
}
diff --git a/lib/btrfs/io2_lv.go b/lib/btrfs/io2_lv.go
index b36796b..eee58d5 100644
--- a/lib/btrfs/io2_lv.go
+++ b/lib/btrfs/io2_lv.go
@@ -23,7 +23,7 @@ type FS struct {
LV btrfsvol.LogicalVolume[*Device]
cacheSuperblocks []*util.Ref[btrfsvol.PhysicalAddr, Superblock]
- cacheSuperblock *util.Ref[btrfsvol.PhysicalAddr, Superblock]
+ cacheSuperblock *Superblock
}
var _ util.File[btrfsvol.LogicalAddr] = (*FS)(nil)
@@ -33,12 +33,12 @@ func (fs *FS) AddDevice(ctx context.Context, dev *Device) error {
if err != nil {
return err
}
- if err := fs.LV.AddPhysicalVolume(sb.Data.DevItem.DevID, dev); err != nil {
+ if err := fs.LV.AddPhysicalVolume(sb.DevItem.DevID, dev); err != nil {
return err
}
fs.cacheSuperblocks = nil
fs.cacheSuperblock = nil
- if err := fs.initDev(sb); err != nil {
+ if err := fs.initDev(*sb); err != nil {
dlog.Errorf(ctx, "error: AddDevice: %q: %v", dev.Name(), err)
}
return nil
@@ -52,7 +52,7 @@ func (fs *FS) Name() string {
if err != nil {
return fmt.Sprintf("fs_uuid=%v", "(unreadable)")
}
- name := fmt.Sprintf("fs_uuid=%v", sb.Data.FSUUID)
+ name := fmt.Sprintf("fs_uuid=%v", sb.FSUUID)
fs.LV.SetName(name)
return name
}
@@ -92,7 +92,7 @@ func (fs *FS) Superblocks() ([]*util.Ref[btrfsvol.PhysicalAddr, Superblock], err
return ret, nil
}
-func (fs *FS) Superblock() (*util.Ref[btrfsvol.PhysicalAddr, Superblock], error) {
+func (fs *FS) Superblock() (*Superblock, error) {
if fs.cacheSuperblock != nil {
return fs.cacheSuperblock, nil
}
@@ -129,8 +129,8 @@ func (fs *FS) Superblock() (*util.Ref[btrfsvol.PhysicalAddr, Superblock], error)
}
}
- fs.cacheSuperblock = sbs[0]
- return sbs[0], nil
+ fs.cacheSuperblock = &sbs[0].Data
+ return &sbs[0].Data, nil
}
func (fs *FS) ReInit() error {
@@ -140,15 +140,15 @@ func (fs *FS) ReInit() error {
if err != nil {
return fmt.Errorf("file %q: %w", dev.Name(), err)
}
- if err := fs.initDev(sb); err != nil {
+ if err := fs.initDev(*sb); err != nil {
return fmt.Errorf("file %q: %w", dev.Name(), err)
}
}
return nil
}
-func (fs *FS) initDev(sb *util.Ref[btrfsvol.PhysicalAddr, Superblock]) error {
- syschunks, err := sb.Data.ParseSysChunkArray()
+func (fs *FS) initDev(sb Superblock) error {
+ syschunks, err := sb.ParseSysChunkArray()
if err != nil {
return err
}
diff --git a/lib/btrfs/io3_btree.go b/lib/btrfs/io3_btree.go
index a02a857..4d2e556 100644
--- a/lib/btrfs/io3_btree.go
+++ b/lib/btrfs/io3_btree.go
@@ -146,30 +146,30 @@ func (fs *FS) lookupTree(treeID ObjID) (*treeRoot, error) {
case ROOT_TREE_OBJECTID:
return &treeRoot{
TreeID: treeID,
- RootNode: sb.Data.RootTree,
- Level: sb.Data.RootLevel,
- Generation: sb.Data.Generation, // XXX: same generation as LOG_TREE?
+ RootNode: sb.RootTree,
+ Level: sb.RootLevel,
+ Generation: sb.Generation, // XXX: same generation as LOG_TREE?
}, nil
case CHUNK_TREE_OBJECTID:
return &treeRoot{
TreeID: treeID,
- RootNode: sb.Data.ChunkTree,
- Level: sb.Data.ChunkLevel,
- Generation: sb.Data.ChunkRootGeneration,
+ RootNode: sb.ChunkTree,
+ Level: sb.ChunkLevel,
+ Generation: sb.ChunkRootGeneration,
}, nil
case TREE_LOG_OBJECTID:
return &treeRoot{
TreeID: treeID,
- RootNode: sb.Data.LogTree,
- Level: sb.Data.LogLevel,
- Generation: sb.Data.Generation, // XXX: same generation as ROOT_TREE?
+ RootNode: sb.LogTree,
+ Level: sb.LogLevel,
+ Generation: sb.Generation, // XXX: same generation as ROOT_TREE?
}, nil
case BLOCK_GROUP_TREE_OBJECTID:
return &treeRoot{
TreeID: treeID,
- RootNode: sb.Data.BlockGroupRoot,
- Level: sb.Data.BlockGroupRootLevel,
- Generation: sb.Data.BlockGroupRootGeneration,
+ RootNode: sb.BlockGroupRoot,
+ Level: sb.BlockGroupRootLevel,
+ Generation: sb.BlockGroupRootGeneration,
}, nil
default:
rootItem, err := fs.TreeSearch(ROOT_TREE_OBJECTID, func(key Key) int {
diff --git a/lib/btrfs/types_node.go b/lib/btrfs/types_node.go
index 34151c9..fc12a00 100644
--- a/lib/btrfs/types_node.go
+++ b/lib/btrfs/types_node.go
@@ -406,7 +406,7 @@ func (fs *FS) ReadNode(addr btrfsvol.LogicalAddr) (*util.Ref[btrfsvol.LogicalAdd
return nil, fmt.Errorf("btrfs.FS.ReadNode: %w", err)
}
- return ReadNode[btrfsvol.LogicalAddr](fs, sb.Data, addr, func(claimAddr btrfsvol.LogicalAddr) error {
+ return ReadNode[btrfsvol.LogicalAddr](fs, *sb, addr, func(claimAddr btrfsvol.LogicalAddr) error {
if claimAddr != addr {
return fmt.Errorf("read from laddr=%v but claims to be at laddr=%v",
addr, claimAddr)
diff --git a/lib/btrfsprogs/btrfsinspect/mount.go b/lib/btrfsprogs/btrfsinspect/mount.go
index 641bc64..9cb28dc 100644
--- a/lib/btrfsprogs/btrfsinspect/mount.go
+++ b/lib/btrfsprogs/btrfsinspect/mount.go
@@ -205,9 +205,9 @@ func (sv *subvolume) StatFS(_ context.Context, op *fuseops.StatFSOp) error {
return err
}
- op.IoSize = sb.Data.SectorSize
- op.BlockSize = sb.Data.SectorSize
- op.Blocks = sb.Data.TotalBytes / uint64(sb.Data.SectorSize) // TODO: adjust for RAID type
+ op.IoSize = sb.SectorSize
+ op.BlockSize = sb.SectorSize
+ op.Blocks = sb.TotalBytes / uint64(sb.SectorSize) // TODO: adjust for RAID type
//op.BlocksFree = TODO
// btrfs doesn't have a fixed number of inodes
diff --git a/lib/btrfsprogs/btrfsinspect/print_tree.go b/lib/btrfsprogs/btrfsinspect/print_tree.go
index 2de9818..6c4f550 100644
--- a/lib/btrfsprogs/btrfsinspect/print_tree.go
+++ b/lib/btrfsprogs/btrfsinspect/print_tree.go
@@ -27,19 +27,19 @@ func DumpTrees(ctx context.Context, out io.Writer, fs *btrfs.FS) {
return
}
- if superblock.Data.RootTree != 0 {
+ if superblock.RootTree != 0 {
fmt.Fprintf(out, "root tree\n")
printTree(ctx, out, fs, btrfs.ROOT_TREE_OBJECTID)
}
- if superblock.Data.ChunkTree != 0 {
+ if superblock.ChunkTree != 0 {
fmt.Fprintf(out, "chunk tree\n")
printTree(ctx, out, fs, btrfs.CHUNK_TREE_OBJECTID)
}
- if superblock.Data.LogTree != 0 {
+ if superblock.LogTree != 0 {
fmt.Fprintf(out, "log root tree\n")
printTree(ctx, out, fs, btrfs.TREE_LOG_OBJECTID)
}
- if superblock.Data.BlockGroupRoot != 0 {
+ if superblock.BlockGroupRoot != 0 {
fmt.Fprintf(out, "block group tree\n")
printTree(ctx, out, fs, btrfs.BLOCK_GROUP_TREE_OBJECTID)
}
@@ -82,9 +82,9 @@ func DumpTrees(ctx context.Context, out io.Writer, fs *btrfs.FS) {
},
},
)
- fmt.Fprintf(out, "total bytes %v\n", superblock.Data.TotalBytes)
- fmt.Fprintf(out, "bytes used %v\n", superblock.Data.BytesUsed)
- fmt.Fprintf(out, "uuid %v\n", superblock.Data.FSUUID)
+ fmt.Fprintf(out, "total bytes %v\n", superblock.TotalBytes)
+ fmt.Fprintf(out, "bytes used %v\n", superblock.BytesUsed)
+ fmt.Fprintf(out, "uuid %v\n", superblock.FSUUID)
}
// printTree mimics btrfs-progs
@@ -199,7 +199,7 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfs.Ob
// // TODO
case btrfsitem.ExtentCSum:
sb, _ := fs.Superblock()
- sectorSize := btrfsvol.AddrDelta(sb.Data.SectorSize)
+ sectorSize := btrfsvol.AddrDelta(sb.SectorSize)
start := btrfsvol.LogicalAddr(item.Key.Offset)
itemSize := btrfsvol.AddrDelta(len(body.Sums)) * sectorSize
@@ -214,7 +214,7 @@ func printTree(ctx context.Context, out io.Writer, fs *btrfs.FS, treeID btrfs.Ob
} else {
fmt.Fprintf(out, " ")
}
- fmt.Fprintf(out, "[%d] 0x%s", pos, sum.Fmt(sb.Data.ChecksumType))
+ fmt.Fprintf(out, "[%d] 0x%s", pos, sum.Fmt(sb.ChecksumType))
pos = pos.Add(sectorSize)
}
fmt.Fprintf(out, "\n")
diff --git a/lib/btrfsprogs/btrfsinspect/recoverchunks.go b/lib/btrfsprogs/btrfsinspect/recoverchunks.go
index aae46b0..9f97b45 100644
--- a/lib/btrfsprogs/btrfsinspect/recoverchunks.go
+++ b/lib/btrfsprogs/btrfsinspect/recoverchunks.go
@@ -84,10 +84,10 @@ func (found ScanOneDevResult) AddToLV(ctx context.Context, fs *btrfs.FS, dev *bt
if err := fs.LV.AddMapping(btrfsvol.Mapping{
LAddr: laddr,
PAddr: btrfsvol.QualifiedPhysicalAddr{
- Dev: sb.Data.DevItem.DevID,
+ Dev: sb.DevItem.DevID,
Addr: paddr,
},
- Size: btrfsvol.AddrDelta(sb.Data.NodeSize),
+ Size: btrfsvol.AddrDelta(sb.NodeSize),
SizeLocked: false,
Flags: nil,
}); err != nil {