• Theodore Ts'o's avatar
    ext4: fix kernel oops if the journal superblock has a non-zero j_errno · 7f93cff9
    Theodore Ts'o authored
    Commit 84061e07 fixed an accounting bug only to introduce the
    possibility of a kernel OOPS if the journal has a non-zero j_errno
    field indicating that the file system had detected a fs inconsistency.
    After the journal replay, if the journal superblock indicates that the
    file system has an error, this indication is transfered to the file
    system and then ext4_commit_super() is called to write this to the
    disk.
    
    But since the percpu counters are now initialized after the journal
    replay, the call to ext4_commit_super() will cause a kernel oops since
    it needs to use the percpu counters the ext4 superblock structure.
    
    The fix is to skip setting the ext4 free block and free inode fields
    if the percpu counter has not been set.
    
    Thanks to Ken Sumrall for reporting and analyzing the root causes of
    this bug.
    
    Addresses-Google-Bug: #3054080
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    7f93cff9
percpu_counter.h 3.71 KB