• Dmitry Monakhov's avatar
    ext4: serialize unlocked dio reads with truncate · 1c9114f9
    Dmitry Monakhov authored
    
    
    Current serialization will works only for DIO which holds
    i_mutex, but nonlocked DIO following race is possible:
    
    dio_nolock_read_task            truncate_task
    				->ext4_setattr()
    				 ->inode_dio_wait()
    ->ext4_ext_direct_IO
      ->ext4_ind_direct_IO
        ->__blockdev_direct_IO
          ->ext4_get_block
    				 ->truncate_setsize()
    				 ->ext4_truncate()
    				 #alloc truncated blocks
    				 #to other inode
          ->submit_io()
         #INFORMATION LEAK
    
    In order to serialize with unlocked DIO reads we have to
    rearrange wait sequence
    1) update i_size first
    2) if i_size about to be reduced wait for outstanding DIO requests
    3) and only after that truncate inode blocks
    
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarDmitry Monakhov <dmonakhov@openvz.org>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    1c9114f9