]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_update_leaf.c
Update bcachefs sources to 5e392aed7a bcachefs: Kill bch2_alloc_write()
[bcachefs-tools-debian] / libbcachefs / btree_update_leaf.c
index 6f4ee55ebffe0f5214a19a68d5b74de0e638052b..a0480c63dd818f19be05118028c275d6b70a1312 100644 (file)
@@ -457,7 +457,7 @@ static int run_one_mem_trigger(struct btree_trans *trans,
 }
 
 static int run_one_trans_trigger(struct btree_trans *trans, struct btree_insert_entry *i,
-                          bool overwrite)
+                                bool overwrite)
 {
        /*
         * Transactional triggers create new btree_insert_entries, so we can't
@@ -466,42 +466,31 @@ static int run_one_trans_trigger(struct btree_trans *trans, struct btree_insert_
         */
        struct bkey old_k = i->old_k;
        struct bkey_s_c old = { &old_k, i->old_v };
-       int ret = 0;
 
        if ((i->flags & BTREE_TRIGGER_NORUN) ||
            !(BTREE_NODE_TYPE_HAS_TRANS_TRIGGERS & (1U << i->bkey_type)))
                return 0;
 
-       if (!overwrite) {
-               if (i->insert_trigger_run)
-                       return 0;
-
-               BUG_ON(i->overwrite_trigger_run);
-               i->insert_trigger_run = true;
-       } else {
-               if (i->overwrite_trigger_run)
-                       return 0;
-
-               BUG_ON(!i->insert_trigger_run);
-               i->overwrite_trigger_run = true;
-       }
-
-       if (overwrite) {
-               ret = bch2_trans_mark_old(trans, old, i->flags);
-       } else if (bch2_bkey_ops[old.k->type].trans_trigger ==
-                  bch2_bkey_ops[i->k->k.type].trans_trigger &&
+       if (!i->insert_trigger_run &&
+           !i->overwrite_trigger_run &&
+           bch2_bkey_ops[old.k->type].trans_trigger ==
+           bch2_bkey_ops[i->k->k.type].trans_trigger &&
            ((1U << old.k->type) & BTREE_TRIGGER_WANTS_OLD_AND_NEW)) {
                i->overwrite_trigger_run = true;
-               ret = bch2_trans_mark_key(trans, old, i->k,
-                               BTREE_TRIGGER_INSERT|BTREE_TRIGGER_OVERWRITE|i->flags);
+               i->insert_trigger_run = true;
+               return bch2_trans_mark_key(trans, old, i->k,
+                                          BTREE_TRIGGER_INSERT|
+                                          BTREE_TRIGGER_OVERWRITE|
+                                          i->flags) ?: 1;
+       } else if (overwrite && !i->overwrite_trigger_run) {
+               i->overwrite_trigger_run = true;
+               return bch2_trans_mark_old(trans, old, i->flags) ?: 1;
+       } else if (!i->insert_trigger_run) {
+               i->insert_trigger_run = true;
+               return bch2_trans_mark_new(trans, i->k, i->flags) ?: 1;
        } else {
-               ret = bch2_trans_mark_new(trans, i->k, i->flags);
+               return 0;
        }
-
-       if (ret == -EINTR)
-               trace_trans_restart_mark(trans->fn, _RET_IP_,
-                                        i->btree_id, &i->path->pos);
-       return ret ?: 1;
 }
 
 static int run_btree_triggers(struct btree_trans *trans, enum btree_id btree_id,
@@ -511,7 +500,7 @@ static int run_btree_triggers(struct btree_trans *trans, enum btree_id btree_id,
        bool trans_trigger_run;
        int ret, overwrite;
 
-       for (overwrite = 0; overwrite < 2; overwrite++) {
+       for (overwrite = 1; overwrite >= 0; --overwrite) {
 
                /*
                 * Running triggers will append more updates to the list of updates as