Skip to content
  • Theodore Ts'o's avatar
    ext4: fix the free blocks calculation for ext3 file systems w/ uninit_bg · b0dd6b70
    Theodore Ts'o authored
    Ext3 filesystems that are converted to use as many ext4 file system
    features as possible will enable uninit_bg to speed up e2fsck times.
    These file systems will have a native ext3 layout of inode tables and
    block allocation bitmaps (as opposed to ext4's flex_bg layout).
    Unfortunately, in these cases, when first allocating a block in an
    uninitialized block group, ext4 would incorrectly calculate the number
    of free blocks in that block group, and then errorneously report that
    the file system was corrupt:
    
    EXT4-fs error (device vdd): ext4_mb_generate_buddy:741: group 30, 32254 clusters in bitmap, 32258 in gd
    
    This problem can be reproduced via:
    
        mke2fs -q -t ext4 -O ^flex_bg /dev/vdd 5g
        mount -t ext4 /dev/vdd /mnt
        fallocate -l 4600m /mnt/test
    
    The problem was caused by a bone headed mistake in the check to see if a
    particular metadata block was part of the block group.
    
    Many thanks to Kees Cook for finding and bisecting the buggy commit
    which introduced this bug (commit fd034a84
    
    , present since v3.2).
    
    Reported-by: default avatarSander Eikelenboom <linux@eikelenboom.it>
    Reported-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Cc: stable@kernel.org
    b0dd6b70