mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-17 18:36:00 +00:00
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:
parent
2b4e4b8cfa
commit
a32b9573c7
@ -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)) {
|
||||
|
@ -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), \
|
||||
|
Loading…
x
Reference in New Issue
Block a user