• Jan Kara's avatar
    ext4: fix crash during online resizing · f96c3ac8
    Jan Kara authored
    When computing maximum size of filesystem possible with given number of
    group descriptor blocks, we forget to include s_first_data_block into
    the number of blocks. Thus for filesystems with non-zero
    s_first_data_block it can happen that computed maximum filesystem size
    is actually lower than current filesystem size which confuses the code
    and eventually leads to a BUG_ON in ext4_alloc_group_tables() hitting on
    flex_gd->count == 0. The problem can be reproduced like:
    
    truncate -s 100g /tmp/image
    mkfs.ext4 -b 1024 -E resize=262144 /tmp/image 32768
    mount -t ext4 -o loop /tmp/image /mnt
    resize2fs /dev/loop0 262145
    resize2fs /dev/loop0 300000
    
    Fix the problem by properly including s_first_data_block into the
    computed number of filesystem blocks.
    
    Fixes: 1c6bd717 "ext4: convert file system to meta_bg if needed..."
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    f96c3ac8
resize.c 59.7 KB