aboutsummaryrefslogtreecommitdiff
path: root/fs/jbd2/commit.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-09 23:28:01 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-09 23:28:01 -0800
commit1712a699ab32d4952fe6b0f97af91b8230bece98 (patch)
treeab5fb69041e8f4052d685b4684ccdd7cc9118f37 /fs/jbd2/commit.c
parent95a940e9e1d63c2bff170fcd59ab4e1b5c4c602d (diff)
parent469108ff3dcbc00313699d620c47f3ee1e7d19c6 (diff)
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: ext4: Add new "development flag" to the ext4 filesystem ext4: Don't panic in case of corrupt bitmap ext4: allocate struct ext4_allocation_context from a kmem cache JBD2: Clear buffer_ordered flag for barried IO request on success ext4: Fix Direct I/O locking ext4: Fix circular locking dependency with migrate and rm. allow in-inode EAs on ext4 root inode ext4: Fix null bh pointer dereference in mballoc ext4: Don't set EXTENTS_FL flag for fast symlinks JBD2: Use the incompat macro for testing the incompat feature. jbd2: Fix reference counting on the journal commit block's buffer head [PATCH] jbd: Remove useless loop when writing commit record jbd2: Add error check to journal_wait_on_commit_record to avoid oops
Diffstat (limited to 'fs/jbd2/commit.c')
-rw-r--r--fs/jbd2/commit.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 4f302d27927..a8173081f83 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -136,18 +136,20 @@ static int journal_submit_commit_record(journal_t *journal,
JBUFFER_TRACE(descriptor, "submit commit block");
lock_buffer(bh);
-
+ get_bh(bh);
set_buffer_dirty(bh);
set_buffer_uptodate(bh);
bh->b_end_io = journal_end_buffer_io_sync;
if (journal->j_flags & JBD2_BARRIER &&
- !JBD2_HAS_COMPAT_FEATURE(journal,
+ !JBD2_HAS_INCOMPAT_FEATURE(journal,
JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
set_buffer_ordered(bh);
barrier_done = 1;
}
ret = submit_bh(WRITE, bh);
+ if (barrier_done)
+ clear_buffer_ordered(bh);
/* is it possible for another commit to fail at roughly
* the same time as this one? If so, we don't want to
@@ -166,7 +168,6 @@ static int journal_submit_commit_record(journal_t *journal,
spin_unlock(&journal->j_state_lock);
/* And try again, without the barrier */
- clear_buffer_ordered(bh);
set_buffer_uptodate(bh);
set_buffer_dirty(bh);
ret = submit_bh(WRITE, bh);
@@ -872,7 +873,8 @@ wait_for_iobuf:
if (err)
__jbd2_journal_abort_hard(journal);
}
- err = journal_wait_on_commit_record(cbh);
+ if (!err && !is_journal_aborted(journal))
+ err = journal_wait_on_commit_record(cbh);
if (err)
jbd2_journal_abort(journal, err);