linux/fs/ext4
Daeho Jeong 3e447b618b ext4, jbd2: ensure entering into panic after recording an error in superblock
commit 4327ba52af upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2015-12-14 21:24:35 -08:00
..
acl.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
acl.h ext2/3/4: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
balloc.c ext4: remove unnecessary lock/unlock of i_block_reservation_lock 2015-04-03 00:02:53 -04:00
bitmap.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
block_validity.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
crypto.c ext4 crypto: add ext4 encryption facilities 2015-04-12 00:43:56 -04:00
crypto_fname.c ext4 crypto: add padding to filenames before encrypting 2015-05-01 16:56:50 -04:00
crypto_key.c ext4 crypto: add padding to filenames before encrypting 2015-05-01 16:56:50 -04:00
crypto_policy.c ext4 crypto: add padding to filenames before encrypting 2015-05-01 16:56:50 -04:00
dir.c ext4 crypto: simplify and speed up filename encryption 2015-05-01 16:56:45 -04:00
ext4.h ext4: remove unused function prototype from ext4.h 2015-05-14 18:43:36 -04:00
ext4_crypto.h ext4 crypto: add padding to filenames before encrypting 2015-05-01 16:56:50 -04:00
ext4_extents.h ext4: teach ext4_ext_find_extent() to realloc path if necessary 2014-09-01 14:40:09 -04:00
ext4_jbd2.c ext4: fix potential use after free in __ext4_journal_stop 2015-12-14 21:24:35 -08:00
ext4_jbd2.h ext4: don't use MAXQUOTAS value 2014-09-11 11:15:15 -04:00
extents.c ext4: avoid deadlocks in the writeback path by using sb_getblk_gfp 2015-08-03 09:29:00 -07:00
extents_status.c ext4: fix data corruption caused by unwritten and delayed extents 2015-05-02 21:36:55 -04:00
extents_status.h ext4: introduce aging to extent status tree 2014-11-25 11:55:24 -05:00
file.c A few bug fixes and add support for file-system level encryption in ext4. 2015-04-19 14:26:31 -07:00
fsync.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-26 17:22:07 -07:00
hash.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
ialloc.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-26 17:22:07 -07:00
indirect.c ext4: don't retry file block mapping on bigalloc fs with non-extent file 2015-08-03 09:28:59 -07:00
inline.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-26 17:22:07 -07:00
inode.c ext4: fix reservation release on invalidatepage for delalloc fs 2015-08-03 09:29:00 -07:00
ioctl.c ext4 crypto: add encryption policy and password salt support 2015-04-11 07:48:01 -04:00
Kconfig ext4 crypto: do not select from EXT4_FS_ENCRYPTION 2015-05-02 10:29:19 -04:00
Makefile ext4 crypto: filename encryption facilities 2015-04-12 00:56:17 -04:00
mballoc.c ext4: replace open coded nofail allocation in ext4_free_blocks() 2015-08-03 09:29:00 -07:00
mballoc.h ext4: remove unused ac_ex_scanned 2014-02-20 13:32:10 -05:00
migrate.c ext4: correctly migrate a file with a hole at the beginning 2015-08-03 09:29:00 -07:00
mmp.c ext4: Replace open coded mdata csum feature to helper function 2014-10-13 03:36:16 -04:00
move_extent.c move_extent_per_page(): get rid of unused w_flags 2014-12-17 06:43:56 -05:00
namei.c Some miscellaneous bug fixes and some final on-disk and ABI changes 2015-05-03 18:23:53 -07:00
page-io.c ext4 crypto: fix memory leak in ext4_bio_write_page() 2015-12-14 21:24:35 -08:00
readpage.c ext4 crypto: implement the ext4 decryption read path 2015-04-12 00:56:10 -04:00
resize.c ext4: fix growing of tiny filesystems 2015-05-02 23:58:32 -04:00
super.c ext4, jbd2: ensure entering into panic after recording an error in superblock 2015-12-14 21:24:35 -08:00
symlink.c Some miscellaneous bug fixes and some final on-disk and ABI changes 2015-05-03 18:23:53 -07:00
truncate.h ext4: move common truncate functions to header file 2011-06-27 19:16:04 -04:00
xattr.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-26 17:22:07 -07:00
xattr.h ext4 crypto: add encryption xattr support 2015-04-11 07:47:00 -04:00
xattr_security.c VFS: normal filesystems (and lustre): d_inode() annotations 2015-04-15 15:06:57 -04:00
xattr_trusted.c VFS: normal filesystems (and lustre): d_inode() annotations 2015-04-15 15:06:57 -04:00
xattr_user.c VFS: normal filesystems (and lustre): d_inode() annotations 2015-04-15 15:06:57 -04:00