summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--lib/btrfs/btrfstree/readnode.go2
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuilttrees.go2
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/s2_classify.go1
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit.go2
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit_test.go80
7 files changed, 87 insertions, 6 deletions
diff --git a/go.mod b/go.mod
index 1a43afc..7c8633e 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ module git.lukeshu.com/btrfs-progs-ng
go 1.19
require (
- git.lukeshu.com/go/lowmemjson v0.0.0-20220822033959-325838f35ce9
+ git.lukeshu.com/go/lowmemjson v0.0.0-20220830073646-8cf459090af5
github.com/datawire/dlib v1.3.0
github.com/datawire/ocibuild v0.0.3-0.20220423003204-fc6a4e9f90dc
github.com/davecgh/go-spew v1.1.1
diff --git a/go.sum b/go.sum
index 81a8cef..b4a6d59 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-git.lukeshu.com/go/lowmemjson v0.0.0-20220822033959-325838f35ce9 h1:YSrCKYaOFOtbBP2+rS6X0smKx07VvHTr9N7NgN+u05E=
-git.lukeshu.com/go/lowmemjson v0.0.0-20220822033959-325838f35ce9/go.mod h1:7StdaFpmZNKYJmQ67fGbzcIcnrGjmD54f/2WbeHLaBw=
+git.lukeshu.com/go/lowmemjson v0.0.0-20220830073646-8cf459090af5 h1:+aUVtC977Hbwhz4wrxNm5KBd8XLpoNfBvEtm2ZrX91s=
+git.lukeshu.com/go/lowmemjson v0.0.0-20220830073646-8cf459090af5/go.mod h1:7StdaFpmZNKYJmQ67fGbzcIcnrGjmD54f/2WbeHLaBw=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/datawire/dlib v1.3.0 h1:KkmyXU1kwm3oPBk1ypR70YbcOlEXWzEbx5RE0iRXTGk=
github.com/datawire/dlib v1.3.0/go.mod h1:NiGDmetmbkBvtznpWSx6C0vA0s0LK9aHna3LJDqjruk=
diff --git a/lib/btrfs/btrfstree/readnode.go b/lib/btrfs/btrfstree/readnode.go
index b1c34e4..e363241 100644
--- a/lib/btrfs/btrfstree/readnode.go
+++ b/lib/btrfs/btrfstree/readnode.go
@@ -51,7 +51,7 @@ func FSReadNode(
var ok bool
exp, ok = fs.ParentTree(exp)
if !ok {
- // Failed lookup up parent info; fail open.
+ // Failed look up parent info; fail open.
return nil
}
if exp == 0 {
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuilttrees.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuilttrees.go
index 0a321ea..9daf97f 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuilttrees.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/rebuilttrees.go
@@ -23,7 +23,7 @@ type RebuiltTrees struct {
type _FS interface {
diskio.File[btrfsvol.LogicalAddr]
- ParentTree(btrfsprim.ObjID) (btrfsprim.ObjID, bool)
+ btrfstree.NodeFile
btrfstree.NodeSource
btrfstree.TreeOperator
}
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/s2_classify.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s2_classify.go
index 36e5395..57c26e7 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/s2_classify.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s2_classify.go
@@ -74,6 +74,7 @@ func classifyNodes(ctx context.Context, fs _FS, scanResults btrfsinspect.ScanDev
},
}
+ progress()
btrfsutil.WalkAllTrees(ctx, fs, btrfsutil.WalkAllTreesHandler{
TreeWalkHandler: walkHandler,
Err: func(err *btrfsutil.WalkError) {
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit.go
index a7b2f29..fc46d27 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit.go
@@ -105,7 +105,7 @@ func reInitBrokenNodes(ctx context.Context, fs _FS, badNodes []badNode) (map[btr
min, max := spanOfTreePath(fs, path)
node := RebuiltNode{
- Errs: containers.Set[string]{err.Error(): struct{}{}},
+ Errs: containers.Set[string]{badNode.Err: struct{}{}},
MinKey: min,
MaxKey: max,
InTrees: containers.Set[btrfsprim.ObjID]{path.Node(-1).FromTree: struct{}{}},
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit_test.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit_test.go
new file mode 100644
index 0000000..b361606
--- /dev/null
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/s3_reinit_test.go
@@ -0,0 +1,80 @@
+// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package rebuildnodes_test
+
+import (
+ "strings"
+ "testing"
+
+ "git.lukeshu.com/go/lowmemjson"
+ "github.com/stretchr/testify/assert"
+
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsprim"
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfstree"
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
+ "git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsinspect/rebuildnodes"
+ "git.lukeshu.com/btrfs-progs-ng/lib/containers"
+)
+
+func TestEncodeRebuiltNodes(t *testing.T) {
+ dat := map[btrfsvol.LogicalAddr]*rebuildnodes.RebuiltNode{
+ 100007133184: {
+ Errs: containers.Set[string]{
+ "btrfs.ReadNode: node@0x0000001748e3c000: expected generation\u003c=6596014 but claims to be generation=6596025": struct{}{},
+ },
+ MinKey: btrfsprim.Key{},
+ MaxKey: btrfsprim.Key{},
+ InTrees: containers.Set[btrfsprim.ObjID]{
+ 257: struct{}{},
+ },
+ Node: btrfstree.Node{},
+ },
+ }
+ var buf strings.Builder
+ assert.NoError(t, lowmemjson.Encode(&lowmemjson.ReEncoder{
+ Out: &buf,
+
+ Indent: "\t",
+ ForceTrailingNewlines: true,
+ }, dat))
+ assert.Equal(t, `{
+ "100007133184": {
+ "Errs": [
+ "btrfs.ReadNode: node@0x0000001748e3c000: expected generation\u003c=6596014 but claims to be generation=6596025"
+ ],
+ "MinKey": {
+ "ObjectID": 0,
+ "ItemType": 0,
+ "Offset": 0
+ },
+ "MaxKey": {
+ "ObjectID": 0,
+ "ItemType": 0,
+ "Offset": 0
+ },
+ "InTrees": [
+ 257
+ ],
+ "Size": 0,
+ "ChecksumType": 0,
+ "Head": {
+ "Checksum": "0000000000000000000000000000000000000000000000000000000000000000",
+ "MetadataUUID": "00000000-0000-0000-0000-000000000000",
+ "Addr": 0,
+ "Flags": 0,
+ "BackrefRev": 0,
+ "ChunkTreeUUID": "00000000-0000-0000-0000-000000000000",
+ "Generation": 0,
+ "Owner": 0,
+ "NumItems": 0,
+ "Level": 0
+ },
+ "BodyInternal": null,
+ "BodyLeaf": null,
+ "Padding": null
+ }
+}
+`, buf.String())
+}