diff options
Diffstat (limited to 'fs/bcachefs/btree_update_leaf.c')
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index 48d3be517471..2633a5452b13 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -542,20 +542,22 @@ static inline int do_btree_insert_at(struct btree_trans *trans, btree_trans_lock_write(c, trans); - trans_for_each_update_iter(trans, i) { - if (i->deferred || - !btree_node_type_needs_gc(i->iter->btree_id)) - continue; + if (likely(!(trans->flags & BTREE_INSERT_NOMARK))) { + trans_for_each_update_iter(trans, i) { + if (i->deferred || + !btree_node_type_needs_gc(i->iter->btree_id)) + continue; - if (!fs_usage) { - percpu_down_read(&c->mark_lock); - fs_usage = bch2_fs_usage_scratch_get(c); - } + if (!fs_usage) { + percpu_down_read(&c->mark_lock); + fs_usage = bch2_fs_usage_scratch_get(c); + } - if (!bch2_bkey_replicas_marked_locked(c, - bkey_i_to_s_c(i->k), true)) { - ret = BTREE_INSERT_NEED_MARK_REPLICAS; - goto out; + if (!bch2_bkey_replicas_marked_locked(c, + bkey_i_to_s_c(i->k), true)) { + ret = BTREE_INSERT_NEED_MARK_REPLICAS; + goto out; + } } } @@ -602,16 +604,18 @@ static inline int do_btree_insert_at(struct btree_trans *trans, linked->flags |= BTREE_ITER_NOUNLOCK; } - trans_for_each_update_iter(trans, i) - bch2_mark_update(trans, i, fs_usage, 0); - if (fs_usage) - bch2_trans_fs_usage_apply(trans, fs_usage); - - if (unlikely(c->gc_pos.phase)) { + if (likely(!(trans->flags & BTREE_INSERT_NOMARK))) { trans_for_each_update_iter(trans, i) - if (gc_visited(c, gc_pos_btree_node(i->iter->l[0].b))) - bch2_mark_update(trans, i, NULL, - BCH_BUCKET_MARK_GC); + bch2_mark_update(trans, i, fs_usage, 0); + if (fs_usage) + bch2_trans_fs_usage_apply(trans, fs_usage); + + if (unlikely(c->gc_pos.phase)) { + trans_for_each_update_iter(trans, i) + if (gc_visited(c, gc_pos_btree_node(i->iter->l[0].b))) + bch2_mark_update(trans, i, NULL, + BCH_BUCKET_MARK_GC); + } } trans_for_each_update(trans, i) |