summaryrefslogtreecommitdiff
path: root/pkg/btrfsmisc
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-07-07 04:02:22 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-07-08 00:16:02 -0600
commit361e24ef2f568fe286f7fcc642e1cc8e626f4a88 (patch)
treec628128cdb702fefd05ca4f2aa84719fbe03d226 /pkg/btrfsmisc
parent22c32850798c264b6a20539b9cd1699228368ce9 (diff)
clear-bad-nodes: support root nodes
Diffstat (limited to 'pkg/btrfsmisc')
-rw-r--r--pkg/btrfsmisc/print_tree.go5
-rw-r--r--pkg/btrfsmisc/walk.go27
2 files changed, 16 insertions, 16 deletions
diff --git a/pkg/btrfsmisc/print_tree.go b/pkg/btrfsmisc/print_tree.go
index c03cb4a..8bfcbe5 100644
--- a/pkg/btrfsmisc/print_tree.go
+++ b/pkg/btrfsmisc/print_tree.go
@@ -221,10 +221,7 @@ func PrintTree(fs *btrfs.FS, root btrfsvol.LogicalAddr) error {
//case btrfsitem.QGROUP_LIMIT_KEY:
// // TODO
case btrfsitem.UUIDMap:
- for _, subvolID := range body {
- fmt.Printf("\t\tsubvol_id %d\n",
- subvolID)
- }
+ fmt.Printf("\t\tsubvol_id %d\n", body.ObjID)
//case btrfsitem.STRING_ITEM_KEY:
// // TODO
case btrfsitem.DevStats:
diff --git a/pkg/btrfsmisc/walk.go b/pkg/btrfsmisc/walk.go
index 0f3f811..231f46b 100644
--- a/pkg/btrfsmisc/walk.go
+++ b/pkg/btrfsmisc/walk.go
@@ -27,8 +27,8 @@ func (e WalkErr) Error() string {
type WalkFSHandler struct {
Err func(error)
// Callbacks for entire trees
- PreTree func(name string, laddr btrfsvol.LogicalAddr)
- PostTree func(name string, laddr btrfsvol.LogicalAddr)
+ PreTree func(name string, id btrfs.ObjID, laddr btrfsvol.LogicalAddr)
+ PostTree func(name string, id btrfs.ObjID, laddr btrfsvol.LogicalAddr)
// Callbacks for nodes or smaller
UnsafeNodes bool
btrfs.TreeWalkHandler
@@ -49,6 +49,7 @@ func WalkFS(fs *btrfs.FS, cbs WalkFSHandler) {
var foundTrees []struct {
Name string
+ ID btrfs.ObjID
Root btrfsvol.LogicalAddr
}
origItem := cbs.Item
@@ -60,10 +61,12 @@ func WalkFS(fs *btrfs.FS, cbs WalkFSHandler) {
} else {
foundTrees = append(foundTrees, struct {
Name string
+ ID btrfs.ObjID
Root btrfsvol.LogicalAddr
}{
Name: fmt.Sprintf("tree %v (via %v %v)",
item.Head.Key.ObjectID.Format(0), treeName, path),
+ ID: item.Head.Key.ObjectID,
Root: root.ByteNr,
})
}
@@ -96,58 +99,58 @@ func WalkFS(fs *btrfs.FS, cbs WalkFSHandler) {
treeName = "root tree"
if cbs.PreTree != nil {
- cbs.PreTree(treeName, superblock.Data.RootTree)
+ cbs.PreTree(treeName, btrfs.ROOT_TREE_OBJECTID, superblock.Data.RootTree)
}
if err := fs.TreeWalk(superblock.Data.RootTree, cbs.TreeWalkHandler); err != nil {
handleErr(nil, err)
}
if cbs.PostTree != nil {
- cbs.PostTree(treeName, superblock.Data.RootTree)
+ cbs.PostTree(treeName, btrfs.ROOT_TREE_OBJECTID, superblock.Data.RootTree)
}
treeName = "chunk tree"
if cbs.PreTree != nil {
- cbs.PreTree(treeName, superblock.Data.ChunkTree)
+ cbs.PreTree(treeName, btrfs.CHUNK_TREE_OBJECTID, superblock.Data.ChunkTree)
}
if err := fs.TreeWalk(superblock.Data.ChunkTree, cbs.TreeWalkHandler); err != nil {
handleErr(nil, err)
}
if cbs.PostTree != nil {
- cbs.PostTree(treeName, superblock.Data.ChunkTree)
+ cbs.PostTree(treeName, btrfs.CHUNK_TREE_OBJECTID, superblock.Data.ChunkTree)
}
treeName = "log tree"
if cbs.PreTree != nil {
- cbs.PreTree(treeName, superblock.Data.LogTree)
+ cbs.PreTree(treeName, btrfs.TREE_LOG_OBJECTID, superblock.Data.LogTree)
}
if err := fs.TreeWalk(superblock.Data.LogTree, cbs.TreeWalkHandler); err != nil {
handleErr(nil, err)
}
if cbs.PostTree != nil {
- cbs.PostTree(treeName, superblock.Data.LogTree)
+ cbs.PostTree(treeName, btrfs.TREE_LOG_OBJECTID, superblock.Data.LogTree)
}
treeName = "block group tree"
if cbs.PreTree != nil {
- cbs.PreTree(treeName, superblock.Data.BlockGroupRoot)
+ cbs.PreTree(treeName, btrfs.BLOCK_GROUP_TREE_OBJECTID, superblock.Data.BlockGroupRoot)
}
if err := fs.TreeWalk(superblock.Data.BlockGroupRoot, cbs.TreeWalkHandler); err != nil {
handleErr(nil, err)
}
if cbs.PostTree != nil {
- cbs.PostTree(treeName, superblock.Data.BlockGroupRoot)
+ cbs.PostTree(treeName, btrfs.BLOCK_GROUP_TREE_OBJECTID, superblock.Data.BlockGroupRoot)
}
for _, tree := range foundTrees {
treeName = tree.Name
if cbs.PreTree != nil {
- cbs.PreTree(treeName, tree.Root)
+ cbs.PreTree(treeName, tree.ID, tree.Root)
}
if err := fs.TreeWalk(tree.Root, cbs.TreeWalkHandler); err != nil {
handleErr(nil, err)
}
if cbs.PostTree != nil {
- cbs.PostTree(treeName, tree.Root)
+ cbs.PostTree(treeName, tree.ID, tree.Root)
}
}
}