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 ff0834049d94bc2ccccfac3cf226c72d3b4f6722..08f39687e964ffd0c984b4088b79ecccdf80853f 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 aa4d2a5df34ec8ef3ed514e51c2a8d0b0059e581..c0b3c9d0650529cf813335d13fb2b41ac63024dd 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 c93e177a314ffc38abe016fc085b3a23db02a467..ef2e3286458075902fd3bc95dcbe9c3518ed8b1e 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,