diff options
Diffstat (limited to 'fs/bcachefs/btree_iter.c')
-rw-r--r-- | fs/bcachefs/btree_iter.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index c833aa2f235f..794a8a4f0c2c 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2847,8 +2847,9 @@ void __bch2_trans_init(struct btree_trans *trans, struct bch_fs *c, const char * trans->c = c; trans->fn = fn; trans->last_begin_time = ktime_get_ns(); - trans->task = current; trans->fn_idx = bch2_trans_get_fn_idx(trans, c, fn); + trans->locking_wait.task = current; + closure_init_stack(&trans->ref); bch2_trans_alloc_paths(trans, c); @@ -2869,7 +2870,7 @@ void __bch2_trans_init(struct btree_trans *trans, struct bch_fs *c, const char * mutex_lock(&c->btree_trans_lock); list_for_each_entry(pos, &c->btree_trans_list, list) { - if (trans->task->pid < pos->task->pid) { + if (trans->locking_wait.task->pid < pos->locking_wait.task->pid) { list_add_tail(&trans->list, &pos->list); goto list_add_done; } @@ -2910,6 +2911,8 @@ void bch2_trans_exit(struct btree_trans *trans) bch2_trans_unlock(trans); + closure_sync(&trans->ref); + if (s) s->max_mem = max(s->max_mem, trans->mem_max); @@ -2985,7 +2988,7 @@ void bch2_btree_trans_to_text(struct printbuf *out, struct btree_trans *trans) static char lock_types[] = { 'r', 'i', 'w' }; unsigned l; - prt_printf(out, "%i %s\n", trans->task->pid, trans->fn); + prt_printf(out, "%i %s\n", trans->locking_wait.task->pid, trans->fn); trans_for_each_path(trans, path) { if (!path->nodes_locked) @@ -3017,7 +3020,7 @@ void bch2_btree_trans_to_text(struct printbuf *out, struct btree_trans *trans) trans->locking_path_idx, path->cached ? 'c' : 'b', trans->locking_level, - lock_types[trans->locking_lock_type], + lock_types[trans->locking_wait.lock_want], bch2_btree_ids[trans->locking_btree_id]); bch2_bpos_to_text(out, trans->locking_pos); |