If we exit from a btree transaction with uncommitted updates, that's
probably not what we intended to do.

Signed-off-by: Kent Overstreet <[email protected]>
---
 fs/bcachefs/btree_iter.c         | 2 ++
 fs/bcachefs/btree_trans_commit.c | 4 +---
 fs/bcachefs/btree_update.h       | 7 +++++++
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index bc3f38f7044c..7ce2ed4ac509 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -3551,6 +3551,8 @@ void bch2_trans_put(struct btree_trans *trans)
 {
        struct bch_fs *c = trans->c;
 
+       WARN_ON(bch2_trans_has_updates(trans));
+
        if (trans->restarted)
                bch2_trans_in_restart_error(trans);
 
diff --git a/fs/bcachefs/btree_trans_commit.c b/fs/bcachefs/btree_trans_commit.c
index 639ef75b3dbd..454b4c5c1808 100644
--- a/fs/bcachefs/btree_trans_commit.c
+++ b/fs/bcachefs/btree_trans_commit.c
@@ -1015,9 +1015,7 @@ int __bch2_trans_commit(struct btree_trans *trans, 
unsigned flags)
        if (unlikely(ret))
                goto out_reset;
 
-       if (!trans->nr_updates &&
-           !trans->journal_entries.u64s &&
-           !trans->accounting.u64s)
+       if (!bch2_trans_has_updates(trans))
                goto out_reset;
 
        ret = bch2_trans_commit_run_triggers(trans);
diff --git a/fs/bcachefs/btree_update.h b/fs/bcachefs/btree_update.h
index e4b6e7d51a2e..54c71e3bad63 100644
--- a/fs/bcachefs/btree_update.h
+++ b/fs/bcachefs/btree_update.h
@@ -272,6 +272,13 @@ static inline int bch2_trans_commit(struct btree_trans 
*trans,
             (_i) < (_trans)->updates + (_trans)->nr_updates;           \
             (_i)++)
 
+static inline bool bch2_trans_has_updates(struct btree_trans *trans)
+{
+       return trans->nr_updates ||
+               trans->journal_entries.u64s ||
+               trans->accounting.u64s;
+}
+
 static inline void bch2_trans_reset_updates(struct btree_trans *trans)
 {
        trans_for_each_update(trans, i)
-- 
2.50.0


Reply via email to