• Lukas Czerner's avatar
    ext4: fix extent merging in ext4_ext_shift_path_extents() · 6dd834ef
    Lukas Czerner authored
    
    
    There is a bug in ext4_ext_shift_path_extents() where if we actually
    manage to merge a extent we would skip shifting the next extent. This
    will result in in one extent in the extent tree not being properly
    shifted.
    
    This is causing failure in various xfstests tests using fsx or fsstress
    with collapse range support. It will also cause file system corruption
    which looks something like:
    
     e2fsck 1.42.9 (4-Feb-2014)
     Pass 1: Checking inodes, blocks, and sizes
     Inode 20 has out of order extents
            (invalid logical block 3, physical block 492938, len 2)
     Clear? yes
     ...
    
    when running e2fsck.
    
    It's also very easily reproducible just by running fsx without any
    parameters. I can usually hit the problem within a minute.
    
    Fix it by increasing ex_start only if we're not merging the extent.
    Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Reviewed-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
    6dd834ef
extents.c 149 KB