From 4afd0a5b438f0eda8af3be8018bc024daeb738c3 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 25 Jul 2023 12:32:13 -0600 Subject: Inline btrfsutil.Open() into main.go --- cmd/btrfs-rec/main.go | 36 +++++++++++++++++++++++++++++++----- lib/btrfsutil/open.go | 50 -------------------------------------------------- 2 files changed, 31 insertions(+), 55 deletions(-) delete mode 100644 lib/btrfsutil/open.go diff --git a/cmd/btrfs-rec/main.go b/cmd/btrfs-rec/main.go index 39ba9ef..258e35f 100644 --- a/cmd/btrfs-rec/main.go +++ b/cmd/btrfs-rec/main.go @@ -21,6 +21,7 @@ import ( "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol" "git.lukeshu.com/btrfs-progs-ng/lib/btrfsutil" "git.lukeshu.com/btrfs-progs-ng/lib/containers" + "git.lukeshu.com/btrfs-progs-ng/lib/diskio" "git.lukeshu.com/btrfs-progs-ng/lib/profile" "git.lukeshu.com/btrfs-progs-ng/lib/textui" ) @@ -160,6 +161,8 @@ func run(runE func(*cobra.Command, []string) error) func(*cobra.Command, []strin func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*cobra.Command, []string) error { return run(func(cmd *cobra.Command, args []string) (err error) { + ctx := cmd.Context() + maybeSetErr := func(_err error) { if _err != nil && err == nil { err = _err @@ -171,16 +174,39 @@ func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*co // it doesn't interfere with the `help` sub-command. return cliutil.FlagErrorFunc(cmd, fmt.Errorf("must specify 1 or more physical volumes with --pv")) } - fs, err := btrfsutil.Open(cmd.Context(), globalFlags.openFlag, globalFlags.pvs...) - if err != nil { - return err - } + fs := new(btrfs.FS) defer func() { maybeSetErr(fs.Close()) }() + for i, filename := range globalFlags.pvs { + dlog.Debugf(ctx, "Adding device file %d/%d %q...", i, len(globalFlags.pvs), filename) + osFile, err := os.OpenFile(filename, globalFlags.openFlag, 0) + if err != nil { + return 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 fmt.Errorf("device file %q: %w", filename, err) + } + } + if err := fs.InitChunks(ctx); err != nil { + dlog.Errorf(ctx, "error: InitChunks: %v", err) + } if globalFlags.mappings != "" { - mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](cmd.Context(), globalFlags.mappings) + mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](ctx, globalFlags.mappings) if err != nil { return err } 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 -// -// 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.1-4-g5e80