• Dmitry Monakhov's avatar
    ext4: serialize fallocate with ext4_convert_unwritten_extents · 60d4616f
    Dmitry Monakhov authored
    Fallocate should wait for pended ext4_convert_unwritten_extents()
    otherwise following race may happen:
    
    ftruncate( ,12288);
    fallocate( ,0, 4096)
    io_sibmit( ,0, 4096); /* Write to fallocated area, split extent if needed */
    fallocate( ,0, 8192); /* Grow extent and broke assumption about extent */
    
    Later kwork completion will do:
     ->ext4_convert_unwritten_extents (0, 4096)
       ->ext4_map_blocks(handle, inode, &map, EXT4_GET_BLOCKS_IO_CONVERT_EXT);
        ->ext4_ext_map_blocks() /* Will find new extent:  ex = [0,2] !!!!!! */
          ->ext4_ext_handle_uninitialized_extents()
            ->ext4_convert_unwritten_extents_endio()
            /* convert [0,2] extent to initialized, but only[0,1] was written */
    Signed-off-by: default avatarDmitry Monakhov <dmonakhov@openvz.org>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    60d4616f
extents.c 135 KB