summaryrefslogtreecommitdiff
path: root/lib/btrfs/btrfstree/root.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-28 14:05:27 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-03-14 19:45:07 -0600
commit8c8c6c27552f8554ba014c34d684cb90538ef65b (patch)
treef3a53ed194e29b516b52770e4949a1e508fad6a7 /lib/btrfs/btrfstree/root.go
parent34bf167ef33c57b4d6767273f1d265971a4693b9 (diff)
Move files around [ci-skip]
Diffstat (limited to 'lib/btrfs/btrfstree/root.go')
-rw-r--r--lib/btrfs/btrfstree/root.go88
1 files changed, 0 insertions, 88 deletions
diff --git a/lib/btrfs/btrfstree/root.go b/lib/btrfs/btrfstree/root.go
deleted file mode 100644
index ace2b49..0000000
--- a/lib/btrfs/btrfstree/root.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
-//
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package btrfstree
-
-import (
- "fmt"
-
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsitem"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsprim"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
-)
-
-// A TreeRoot is more-or-less a btrfsitem.Root, but simpler; returned by
-// LookupTreeRoot.
-type TreeRoot struct {
- TreeID btrfsprim.ObjID
- RootNode btrfsvol.LogicalAddr
- Level uint8
- Generation btrfsprim.Generation
-}
-
-func RootItemSearchFn(treeID btrfsprim.ObjID) func(btrfsprim.Key, uint32) int {
- return func(key btrfsprim.Key, _ uint32) int {
- if key.ObjectID == treeID && key.ItemType == btrfsitem.ROOT_ITEM_KEY {
- return 0
- }
- return btrfsprim.Key{
- ObjectID: treeID,
- ItemType: btrfsitem.ROOT_ITEM_KEY,
- Offset: 0,
- }.Compare(key)
- }
-}
-
-// LookupTreeRoot is a utility function to help with implementing the 'Trees'
-// interface.
-func LookupTreeRoot(fs TreeOperator, sb Superblock, treeID btrfsprim.ObjID) (*TreeRoot, error) {
- switch treeID {
- case btrfsprim.ROOT_TREE_OBJECTID:
- return &TreeRoot{
- TreeID: treeID,
- RootNode: sb.RootTree,
- Level: sb.RootLevel,
- Generation: sb.Generation, // XXX: same generation as LOG_TREE?
- }, nil
- case btrfsprim.CHUNK_TREE_OBJECTID:
- return &TreeRoot{
- TreeID: treeID,
- RootNode: sb.ChunkTree,
- Level: sb.ChunkLevel,
- Generation: sb.ChunkRootGeneration,
- }, nil
- case btrfsprim.TREE_LOG_OBJECTID:
- return &TreeRoot{
- TreeID: treeID,
- RootNode: sb.LogTree,
- Level: sb.LogLevel,
- Generation: sb.Generation, // XXX: same generation as ROOT_TREE?
- }, nil
- case btrfsprim.BLOCK_GROUP_TREE_OBJECTID:
- return &TreeRoot{
- TreeID: treeID,
- RootNode: sb.BlockGroupRoot,
- Level: sb.BlockGroupRootLevel,
- Generation: sb.BlockGroupRootGeneration,
- }, nil
- default:
- rootItem, err := fs.TreeSearch(btrfsprim.ROOT_TREE_OBJECTID, RootItemSearchFn(treeID))
- if err != nil {
- return nil, err
- }
- switch rootItemBody := rootItem.Body.(type) {
- case *btrfsitem.Root:
- return &TreeRoot{
- TreeID: treeID,
- RootNode: rootItemBody.ByteNr,
- Level: rootItemBody.Level,
- Generation: rootItemBody.Generation,
- }, nil
- case *btrfsitem.Error:
- return nil, fmt.Errorf("malformed ROOT_ITEM for tree %v: %w", treeID, rootItemBody.Err)
- default:
- panic(fmt.Errorf("should not happen: ROOT_ITEM has unexpected item type: %T", rootItemBody))
- }
- }
-}