summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/btrfs/io1_pv.go5
-rw-r--r--lib/btrfs/io2_lv.go12
-rw-r--r--lib/btrfsutil/open.go47
3 files changed, 10 insertions, 54 deletions
diff --git a/lib/btrfs/io1_pv.go b/lib/btrfs/io1_pv.go
index 3b13f73..46eb24d 100644
--- a/lib/btrfs/io1_pv.go
+++ b/lib/btrfs/io1_pv.go
@@ -30,19 +30,18 @@ var SuperblockAddrs = []btrfsvol.PhysicalAddr{
0x40_0000_0000, // 256GiB
}
-var superblockSize = binstruct.StaticSize(btrfstree.Superblock{})
+var SuperblockSize = btrfsvol.PhysicalAddr(binstruct.StaticSize(btrfstree.Superblock{}))
func (dev *Device) Superblocks() ([]*diskio.Ref[btrfsvol.PhysicalAddr, btrfstree.Superblock], error) {
if dev.cacheSuperblocks != nil {
return dev.cacheSuperblocks, nil
}
- superblockSize := btrfsvol.PhysicalAddr(superblockSize)
sz := dev.Size()
var ret []*diskio.Ref[btrfsvol.PhysicalAddr, btrfstree.Superblock]
for i, addr := range SuperblockAddrs {
- if addr+superblockSize <= sz {
+ if addr+SuperblockSize <= sz {
superblock := &diskio.Ref[btrfsvol.PhysicalAddr, btrfstree.Superblock]{
File: dev,
Addr: addr,
diff --git a/lib/btrfs/io2_lv.go b/lib/btrfs/io2_lv.go
index e9de215..16c5987 100644
--- a/lib/btrfs/io2_lv.go
+++ b/lib/btrfs/io2_lv.go
@@ -43,7 +43,7 @@ func (fs *FS) AddDevice(ctx context.Context, dev *Device) error {
}
fs.cacheSuperblocks = nil
fs.cacheSuperblock = nil
- if err := fs.initDev(ctx, *sb); err != nil {
+ if err := fs.initDev(*sb); err != nil {
dlog.Errorf(ctx, "error: AddDevice: %q: %v", dev.Name(), err)
}
return nil
@@ -142,14 +142,14 @@ func (fs *FS) ReInit(ctx context.Context) error {
if err != nil {
return fmt.Errorf("file %q: %w", dev.Name(), err)
}
- if err := fs.initDev(ctx, *sb); err != nil {
+ if err := fs.initDev(*sb); err != nil {
return fmt.Errorf("file %q: %w", dev.Name(), err)
}
}
- return nil
+ return fs.InitChunks(ctx)
}
-func (fs *FS) initDev(ctx context.Context, sb btrfstree.Superblock) error {
+func (fs *FS) initDev(sb btrfstree.Superblock) error {
syschunks, err := sb.ParseSysChunkArray()
if err != nil {
return err
@@ -161,6 +161,10 @@ func (fs *FS) initDev(ctx context.Context, sb btrfstree.Superblock) error {
}
}
}
+ return nil
+}
+
+func (fs *FS) InitChunks(ctx context.Context) error {
chunkTree, err := fs.ForrestLookup(ctx, btrfsprim.CHUNK_TREE_OBJECTID)
if err != nil {
return err
diff --git a/lib/btrfsutil/open.go b/lib/btrfsutil/open.go
deleted file mode 100644
index abbd466..0000000
--- a/lib/btrfsutil/open.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
-//
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package btrfsutil
-
-import (
- "context"
- "fmt"
- "os"
-
- "github.com/datawire/dlib/dlog"
-
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
- "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
- "git.lukeshu.com/btrfs-progs-ng/lib/textui"
-)
-
-func Open(ctx context.Context, flag int, filenames ...string) (*btrfs.FS, error) {
- fs := new(btrfs.FS)
- for i, filename := range filenames {
- dlog.Debugf(ctx, "Adding device file %d/%d %q...", i, len(filenames), filename)
- osFile, err := os.OpenFile(filename, flag, 0)
- if err != nil {
- _ = fs.Close()
- return nil, fmt.Errorf("device file %q: %w", filename, err)
- }
- typedFile := &diskio.OSFile[btrfsvol.PhysicalAddr]{
- File: osFile,
- }
- bufFile := diskio.NewBufferedFile[btrfsvol.PhysicalAddr](
- ctx,
- typedFile,
- //nolint:gomnd // False positive: gomnd.ignored-functions=[textui.Tunable] doesn't support type params.
- textui.Tunable[btrfsvol.PhysicalAddr](16*1024), // block size: 16KiB
- textui.Tunable(1024), // number of blocks to buffer; total of 16MiB
- )
- devFile := &btrfs.Device{
- File: bufFile,
- }
- if err := fs.AddDevice(ctx, devFile); err != nil {
- return nil, fmt.Errorf("device file %q: %w", filename, err)
- }
- }
- return fs, nil
-}