]> git.baikalelectronics.ru Git - kernel.git/commit
ext4, jbd2: ensure entering into panic after recording an error in superblock
authorDaeho Jeong <daeho.jeong@samsung.com>
Sun, 18 Oct 2015 21:02:56 +0000 (17:02 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 18 Oct 2015 21:02:56 +0000 (17:02 -0400)
commit69a460f67fd7ae6ef1fbcd43587be77aaa55aa6d
tree586491d92df3043ec5ddd0beaa92bd7cda77ae3d
parent704f4b92cc54c310a579cb1886c66a8c7de76e03
ext4, jbd2: ensure entering into panic after recording an error in superblock

If a EXT4 filesystem utilizes JBD2 journaling and an error occurs, the
journaling will be aborted first and the error number will be recorded
into JBD2 superblock and, finally, the system will enter into the
panic state in "errors=panic" option.  But, in the rare case, this
sequence is little twisted like the below figure and it will happen
that the system enters into panic state, which means the system reset
in mobile environment, before completion of recording an error in the
journal superblock. In this case, e2fsck cannot recognize that the
filesystem failure occurred in the previous run and the corruption
wouldn't be fixed.

Task A                        Task B
ext4_handle_error()
-> jbd2_journal_abort()
  -> __journal_abort_soft()
    -> __jbd2_journal_abort_hard()
    | -> journal->j_flags |= JBD2_ABORT;
    |
    |                         __ext4_abort()
    |                         -> jbd2_journal_abort()
    |                         | -> __journal_abort_soft()
    |                         |   -> if (journal->j_flags & JBD2_ABORT)
    |                         |           return;
    |                         -> panic()
    |
    -> jbd2_journal_update_sb_errno()

Tested-by: Hobin Woo <hobin.woo@samsung.com>
Signed-off-by: Daeho Jeong <daeho.jeong@samsung.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
fs/ext4/super.c
fs/jbd2/journal.c
include/linux/jbd2.h