• Jan Kara's avatar
    ext4: defer saving error info from atomic context · c92dc856
    Jan Kara authored
    
    
    When filesystem inconsistency is detected with group locked, we
    currently try to modify superblock to store error there without
    blocking. However this can cause superblock checksum failures (or
    DIF/DIX failure) when the superblock is just being written out.
    
    Make error handling code just store error information in ext4_sb_info
    structure and copy it to on-disk superblock only in ext4_commit_super().
    In case of error happening with group locked, we just postpone the
    superblock flushing to a workqueue.
    
    [ Added fixup so that s_first_error_* does not get updated after
      the file system is remounted.
      Also added fix for syzbot failure.  - Ted ]
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20201127113405.26867-8-jack@suse.cz
    
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Cc: Hillf Danton <hdanton@sina.com>
    Reported-by: syzbot+9043030c040ce1849a60@syzkaller.appspotmail.com
    c92dc856
ext4.h 129 KB