diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-08-28 11:44:08 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-08-28 14:40:22 -0600 |
commit | a40e81b3b629198a4c30ad18f7544c7d513da287 (patch) | |
tree | 8291e76d36821652f98d4110f3abb33ceb1de7b1 /lib/btrfs/types_node.go | |
parent | 732394dfe160705f80c136aa8696d180165b485c (diff) |
btrfs: Rework TreePath to allow correctly checking the owner tree
Diffstat (limited to 'lib/btrfs/types_node.go')
-rw-r--r-- | lib/btrfs/types_node.go | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/btrfs/types_node.go b/lib/btrfs/types_node.go index e7be341..7d66f60 100644 --- a/lib/btrfs/types_node.go +++ b/lib/btrfs/types_node.go @@ -16,6 +16,7 @@ import ( "git.lukeshu.com/btrfs-progs-ng/lib/containers" "git.lukeshu.com/btrfs-progs-ng/lib/diskio" "git.lukeshu.com/btrfs-progs-ng/lib/fmtutil" + "git.lukeshu.com/btrfs-progs-ng/lib/slices" ) type NodeFlags uint64 @@ -384,7 +385,7 @@ type NodeExpectations struct { // Things knowable from the parent. Level containers.Optional[uint8] MaxGeneration containers.Optional[Generation] - Owner containers.Optional[ObjID] + Owner []ObjID } func ReadNode[Addr ~int64](fs diskio.File[Addr], sb Superblock, addr Addr, exp NodeExpectations) (*diskio.Ref[Addr, Node], error) { @@ -435,9 +436,9 @@ func ReadNode[Addr ~int64](fs diskio.File[Addr], sb Superblock, addr Addr, exp N return nodeRef, fmt.Errorf("btrfs.ReadNode: node@%v: expected generation<=%v but claims to be generation=%v", addr, exp.MaxGeneration.Val, nodeRef.Data.Head.Generation) } - if exp.Owner.OK && nodeRef.Data.Head.Owner != exp.Owner.Val { - return nodeRef, fmt.Errorf("btrfs.ReadNode: node@%v: expected owner=%v but claims to have owner=%v", - addr, exp.Owner.Val, nodeRef.Data.Head.Owner) + if len(exp.Owner) > 0 && !slices.Contains(nodeRef.Data.Head.Owner, exp.Owner) { + return nodeRef, fmt.Errorf("btrfs.ReadNode: node@%v: expected owner in %v but claims to have owner=%v", + addr, exp.Owner, nodeRef.Data.Head.Owner) } // parse (main) |