aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jbd2/commit.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2011-05-24 11:59:18 -0400
committerTheodore Ts'o <tytso@mit.edu>2011-05-24 11:59:18 -0400
commitbbd2be36910728f485ac78ea36e0f4f5a38e691e (patch)
tree6a45da5a6ef8bafe9614de5fac68cce1fe4e13ec /fs/jbd2/commit.c
parent81be12c8179c1c397d3f179cdd9b3f7146cf47f1 (diff)
jbd2: Add function jbd2_trans_will_send_data_barrier()
Provide a function which returns whether a transaction with given tid will send a flush to the filesystem device. The function will be used by ext4 to detect whether fsync needs to send a separate flush or not. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2/commit.c')
-rw-r--r--fs/jbd2/commit.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 2d5095ecc25f..5b506e53c70b 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -677,6 +677,10 @@ start_journal_io:
677 err = 0; 677 err = 0;
678 } 678 }
679 679
680 write_lock(&journal->j_state_lock);
681 J_ASSERT(commit_transaction->t_state == T_COMMIT);
682 commit_transaction->t_state = T_COMMIT_DFLUSH;
683 write_unlock(&journal->j_state_lock);
680 /* 684 /*
681 * If the journal is not located on the file system device, 685 * If the journal is not located on the file system device,
682 * then we must flush the file system device before we issue 686 * then we must flush the file system device before we issue
@@ -804,6 +808,10 @@ wait_for_iobuf:
804 jbd2_journal_abort(journal, err); 808 jbd2_journal_abort(journal, err);
805 809
806 jbd_debug(3, "JBD: commit phase 5\n"); 810 jbd_debug(3, "JBD: commit phase 5\n");
811 write_lock(&journal->j_state_lock);
812 J_ASSERT(commit_transaction->t_state == T_COMMIT_DFLUSH);
813 commit_transaction->t_state = T_COMMIT_JFLUSH;
814 write_unlock(&journal->j_state_lock);
807 815
808 if (!JBD2_HAS_INCOMPAT_FEATURE(journal, 816 if (!JBD2_HAS_INCOMPAT_FEATURE(journal,
809 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) { 817 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
@@ -959,7 +967,7 @@ restart_loop:
959 967
960 jbd_debug(3, "JBD: commit phase 7\n"); 968 jbd_debug(3, "JBD: commit phase 7\n");
961 969
962 J_ASSERT(commit_transaction->t_state == T_COMMIT); 970 J_ASSERT(commit_transaction->t_state == T_COMMIT_JFLUSH);
963 971
964 commit_transaction->t_start = jiffies; 972 commit_transaction->t_start = jiffies;
965 stats.run.rs_logging = jbd2_time_diff(stats.run.rs_logging, 973 stats.run.rs_logging = jbd2_time_diff(stats.run.rs_logging,