Currently there is a state where inside
journal_commit_running_transaction_locked we move the running transaction to
committing one, and then start waiting for the t_updates on the committing
transaction to become 0 to proceed with the commit. In this gap, there is no
running transaction
---
ext2fs/journal.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/ext2fs/journal.c b/ext2fs/journal.c
index 5c4cc711a..d4097da89 100644
--- a/ext2fs/journal.c
+++ b/ext2fs/journal.c
@@ -2064,6 +2064,15 @@ journal_commit_running_transaction_locked (journal_t
*journal)
journal->j_committing_transaction = txn;
journal->j_running_transaction = NULL;
+ if (!journal->j_must_exit)
+ {
+ /* Instantly spawn the next txn so that there is no gap. */
+ diskfs_transaction_t *run =
+ diskfs_journal_start_transaction_locked (journal);
+ if (run)
+ run->t_updates--; /* We are just seeding it, not joining it! */
+ }
+
txn->t_state = T_LOCKED;
while (txn->t_updates > 0)
--
2.55.0