@@ -457,34 +457,36 @@ static int run_one_mem_trigger(struct btree_trans *trans,
457457 struct btree_insert_entry * i ,
458458 unsigned flags )
459459{
460- struct bkey_s_c old = { & i -> old_k , i -> old_v };
461- struct bkey_i * new = i -> k ;
462- const struct bkey_ops * old_ops = bch2_bkey_type_ops (old .k -> type );
463- const struct bkey_ops * new_ops = bch2_bkey_type_ops (i -> k -> k .type );
464- int ret ;
465-
466460 verify_update_old_key (trans , i );
467461
468462 if (unlikely (flags & BTREE_TRIGGER_norun ))
469463 return 0 ;
470464
471- if (old_ops -> trigger == new_ops -> trigger ) {
472- ret = bch2_key_trigger (trans , i -> btree_id , i -> level ,
465+ struct bkey_s_c old = { & i -> old_k , i -> old_v };
466+ struct bkey_i * new = i -> k ;
467+ const struct bkey_ops * old_ops = bch2_bkey_type_ops (old .k -> type );
468+ const struct bkey_ops * new_ops = bch2_bkey_type_ops (i -> k -> k .type );
469+
470+ if (old_ops -> trigger == new_ops -> trigger )
471+ return bch2_key_trigger (trans , i -> btree_id , i -> level ,
473472 old , bkey_i_to_s (new ),
474473 BTREE_TRIGGER_insert |BTREE_TRIGGER_overwrite |flags );
475- } else {
476- ret = bch2_key_trigger_new (trans , i -> btree_id , i -> level ,
474+ else
475+ return bch2_key_trigger_new (trans , i -> btree_id , i -> level ,
477476 bkey_i_to_s (new ), flags ) ?:
478- bch2_key_trigger_old (trans , i -> btree_id , i -> level ,
477+ bch2_key_trigger_old (trans , i -> btree_id , i -> level ,
479478 old , flags );
480- }
481-
482- return ret ;
483479}
484480
485481static int run_one_trans_trigger (struct btree_trans * trans , struct btree_insert_entry * i ,
486482 bool overwrite )
487483{
484+ verify_update_old_key (trans , i );
485+
486+ if ((i -> flags & BTREE_TRIGGER_norun ) ||
487+ !btree_node_type_has_trans_triggers (i -> bkey_type ))
488+ return 0 ;
489+
488490 /*
489491 * Transactional triggers create new btree_insert_entries, so we can't
490492 * pass them a pointer to a btree_insert_entry, that memory is going to
@@ -496,12 +498,6 @@ static int run_one_trans_trigger(struct btree_trans *trans, struct btree_insert_
496498 const struct bkey_ops * new_ops = bch2_bkey_type_ops (i -> k -> k .type );
497499 unsigned flags = i -> flags |BTREE_TRIGGER_transactional ;
498500
499- verify_update_old_key (trans , i );
500-
501- if ((i -> flags & BTREE_TRIGGER_norun ) ||
502- !(BTREE_NODE_TYPE_HAS_TRANS_TRIGGERS & (1U << i -> bkey_type )))
503- return 0 ;
504-
505501 if (!i -> insert_trigger_run &&
506502 !i -> overwrite_trigger_run &&
507503 old_ops -> trigger == new_ops -> trigger ) {
@@ -524,10 +520,8 @@ static int run_one_trans_trigger(struct btree_trans *trans, struct btree_insert_
524520static int run_btree_triggers (struct btree_trans * trans , enum btree_id btree_id ,
525521 unsigned btree_id_start )
526522{
527- bool trans_trigger_run ;
528- int ret , overwrite ;
529-
530- for (overwrite = 1 ; overwrite >= 0 ; -- overwrite ) {
523+ for (int overwrite = 1 ; overwrite >= 0 ; -- overwrite ) {
524+ bool trans_trigger_run ;
531525
532526 /*
533527 * Running triggers will append more updates to the list of updates as
@@ -542,7 +536,7 @@ static int run_btree_triggers(struct btree_trans *trans, enum btree_id btree_id,
542536 if (trans -> updates [i ].btree_id != btree_id )
543537 continue ;
544538
545- ret = run_one_trans_trigger (trans , trans -> updates + i , overwrite );
539+ int ret = run_one_trans_trigger (trans , trans -> updates + i , overwrite );
546540 if (ret < 0 )
547541 return ret ;
548542 if (ret )
@@ -595,7 +589,7 @@ static int bch2_trans_commit_run_triggers(struct btree_trans *trans)
595589#ifdef CONFIG_BCACHEFS_DEBUG
596590 trans_for_each_update (trans , i )
597591 BUG_ON (!(i -> flags & BTREE_TRIGGER_norun ) &&
598- ( BTREE_NODE_TYPE_HAS_TRANS_TRIGGERS & ( 1U << i -> bkey_type ) ) &&
592+ btree_node_type_has_trans_triggers ( i -> bkey_type ) &&
599593 (!i -> insert_trigger_run || !i -> overwrite_trigger_run ));
600594#endif
601595 return 0 ;
@@ -604,7 +598,7 @@ static int bch2_trans_commit_run_triggers(struct btree_trans *trans)
604598static noinline int bch2_trans_commit_run_gc_triggers (struct btree_trans * trans )
605599{
606600 trans_for_each_update (trans , i )
607- if (btree_node_type_needs_gc ( __btree_node_type ( i -> level , i -> btree_id ) ) &&
601+ if (btree_node_type_has_triggers ( i -> bkey_type ) &&
608602 gc_visited (trans -> c , gc_pos_btree_node (insert_l (trans , i )-> b ))) {
609603 int ret = run_one_mem_trigger (trans , i , i -> flags |BTREE_TRIGGER_gc );
610604 if (ret )
@@ -728,7 +722,7 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags,
728722 }
729723
730724 trans_for_each_update (trans , i )
731- if (BTREE_NODE_TYPE_HAS_ATOMIC_TRIGGERS & ( 1U << i -> bkey_type )) {
725+ if (btree_node_type_has_atomic_triggers ( i -> bkey_type )) {
732726 ret = run_one_mem_trigger (trans , i , BTREE_TRIGGER_atomic |i -> flags );
733727 if (ret )
734728 goto fatal_err ;
0 commit comments