From 1624c2ef8c5f95e428ad185278c3cba576f9dcb0 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <lukeshu@lukeshu.com>
Date: Sat, 22 Jul 2023 21:18:40 -0600
Subject: btrfs: Export SuperBlockSize

---
 lib/btrfs/io1_pv.go | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'lib')

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,
-- 
cgit v1.2.3-2-g168b


From a2e7457d7fc339caac4e1f55d0eeadd732af60b1 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <lukeshu@lukeshu.com>
Date: Tue, 25 Jul 2023 12:31:30 -0600
Subject: Don't try to read the chunk tree until all devices are added

---
 lib/btrfs/io2_lv.go   | 12 ++++++++----
 lib/btrfsutil/open.go |  3 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

(limited to 'lib')

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
index abbd466..91bb943 100644
--- a/lib/btrfsutil/open.go
+++ b/lib/btrfsutil/open.go
@@ -43,5 +43,8 @@ func Open(ctx context.Context, flag int, filenames ...string) (*btrfs.FS, error)
 			return nil, fmt.Errorf("device file %q: %w", filename, err)
 		}
 	}
+	if err := fs.InitChunks(ctx); err != nil {
+		dlog.Errorf(ctx, "error: InitChunks: %v", err)
+	}
 	return fs, nil
 }
-- 
cgit v1.2.3-2-g168b


From 4afd0a5b438f0eda8af3be8018bc024daeb738c3 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <lukeshu@lukeshu.com>
Date: Tue, 25 Jul 2023 12:32:13 -0600
Subject: Inline btrfsutil.Open() into main.go

---
 lib/btrfsutil/open.go | 50 --------------------------------------------------
 1 file changed, 50 deletions(-)
 delete mode 100644 lib/btrfsutil/open.go

(limited to 'lib')

diff --git a/lib/btrfsutil/open.go b/lib/btrfsutil/open.go
deleted file mode 100644
index 91bb943..0000000
--- a/lib/btrfsutil/open.go
+++ /dev/null
@@ -1,50 +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)
-		}
-	}
-	if err := fs.InitChunks(ctx); err != nil {
-		dlog.Errorf(ctx, "error: InitChunks: %v", err)
-	}
-	return fs, nil
-}
-- 
cgit v1.2.3-2-g168b