diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 5e122586e06ed0f9b9a36ebfe089ca7b3a75aee8..8244cab17688d85dcd745190fef9410e0afbe778 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -1108,7 +1108,7 @@ void jbd2_journal_commit_transaction(journal_t *journal) commit_transaction->t_state = T_COMMIT_CALLBACK; J_ASSERT(commit_transaction == journal->j_committing_transaction); - journal->j_commit_sequence = commit_transaction->t_tid; + WRITE_ONCE(journal->j_commit_sequence, commit_transaction->t_tid); journal->j_committing_transaction = NULL; commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time)); diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 19c69229ac6eccd98aaabd762666c100864fa1d2..fc4c7a2bf6d54f4951fcdd9f2c22d7eab8257e71 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -789,17 +789,7 @@ EXPORT_SYMBOL(jbd2_fc_end_commit_fallback); /* Return 1 when transaction with given tid has already committed. */ int jbd2_transaction_committed(journal_t *journal, tid_t tid) { - int ret = 1; - - read_lock(&journal->j_state_lock); - if (journal->j_running_transaction && - journal->j_running_transaction->t_tid == tid) - ret = 0; - if (journal->j_committing_transaction && - journal->j_committing_transaction->t_tid == tid) - ret = 0; - read_unlock(&journal->j_state_lock); - return ret; + return tid_geq(READ_ONCE(journal->j_commit_sequence), tid); } EXPORT_SYMBOL(jbd2_transaction_committed);