]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: bch2_trans_relock() only relocks iters that should be locked
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 27 Jul 2021 21:58:58 +0000 (17:58 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:09 +0000 (17:09 -0400)
This avoids unexpected lock restarts in bch2_btree_iter_traverse_all().

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

index 37b314f0a002a0b5ce18868850137bc3be7d9d48..a78bdcda246753fe7748a41db73cfe523ddd5df4 100644 (file)
@@ -495,8 +495,7 @@ void bch2_trans_downgrade(struct btree_trans *trans)
 
 /* Btree transaction locking: */
 
-static inline bool btree_iter_should_be_locked(struct btree_trans *trans,
-                                              struct btree_iter *iter)
+static inline bool btree_iter_should_be_locked(struct btree_iter *iter)
 {
        return (iter->flags & BTREE_ITER_KEEP_UNTIL_COMMIT) ||
                iter->should_be_locked;
@@ -507,8 +506,8 @@ bool bch2_trans_relock(struct btree_trans *trans)
        struct btree_iter *iter;
 
        trans_for_each_iter(trans, iter)
-               if (!bch2_btree_iter_relock(iter, _RET_IP_) &&
-                   btree_iter_should_be_locked(trans, iter)) {
+               if (btree_iter_should_be_locked(iter) &&
+                   !bch2_btree_iter_relock(iter, _RET_IP_)) {
                        trace_trans_restart_relock(trans->ip, _RET_IP_,
                                        iter->btree_id, &iter->real_pos);
                        return false;