|
@@ -602,15 +602,15 @@ int __jbd2_journal_remove_checkpoint(struct journal_head *jh)
|
|
|
|
|
|
/*
|
|
|
* There is one special case to worry about: if we have just pulled the
|
|
|
- * buffer off a committing transaction's forget list, then even if the
|
|
|
- * checkpoint list is empty, the transaction obviously cannot be
|
|
|
- * dropped!
|
|
|
+ * buffer off a running or committing transaction's checkpoing list,
|
|
|
+ * then even if the checkpoint list is empty, the transaction obviously
|
|
|
+ * cannot be dropped!
|
|
|
*
|
|
|
- * The locking here around j_committing_transaction is a bit sleazy.
|
|
|
+ * The locking here around t_state is a bit sleazy.
|
|
|
* See the comment at the end of jbd2_journal_commit_transaction().
|
|
|
*/
|
|
|
- if (transaction == journal->j_committing_transaction) {
|
|
|
- JBUFFER_TRACE(jh, "belongs to committing transaction");
|
|
|
+ if (transaction->t_state != T_FINISHED) {
|
|
|
+ JBUFFER_TRACE(jh, "belongs to running/committing transaction");
|
|
|
goto out;
|
|
|
}
|
|
|
|