Skip to content

Commit 38e3ca2

Browse files
author
Kent Overstreet
committed
bcachefs: btree_types bitmask cleanups
Make things more consistent and ensure that we're using u64 bitfields - key types and btree ids are already around 32 bits. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
1 parent 174722d commit 38e3ca2

File tree

3 files changed

+35
-31
lines changed

3 files changed

+35
-31
lines changed

fs/bcachefs/btree_gc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ static int bch2_gc_mark_key(struct btree_trans *trans, enum btree_id btree_id,
635635
static int bch2_gc_btree(struct btree_trans *trans, enum btree_id btree, bool initial)
636636
{
637637
struct bch_fs *c = trans->c;
638-
unsigned target_depth = btree_node_type_needs_gc(__btree_node_type(0, btree)) ? 0 : 1;
638+
unsigned target_depth = btree_node_type_has_triggers(__btree_node_type(0, btree)) ? 0 : 1;
639639
int ret = 0;
640640

641641
/* We need to make sure every leaf node is readable before going RW */

fs/bcachefs/btree_trans_commit.c

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

485481
static 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_
524520
static 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)
604598
static 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;

fs/bcachefs/btree_types.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -754,9 +754,19 @@ const char *bch2_btree_node_type_str(enum btree_node_type);
754754
(BTREE_NODE_TYPE_HAS_TRANS_TRIGGERS| \
755755
BTREE_NODE_TYPE_HAS_ATOMIC_TRIGGERS)
756756

757-
static inline bool btree_node_type_needs_gc(enum btree_node_type type)
757+
static inline bool btree_node_type_has_trans_triggers(enum btree_node_type type)
758758
{
759-
return BTREE_NODE_TYPE_HAS_TRIGGERS & BIT_ULL(type);
759+
return BIT_ULL(type) & BTREE_NODE_TYPE_HAS_TRANS_TRIGGERS;
760+
}
761+
762+
static inline bool btree_node_type_has_atomic_triggers(enum btree_node_type type)
763+
{
764+
return BIT_ULL(type) & BTREE_NODE_TYPE_HAS_ATOMIC_TRIGGERS;
765+
}
766+
767+
static inline bool btree_node_type_has_triggers(enum btree_node_type type)
768+
{
769+
return BIT_ULL(type) & BTREE_NODE_TYPE_HAS_TRIGGERS;
760770
}
761771

762772
static inline bool btree_node_type_is_extents(enum btree_node_type type)

0 commit comments

Comments
 (0)