bcachefs: Add an option for btree node mem ptr optimization

bch2_btree_node_ptr_v2 has a field for stashing a pointer to the in
memory btree node; this is safe because we clear this field when reading
in nodes from disk and we never free in memory btree nodes - but, we
have bug reports that indicate something might be faulty with this
optimization, so let's add an option for it.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
Kent Overstreet 2021-07-26 15:52:41 -04:00 committed by Kent Overstreet
parent 2b4e4b8cfa
commit a32b9573c7
2 changed files with 15 additions and 6 deletions

View File

@ -767,9 +767,11 @@ struct btree *bch2_btree_node_get(struct btree_trans *trans, struct btree_iter *
EBUG_ON(level >= BTREE_MAX_DEPTH);
b = btree_node_mem_ptr(k);
if (b)
goto lock_node;
if (c->opts.btree_node_mem_ptr_optimization) {
b = btree_node_mem_ptr(k);
if (b)
goto lock_node;
}
retry:
b = btree_cache_find(bc, k);
if (unlikely(!b)) {
@ -902,9 +904,11 @@ struct btree *bch2_btree_node_get_noiter(struct bch_fs *c,
EBUG_ON(level >= BTREE_MAX_DEPTH);
b = btree_node_mem_ptr(k);
if (b)
goto lock_node;
if (c->opts.btree_node_mem_ptr_optimization) {
b = btree_node_mem_ptr(k);
if (b)
goto lock_node;
}
retry:
b = btree_cache_find(bc, k);
if (unlikely(!b)) {

View File

@ -178,6 +178,11 @@ enum opt_type {
OPT_BOOL(), \
BCH_SB_INODES_USE_KEY_CACHE, true, \
NULL, "Use the btree key cache for the inodes btree") \
x(btree_node_mem_ptr_optimization, u8, \
OPT_MOUNT|OPT_RUNTIME, \
OPT_BOOL(), \
NO_SB_OPT, true, \
NULL, "Stash pointer to in memory btree node in btree ptr")\
x(gc_reserve_percent, u8, \
OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \
OPT_UINT(5, 21), \