mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
[PATCH] ext3/4: fix J_ASSERT(transaction->t_updates > 0) in journal_stop()
A disk generated some I/O error, after it, I hitted
J_ASSERT(transaction->t_updates > 0) in journal_stop().
It seems to happened on ext3_truncate() path from stack trace. Then,
maybe the following case may trigger J_ASSERT(transaction->t_updates > 0).
ext3_truncate()
-> ext3_free_branches()
-> ext3_journal_test_restart()
-> ext3_journal_restart()
-> journal_restart()
transaction->t_updates--;
/* another process aborted journal */
-> start_this_handle()
returns -EROFS without transaction->t_updates++;
-> ext3_journal_stop()
-> journal_stop()
J_ASSERT(transaction->t_updates > 0)
If journal was aborted in middle of journal_restart(), ext3_truncate()
may trigger J_ASSERT().
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: <linux-ext4@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
82591e6ea2
commit
3e2a532b26
|
|
@ -1314,13 +1314,14 @@ int journal_stop(handle_t *handle)
|
|||
int old_handle_count, err;
|
||||
pid_t pid;
|
||||
|
||||
J_ASSERT(transaction->t_updates > 0);
|
||||
J_ASSERT(journal_current_handle() == handle);
|
||||
|
||||
if (is_handle_aborted(handle))
|
||||
err = -EIO;
|
||||
else
|
||||
else {
|
||||
J_ASSERT(transaction->t_updates > 0);
|
||||
err = 0;
|
||||
}
|
||||
|
||||
if (--handle->h_ref > 0) {
|
||||
jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
|
||||
|
|
|
|||
|
|
@ -1314,13 +1314,14 @@ int jbd2_journal_stop(handle_t *handle)
|
|||
int old_handle_count, err;
|
||||
pid_t pid;
|
||||
|
||||
J_ASSERT(transaction->t_updates > 0);
|
||||
J_ASSERT(journal_current_handle() == handle);
|
||||
|
||||
if (is_handle_aborted(handle))
|
||||
err = -EIO;
|
||||
else
|
||||
else {
|
||||
J_ASSERT(transaction->t_updates > 0);
|
||||
err = 0;
|
||||
}
|
||||
|
||||
if (--handle->h_ref > 0) {
|
||||
jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user