bcachefs: Don't touch c->flags in bch2_trans_iter_init()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 21 Oct 2022 21:26:49 +0000 (17:26 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:44 +0000 (17:09 -0400)
This moves the JOURNAL_REPLAY_DONE flag check from
bch2_trans_iter_init() to bch2_trans_init(), where we stash a copy in
btree_trans - gaining us a small performance improvement.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c

index 51eac08e9eea06a7e3d672b3f35738d332e120be..15bf079e17aba4afa8ee8d0c0e495e2c9d429662 100644 (file)
@@ -1167,10 +1167,12 @@ static void btree_path_copy(struct btree_trans *trans, struct btree_path *dst,
               (void *) src + offset,
               sizeof(struct btree_path) - offset);
 
-       for (i = 0; i < BTREE_MAX_DEPTH; i++)
-               if (btree_node_locked(dst, i))
-                       six_lock_increment(&dst->l[i].b->c.lock,
-                                          __btree_lock_want(dst, i));
+       for (i = 0; i < BTREE_MAX_DEPTH; i++) {
+               unsigned t = btree_node_locked_type(dst, i);
+
+               if (t != BTREE_NODE_UNLOCKED)
+                       six_lock_increment(&dst->l[i].b->c.lock, t);
+       }
 
        trans->paths_sorted = false;
 }
@@ -2631,7 +2633,7 @@ static inline void __bch2_trans_iter_init(struct btree_trans *trans,
                                          unsigned depth,
                                          unsigned flags)
 {
-       if (trans->restarted)
+       if (unlikely(trans->restarted))
                panic("bch2_trans_iter_init(): in transaction restart, %s by %pS\n",
                      bch2_err_str(trans->restarted),
                      (void *) trans->last_restarted_ip);