]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/jbd2/commit.c
Merge tag 'irqchip-5.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm...
[linux.git] / fs / jbd2 / commit.c
index 150cc030b4d7a1ec50a51c4b488304e572e54f90..efd0ce9489ae9d453d37abd4a66b8ad574fa5b4b 100644 (file)
@@ -439,6 +439,8 @@ void jbd2_journal_commit_transaction(journal_t *journal)
                finish_wait(&journal->j_wait_updates, &wait);
        }
        spin_unlock(&commit_transaction->t_handle_lock);
+       commit_transaction->t_state = T_SWITCH;
+       write_unlock(&journal->j_state_lock);
 
        J_ASSERT (atomic_read(&commit_transaction->t_outstanding_credits) <=
                        journal->j_max_transaction_buffers);
@@ -505,6 +507,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
        atomic_sub(atomic_read(&journal->j_reserved_credits),
                   &commit_transaction->t_outstanding_credits);
 
+       write_lock(&journal->j_state_lock);
        trace_jbd2_commit_flushing(journal, commit_transaction);
        stats.run.rs_flushing = jiffies;
        stats.run.rs_locked = jbd2_time_diff(stats.run.rs_locked,
@@ -691,9 +694,11 @@ void jbd2_journal_commit_transaction(journal_t *journal)
                            the last tag we set up. */
 
                        tag->t_flags |= cpu_to_be16(JBD2_FLAG_LAST_TAG);
-
-                       jbd2_descriptor_block_csum_set(journal, descriptor);
 start_journal_io:
+                       if (descriptor)
+                               jbd2_descriptor_block_csum_set(journal,
+                                                       descriptor);
+
                        for (i = 0; i < bufs; i++) {
                                struct buffer_head *bh = wbuf[i];
                                /*