1126
1126
journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged;
1127
1127
spin_unlock(&journal->j_history_lock);
1129
commit_transaction->t_state = T_FINISHED;
1129
commit_transaction->t_state = T_COMMIT_CALLBACK;
1130
1130
J_ASSERT(commit_transaction == journal->j_committing_transaction);
1131
1131
journal->j_commit_sequence = commit_transaction->t_tid;
1132
1132
journal->j_committing_transaction = NULL;
1141
1141
journal->j_average_commit_time*3) / 4;
1143
1143
journal->j_average_commit_time = commit_time;
1144
1145
write_unlock(&journal->j_state_lock);
1146
if (commit_transaction->t_checkpoint_list == NULL &&
1147
commit_transaction->t_checkpoint_io_list == NULL) {
1148
__jbd2_journal_drop_transaction(journal, commit_transaction);
1147
if (journal->j_checkpoint_transactions == NULL) {
1148
journal->j_checkpoint_transactions = commit_transaction;
1149
commit_transaction->t_cpnext = commit_transaction;
1150
commit_transaction->t_cpprev = commit_transaction;
1151
if (journal->j_checkpoint_transactions == NULL) {
1152
journal->j_checkpoint_transactions = commit_transaction;
1153
commit_transaction->t_cpnext = commit_transaction;
1154
commit_transaction->t_cpprev = commit_transaction;
1156
commit_transaction->t_cpnext =
1157
journal->j_checkpoint_transactions;
1158
commit_transaction->t_cpprev =
1159
commit_transaction->t_cpnext->t_cpprev;
1160
commit_transaction->t_cpnext->t_cpprev =
1162
commit_transaction->t_cpprev->t_cpnext =
1152
commit_transaction->t_cpnext =
1153
journal->j_checkpoint_transactions;
1154
commit_transaction->t_cpprev =
1155
commit_transaction->t_cpnext->t_cpprev;
1156
commit_transaction->t_cpnext->t_cpprev =
1158
commit_transaction->t_cpprev->t_cpnext =
1166
1161
spin_unlock(&journal->j_list_lock);
1162
/* Drop all spin_locks because commit_callback may be block.
1163
* __journal_remove_checkpoint() can not destroy transaction
1164
* under us because it is not marked as T_FINISHED yet */
1168
1165
if (journal->j_commit_callback)
1169
1166
journal->j_commit_callback(journal, commit_transaction);
1171
1168
trace_jbd2_end_commit(journal, commit_transaction);
1172
1169
jbd_debug(1, "JBD2: commit %d complete, head %d\n",
1173
1170
journal->j_commit_sequence, journal->j_tail_sequence);
1172
write_lock(&journal->j_state_lock);
1173
spin_lock(&journal->j_list_lock);
1174
commit_transaction->t_state = T_FINISHED;
1175
/* Recheck checkpoint lists after j_list_lock was dropped */
1176
if (commit_transaction->t_checkpoint_list == NULL &&
1177
commit_transaction->t_checkpoint_io_list == NULL) {
1178
__jbd2_journal_drop_transaction(journal, commit_transaction);
1175
1179
jbd2_journal_free_transaction(commit_transaction);
1181
spin_unlock(&journal->j_list_lock);
1182
write_unlock(&journal->j_state_lock);
1177
1183
wake_up(&journal->j_wait_done_commit);