From a40e81b3b629198a4c30ad18f7544c7d513da287 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 28 Aug 2022 11:44:08 -0600 Subject: btrfs: Rework TreePath to allow correctly checking the owner tree --- lib/btrfs/types_node.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/btrfs/types_node.go') 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) -- cgit v1.2.3-2-g168b