summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-05 00:47:18 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-01-05 19:48:18 -0700
commit3b385f26973e45b4c2e2f3ebf9d52ab0131cff5e (patch)
tree0c003455bf0795a04e4fb198d2e85e2c7b63ffb3 /lib
parentaf5f03de8052d144027e7ba99000e3196056adce (diff)
rebuildnodes/btrees: Switch from a sync.Mutex to a sync.RWMutex
Diffstat (limited to 'lib')
-rw-r--r--lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/tree.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/tree.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/tree.go
index cd05911..c381274 100644
--- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/tree.go
+++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/btrees/tree.go
@@ -32,7 +32,7 @@ type RebuiltTree struct {
forrest *RebuiltForrest
// mutable
- mu sync.Mutex
+ mu sync.RWMutex
Roots containers.Set[btrfsvol.LogicalAddr]
// There are 3 more mutable "members" that are protected by
// `mu`; but they live in a shared LRUcache. They are all
@@ -171,8 +171,8 @@ func (s itemStats) String() string {
func (tree *RebuiltTree) items(ctx context.Context, cache *containers.LRUCache[btrfsprim.ObjID, *itemIndex],
leafFn func(roots containers.Set[btrfsvol.LogicalAddr]) bool,
) *containers.SortedMap[btrfsprim.Key, keyio.ItemPtr] {
- tree.mu.Lock()
- defer tree.mu.Unlock()
+ tree.mu.RLock()
+ defer tree.mu.RUnlock()
return cache.GetOrElse(tree.ID, func() *itemIndex {
var leafs []btrfsvol.LogicalAddr
@@ -344,8 +344,8 @@ func (tree *RebuiltTree) LeafToRoots(ctx context.Context, leaf btrfsvol.LogicalA
panic(fmt.Errorf("should not happen: (tree=%v).LeafToRoots(leaf=%v): not a leaf",
tree.ID, leaf))
}
- tree.mu.Lock()
- defer tree.mu.Unlock()
+ tree.mu.RLock()
+ defer tree.mu.RUnlock()
ret := make(containers.Set[btrfsvol.LogicalAddr])
for root := range tree.leafToRoots(ctx)[leaf] {
if tree.Roots.Has(root) {