Lines Matching refs:trans
42 static inline void btree_path_cached_set(struct btree_trans *trans, struct btree_path *path, in btree_path_cached_set() argument
48 mark_btree_node_locked(trans, path, 0, lock_held); in btree_path_cached_set()
119 static void bkey_cached_free(struct btree_trans *trans, in bkey_cached_free() argument
127 EBUG_ON(!trans->srcu_held); in bkey_cached_free()
149 bkey_cached_alloc(struct btree_trans *trans, struct btree_path *path, unsigned key_u64s) in bkey_cached_alloc() argument
151 struct bch_fs *c = trans->c; in bkey_cached_alloc()
162 ck = allocate_dropping_locks(trans, ret, in bkey_cached_alloc()
209 static int btree_key_cache_create(struct btree_trans *trans, in btree_key_cache_create() argument
214 struct bch_fs *c = trans->c; in btree_key_cache_create()
231 struct bkey_cached *ck = bkey_cached_alloc(trans, ck_path, key_u64s); in btree_key_cache_create()
254 struct bkey_i *new_k = allocate_dropping_locks(trans, ret, in btree_key_cache_create()
257 bch_err(trans->c, "error allocating memory for key cache key, btree %s u64s %u", in btree_key_cache_create()
272 ret = bch2_btree_node_lock_write(trans, path, &path_l(path)->b->c); in btree_key_cache_create()
278 bch2_btree_node_unlock_write(trans, path, path_l(path)->b); in btree_key_cache_create()
289 btree_path_cached_set(trans, ck_path, ck, (enum btree_node_locked_type) lock_want); in btree_key_cache_create()
293 bkey_cached_free(trans, bc, ck); in btree_key_cache_create()
299 static noinline_for_stack void do_trace_key_cache_fill(struct btree_trans *trans, in do_trace_key_cache_fill() argument
307 bch2_bkey_val_to_text(&buf, trans->c, k); in do_trace_key_cache_fill()
308 trace_key_cache_fill(trans, buf.buf); in do_trace_key_cache_fill()
312 static noinline int btree_key_cache_fill(struct btree_trans *trans, in btree_key_cache_fill() argument
316 struct btree_path *ck_path = trans->paths + ck_path_idx; in btree_key_cache_fill()
323 struct bch_fs *c = trans->c; in btree_key_cache_fill()
328 bch2_trans_iter_init(trans, &iter, ck_path->btree_id, ck_path->pos, in btree_key_cache_fill()
333 k = bch2_btree_iter_peek_slot(trans, &iter); in btree_key_cache_fill()
339 ck_path = trans->paths + ck_path_idx; in btree_key_cache_fill()
344 ret = btree_key_cache_create(trans, btree_iter_path(trans, &iter), ck_path, k); in btree_key_cache_fill()
349 do_trace_key_cache_fill(trans, ck_path, k); in btree_key_cache_fill()
352 bch2_set_btree_iter_dontneed(trans, &iter); in btree_key_cache_fill()
354 bch2_trans_iter_exit(trans, &iter); in btree_key_cache_fill()
358 static inline int btree_path_traverse_cached_fast(struct btree_trans *trans, in btree_path_traverse_cached_fast() argument
361 struct bch_fs *c = trans->c; in btree_path_traverse_cached_fast()
363 struct btree_path *path = trans->paths + path_idx; in btree_path_traverse_cached_fast()
371 int ret = btree_node_lock(trans, path, (void *) ck, 0, lock_want, _THIS_IP_); in btree_path_traverse_cached_fast()
384 btree_path_cached_set(trans, path, ck, (enum btree_node_locked_type) lock_want); in btree_path_traverse_cached_fast()
389 int bch2_btree_path_traverse_cached(struct btree_trans *trans, in bch2_btree_path_traverse_cached() argument
393 EBUG_ON(trans->paths[path_idx].level); in bch2_btree_path_traverse_cached()
397 ret = btree_path_traverse_cached_fast(trans, path_idx); in bch2_btree_path_traverse_cached()
399 ret = btree_key_cache_fill(trans, path_idx, flags); in bch2_btree_path_traverse_cached()
402 struct btree_path *path = trans->paths + path_idx; in bch2_btree_path_traverse_cached()
407 btree_node_unlock(trans, path, 0); in bch2_btree_path_traverse_cached()
418 static int btree_key_cache_flush_pos(struct btree_trans *trans, in btree_key_cache_flush_pos() argument
424 struct bch_fs *c = trans->c; in btree_key_cache_flush_pos()
430 bch2_trans_iter_init(trans, &b_iter, key.btree_id, key.pos, in btree_key_cache_flush_pos()
434 bch2_trans_iter_init(trans, &c_iter, key.btree_id, key.pos, in btree_key_cache_flush_pos()
439 ret = bch2_btree_iter_traverse(trans, &c_iter); in btree_key_cache_flush_pos()
443 ck = (void *) btree_iter_path(trans, &c_iter)->l[0].b; in btree_key_cache_flush_pos()
456 trans->journal_res.seq = ck->journal.seq; in btree_key_cache_flush_pos()
471 struct bkey_s_c btree_k = bch2_btree_iter_peek_slot(trans, &b_iter); in btree_key_cache_flush_pos()
479 ret = bch2_trans_update(trans, &b_iter, ck->k, in btree_key_cache_flush_pos()
483 bch2_trans_commit(trans, NULL, NULL, in btree_key_cache_flush_pos()
498 struct btree_path *path = btree_iter_path(trans, &c_iter); in btree_key_cache_flush_pos()
510 trans_for_each_path(trans, path2, i) in btree_key_cache_flush_pos()
512 __bch2_btree_path_unlock(trans, path2); in btree_key_cache_flush_pos()
514 bch2_btree_node_lock_write_nofail(trans, path, &ck->c); in btree_key_cache_flush_pos()
523 bkey_cached_free(trans, &c->btree_key_cache, ck); in btree_key_cache_flush_pos()
530 bch2_trans_iter_exit(trans, &b_iter); in btree_key_cache_flush_pos()
531 bch2_trans_iter_exit(trans, &c_iter); in btree_key_cache_flush_pos()
542 struct btree_trans *trans = bch2_trans_get(c); in bch2_btree_key_cache_journal_flush() local
546 btree_node_lock_nopath_nofail(trans, &ck->c, SIX_LOCK_read); in bch2_btree_key_cache_journal_flush()
563 ret = lockrestart_do(trans, in bch2_btree_key_cache_journal_flush()
564 btree_key_cache_flush_pos(trans, key, seq, in bch2_btree_key_cache_journal_flush()
569 bch2_trans_put(trans); in bch2_btree_key_cache_journal_flush()
573 bool bch2_btree_insert_key_cached(struct btree_trans *trans, in bch2_btree_insert_key_cached() argument
577 struct bch_fs *c = trans->c; in bch2_btree_insert_key_cached()
578 struct bkey_cached *ck = (void *) (trans->paths + insert_entry->path)->l[0].b; in bch2_btree_insert_key_cached()
609 ck->seq = trans->journal_res.seq; in bch2_btree_insert_key_cached()
611 bch2_journal_pin_add(&c->journal, trans->journal_res.seq, in bch2_btree_insert_key_cached()
619 void bch2_btree_key_cache_drop(struct btree_trans *trans, in bch2_btree_key_cache_drop() argument
622 struct bch_fs *c = trans->c; in bch2_btree_key_cache_drop()
637 bkey_cached_free(trans, bc, ck); in bch2_btree_key_cache_drop()
639 mark_btree_node_locked(trans, path, 0, BTREE_NODE_UNLOCKED); in bch2_btree_key_cache_drop()
643 trans_for_each_path(trans, path2, i) in bch2_btree_key_cache_drop()
653 __bch2_btree_path_unlock(trans, path2); in bch2_btree_key_cache_drop()
655 btree_path_set_dirty(trans, path2, BTREE_ITER_NEED_TRAVERSE); in bch2_btree_key_cache_drop()
658 bch2_trans_verify_locks(trans); in bch2_btree_key_cache_drop()