summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMingming Cao2008-05-15 20:46:17 +0200
committerTheodore Ts'o2008-05-15 20:46:17 +0200
commit02c471cb17203c748e9bc87003052c1f46e5df69 (patch)
treea9d389f614d8d9d230920f6cf258f4d640a44662
parentext4: Retry block allocation if new blocks are allocated from system zone. (diff)
downloadkernel-qcow2-linux-02c471cb17203c748e9bc87003052c1f46e5df69.tar.gz
kernel-qcow2-linux-02c471cb17203c748e9bc87003052c1f46e5df69.tar.xz
kernel-qcow2-linux-02c471cb17203c748e9bc87003052c1f46e5df69.zip
jbd2: update transaction t_state to T_COMMIT fix
Updating the current transaction's t_state is protected by j_state_lock. We need to do the same when updating the t_state to T_COMMIT. Acked-by: Jan Kara <jack@suse.cz> Signed-off-by: Mingming Cao <cmm@us.ibm.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--fs/jbd2/commit.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index e0139786f717..4d99685fdce4 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -560,7 +560,9 @@ void jbd2_journal_commit_transaction(journal_t *journal)
* transaction! Now comes the tricky part: we need to write out
* metadata. Loop over the transaction's entire buffer list:
*/
+ spin_lock(&journal->j_state_lock);
commit_transaction->t_state = T_COMMIT;
+ spin_unlock(&journal->j_state_lock);
stats.u.run.rs_logging = jiffies;
stats.u.run.rs_flushing = jbd2_time_diff(stats.u.run.rs_flushing,