aboutsummaryrefslogtreecommitdiff
path: root/tools/perf/util/scripting-engines
diff options
context:
space:
mode:
authorDennis Yang <[email protected]>2017-12-12 18:21:40 +0800
committerMike Snitzer <[email protected]>2018-01-17 09:07:54 -0500
commit490ae017f54e55bde382d45ea24bddfb6d1a0aaf (patch)
tree3dba811f0ada177a4d636aba95e5f2b2f509f0a7 /tools/perf/util/scripting-engines
parent1291a0d5049dbc06baaaf66a9ff3f53db493b19b (diff)
dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6
For btree removal, there is a corner case that a single thread could takes 6 locks which is more than THIN_MAX_CONCURRENT_LOCKS(5) and leads to deadlock. A btree removal might eventually call rebalance_children()->rebalance3() to rebalance entries of three neighbor child nodes when shadow_spine has already acquired two write locks. In rebalance3(), it tries to shadow and acquire the write locks of all three child nodes. However, shadowing a child node requires acquiring a read lock of the original child node and a write lock of the new block. Although the read lock will be released after block shadowing, shadowing the third child node in rebalance3() could still take the sixth lock. (2 write locks for shadow_spine + 2 write locks for the first two child nodes's shadow + 1 write lock for the last child node's shadow + 1 read lock for the last child node) Cc: [email protected] Signed-off-by: Dennis Yang <[email protected]> Acked-by: Joe Thornber <[email protected]> Signed-off-by: Mike Snitzer <[email protected]>
Diffstat (limited to 'tools/perf/util/scripting-engines')
0 files changed, 0 insertions, 0 deletions