summaryrefslogtreecommitdiffstats
path: root/fs/jbd2/commit.c
diff options
context:
space:
mode:
authorMingming Cao <cmm@u.ibm.com>2008-02-05 08:52:45 -0500
committerTheodore Ts'o <tytso@mit.edu>2008-02-05 08:52:45 -0500
commitb048d8462652159c5314d19b191220b0ec384edb (patch)
tree06198272d89d7263d4d13df0ed00c3d0cf4e8aa0 /fs/jbd2/commit.c
parent531021f2ca681faf58f926771f85bb5c76f13eba (diff)
downloadlinux-stable-b048d8462652159c5314d19b191220b0ec384edb.tar.gz
linux-stable-b048d8462652159c5314d19b191220b0ec384edb.tar.bz2
linux-stable-b048d8462652159c5314d19b191220b0ec384edb.zip
jbd2: Add error check to journal_wait_on_commit_record to avoid oops
The buffer head pointer passed to journal_wait_on_commit_record() could be NULL if the previous journal_submit_commit_record() failed or journal has already aborted. Looking at the jbd2 debug messages, before the oops happened, the jbd2 is aborted due to trying to access the next log block beyond the end of device. This might be caused by using a corrupted image. We need to check the error returns from journal_submit_commit_record() and avoid calling journal_wait_on_commit_record() in the failure case. This addresses Kernel Bugzilla #9849 Signed-off-by: Mingming Cao <cmm@us.ibm.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2/commit.c')
-rw-r--r--fs/jbd2/commit.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 4f302d279279..48b3cb8aeb2e 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -872,7 +872,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);