bcachefs: Increment restart count in bch2_trans_begin()
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 12 Aug 2022 16:45:01 +0000 (12:45 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:38 +0000 (17:09 -0400)
Instead of counting transaction restarts, count when the transaction is
restarted: if bch2_trans_begin() was called when the transaction wasn't
restarted we need to ensure restart_count is still incremented.

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

index ff08340..08f3968 100644 (file)
@@ -3229,6 +3229,7 @@ u32 bch2_trans_begin(struct btree_trans *trans)
 
        bch2_trans_reset_updates(trans);
 
+       trans->restart_count++;
        trans->mem_top                  = 0;
 
        if (trans->fs_usage_deltas) {
index aa4d2a5..c0b3c9d 100644 (file)
@@ -218,7 +218,6 @@ static inline int btree_trans_restart_nounlock(struct btree_trans *trans, int er
        BUG_ON(!bch2_err_matches(err, BCH_ERR_transaction_restart));
 
        trans->restarted = err;
-       trans->restart_count++;
        return -err;
 }
 
index c93e177..ef2e328 100644 (file)
@@ -1149,13 +1149,11 @@ static int check_i_sectors(struct btree_trans *trans, struct inode_walker *w)
                }
        }
 fsck_err:
-       if (ret) {
+       if (ret)
                bch_err(c, "error from check_i_sectors(): %s", bch2_err_str(ret));
-               return ret;
-       }
-       if (trans_was_restarted(trans, restart_count))
-               return -BCH_ERR_transaction_restart_nested;
-       return 0;
+       if (!ret && trans_was_restarted(trans, restart_count))
+               ret = -BCH_ERR_transaction_restart_nested;
+       return ret;
 }
 
 static int check_extent(struct btree_trans *trans, struct btree_iter *iter,