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