Commit 789566da authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: bch2_btree_key_cache_drop() now evicts

As part of improving btree key cache coherency, the bkey_cached.valid
flag is going away.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent febc33cb
...@@ -792,6 +792,7 @@ void bch2_btree_key_cache_drop(struct btree_trans *trans, ...@@ -792,6 +792,7 @@ void bch2_btree_key_cache_drop(struct btree_trans *trans,
struct btree_path *path) struct btree_path *path)
{ {
struct bch_fs *c = trans->c; struct bch_fs *c = trans->c;
struct btree_key_cache *bc = &c->btree_key_cache;
struct bkey_cached *ck = (void *) path->l[0].b; struct bkey_cached *ck = (void *) path->l[0].b;
BUG_ON(!ck->valid); BUG_ON(!ck->valid);
...@@ -806,7 +807,11 @@ void bch2_btree_key_cache_drop(struct btree_trans *trans, ...@@ -806,7 +807,11 @@ void bch2_btree_key_cache_drop(struct btree_trans *trans,
bch2_journal_pin_drop(&c->journal, &ck->journal); bch2_journal_pin_drop(&c->journal, &ck->journal);
} }
ck->valid = false; bkey_cached_evict(bc, ck);
bkey_cached_free_fast(bc, ck);
mark_btree_node_locked(trans, path, 0, BTREE_NODE_UNLOCKED);
btree_path_set_dirty(path, BTREE_ITER_NEED_TRAVERSE);
} }
static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink, static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink,
......
...@@ -137,7 +137,8 @@ static inline void bch2_trans_unlock_write(struct btree_trans *trans) ...@@ -137,7 +137,8 @@ static inline void bch2_trans_unlock_write(struct btree_trans *trans)
{ {
if (likely(trans->write_locked)) { if (likely(trans->write_locked)) {
trans_for_each_update(trans, i) trans_for_each_update(trans, i)
if (!same_leaf_as_prev(trans, i)) if (btree_node_locked_type(trans->paths + i->path, i->level) ==
BTREE_NODE_WRITE_LOCKED)
bch2_btree_node_unlock_write_inlined(trans, bch2_btree_node_unlock_write_inlined(trans,
trans->paths + i->path, insert_l(trans, i)->b); trans->paths + i->path, insert_l(trans, i)->b);
trans->write_locked = false; trans->write_locked = false;
...@@ -777,14 +778,12 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags, ...@@ -777,14 +778,12 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags,
trans_for_each_update(trans, i) { trans_for_each_update(trans, i) {
struct btree_path *path = trans->paths + i->path; struct btree_path *path = trans->paths + i->path;
if (!i->cached) { if (!i->cached)
bch2_btree_insert_key_leaf(trans, path, i->k, trans->journal_res.seq); bch2_btree_insert_key_leaf(trans, path, i->k, trans->journal_res.seq);
} else if (!i->key_cache_already_flushed) else if (!i->key_cache_already_flushed)
bch2_btree_insert_key_cached(trans, flags, i); bch2_btree_insert_key_cached(trans, flags, i);
else { else
bch2_btree_key_cache_drop(trans, path); bch2_btree_key_cache_drop(trans, path);
btree_path_set_dirty(path, BTREE_ITER_NEED_TRAVERSE);
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment