summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/btrfs-rec/repair_clearbadnodes.go26
-rw-r--r--lib/btrfsprogs/btrfsrepair/clearnodes.go77
2 files changed, 0 insertions, 103 deletions
diff --git a/cmd/btrfs-rec/repair_clearbadnodes.go b/cmd/btrfs-rec/repair_clearbadnodes.go
deleted file mode 100644
index 3ae0810..0000000
--- a/cmd/btrfs-rec/repair_clearbadnodes.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
-//
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package main
-
-import (
- "github.com/datawire/ocibuild/pkg/cliutil"
- "github.com/spf13/cobra"
-
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsrepair"
-)
-
-func init() {
- repairers = append(repairers, subcommand{
- Command: cobra.Command{
- Use: "clear-bad-nodes",
- Short: "Overwrite corrupt nodes with empty nodes",
- Args: cliutil.WrapPositionalArgs(cobra.NoArgs),
- },
- RunE: func(fs *btrfs.FS, cmd *cobra.Command, _ []string) error {
- return btrfsrepair.ClearBadNodes(cmd.Context(), fs)
- },
- })
-}
diff --git a/lib/btrfsprogs/btrfsrepair/clearnodes.go b/lib/btrfsprogs/btrfsrepair/clearnodes.go
deleted file mode 100644
index 2258f66..0000000
--- a/lib/btrfsprogs/btrfsrepair/clearnodes.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
-//
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package btrfsrepair
-
-import (
- "context"
- "errors"
- "fmt"
-
- "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/btrfsprogs/btrfsutil"
- "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
-)
-
-func ClearBadNodes(ctx context.Context, fs *btrfs.FS) error {
- var uuidsInited bool
- var metadataUUID, chunkTreeUUID btrfs.UUID
-
- btrfsutil.WalkAllTrees(ctx, fs, btrfsutil.WalkAllTreesHandler{
- Err: func(err *btrfsutil.WalkError) {
- dlog.Error(ctx, err)
- },
- TreeWalkHandler: btrfs.TreeWalkHandler{
- Node: func(path btrfs.TreePath, node *diskio.Ref[btrfsvol.LogicalAddr, btrfs.Node]) error {
- if !uuidsInited {
- metadataUUID = node.Data.Head.MetadataUUID
- chunkTreeUUID = node.Data.Head.ChunkTreeUUID
- uuidsInited = true
- }
- return nil
- },
- BadNode: func(path btrfs.TreePath, node *diskio.Ref[btrfsvol.LogicalAddr, btrfs.Node], err error) error {
- if !errors.Is(err, btrfs.ErrNotANode) {
- return err
- }
- origErr := err
- if !uuidsInited {
- // TODO(lukeshu): Is there a better way to get the chunk
- // tree UUID?
- return fmt.Errorf("cannot repair node@%v: not (yet?) sure what the chunk tree UUID is", node.Addr)
- }
- node.Data = btrfs.Node{
- Size: node.Data.Size,
- ChecksumType: node.Data.ChecksumType,
- Head: btrfs.NodeHeader{
- //Checksum: filled below,
- MetadataUUID: metadataUUID,
- Addr: node.Addr,
- Flags: btrfs.NodeWritten,
- BackrefRev: btrfs.MixedBackrefRev,
- ChunkTreeUUID: chunkTreeUUID,
- Generation: path.Node(-1).FromGeneration,
- Owner: path.Node(-1).FromTree,
- NumItems: 0,
- Level: path.Node(-1).ToNodeLevel,
- },
- }
- node.Data.Head.Checksum, err = node.Data.CalculateChecksum()
- if err != nil {
- return err
- }
- if err := node.Write(); err != nil {
- return err
- }
-
- dlog.Infof(ctx, "fixed node@%v (err was %v)\n", node.Addr, origErr)
- return nil
- },
- },
- })
- return nil
-}