summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-03-22 13:43:15 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2023-03-23 18:35:46 -0600
commitd11a5357df7d155a7a3e92a67971d3d52ff6ad86 (patch)
tree1d9bfe0ce8b12bb2698f2ff961198534718ba051
parent5520c20c493d52d83288bc2e321117006e38fd1a (diff)
btrfstree: Add a 'generation' argument the owner validation
Validating a node's owner properly requires the generation. But don't worry about actually doing it properly yet, just update the API first.
-rw-r--r--lib/btrfs/btrfstree/readnode.go2
-rw-r--r--lib/btrfs/btrfstree/types_node.go4
-rw-r--r--lib/btrfsutil/old_rebuilt_forrest.go2
-rw-r--r--lib/btrfsutil/rebuilt_readitem.go2
4 files changed, 5 insertions, 5 deletions
diff --git a/lib/btrfs/btrfstree/readnode.go b/lib/btrfs/btrfstree/readnode.go
index c2e3b0f..7cc42f5 100644
--- a/lib/btrfs/btrfstree/readnode.go
+++ b/lib/btrfs/btrfstree/readnode.go
@@ -41,7 +41,7 @@ func FSReadNode(
}
var treeParents []btrfsprim.ObjID
- checkOwner := func(owner btrfsprim.ObjID) error {
+ checkOwner := func(owner btrfsprim.ObjID, _ btrfsprim.Generation) error {
exp := path.Node(-1).FromTree
for {
if owner == exp {
diff --git a/lib/btrfs/btrfstree/types_node.go b/lib/btrfs/btrfstree/types_node.go
index 622f23c..bfcbbf4 100644
--- a/lib/btrfs/btrfstree/types_node.go
+++ b/lib/btrfs/btrfstree/types_node.go
@@ -417,7 +417,7 @@ type NodeExpectations struct {
// Things knowable from the parent.
Level containers.Optional[uint8]
Generation containers.Optional[btrfsprim.Generation]
- Owner func(btrfsprim.ObjID) error
+ Owner func(btrfsprim.ObjID, btrfsprim.Generation) error
MinItem containers.Optional[btrfsprim.Key]
// Things knowable from the structure of the tree.
MaxItem containers.Optional[btrfsprim.Key]
@@ -547,7 +547,7 @@ func (exp NodeExpectations) Check(node *Node) error {
exp.Generation.Val, node.Head.Generation))
}
if exp.Owner != nil {
- if err := exp.Owner(node.Head.Owner); err != nil {
+ if err := exp.Owner(node.Head.Owner, node.Head.Generation); err != nil {
errs = append(errs, err)
}
}
diff --git a/lib/btrfsutil/old_rebuilt_forrest.go b/lib/btrfsutil/old_rebuilt_forrest.go
index bb5ab59..a3fc0e2 100644
--- a/lib/btrfsutil/old_rebuilt_forrest.go
+++ b/lib/btrfsutil/old_rebuilt_forrest.go
@@ -240,7 +240,7 @@ func (bt *OldRebuiltForrest) readNode(nodeInfo nodeInfo) *btrfstree.Node {
LAddr: containers.OptionalValue(nodeInfo.LAddr),
Level: containers.OptionalValue(nodeInfo.Level),
Generation: containers.OptionalValue(nodeInfo.Generation),
- Owner: func(treeID btrfsprim.ObjID) error {
+ Owner: func(treeID btrfsprim.ObjID, _ btrfsprim.Generation) error {
if treeID != nodeInfo.Owner {
return fmt.Errorf("expected owner=%v but claims to have owner=%v",
nodeInfo.Owner, treeID)
diff --git a/lib/btrfsutil/rebuilt_readitem.go b/lib/btrfsutil/rebuilt_readitem.go
index ff919f0..5de6864 100644
--- a/lib/btrfsutil/rebuilt_readitem.go
+++ b/lib/btrfsutil/rebuilt_readitem.go
@@ -42,7 +42,7 @@ func (ts *RebuiltForrest) readNode(ctx context.Context, laddr btrfsvol.LogicalAd
LAddr: containers.OptionalValue(laddr),
Level: containers.OptionalValue(graphInfo.Level),
Generation: containers.OptionalValue(graphInfo.Generation),
- Owner: func(treeID btrfsprim.ObjID) error {
+ Owner: func(treeID btrfsprim.ObjID, _ btrfsprim.Generation) error {
if treeID != graphInfo.Owner {
return fmt.Errorf("expected owner=%v but claims to have owner=%v",
graphInfo.Owner, treeID)