• F
    btrfs: remove useless dio wait call when doing fallocate zero range · 831e1ee6
    Filipe Manana 提交于
    When starting a fallocate zero range operation, before getting the first
    extent map for the range, we make a call to inode_dio_wait().
    
    This logic was needed in the past because direct IO writes within the
    i_size boundary did not take the inode's VFS lock. This was because that
    lock used to be a mutex, then some years ago it was switched to a rw
    semaphore (by commit 9902af79 ("parallel lookups: actual switch to
    rwsem")), and then btrfs was changed to take the VFS inode's lock in
    shared mode for writes that don't cross the i_size boundary (done in
    commit e9adabb9 ("btrfs: use shared lock for direct writes within
    EOF")). The lockless direct IO writes could result in a race with the
    zero range operation, resulting in the later getting a stale extent
    map for the range.
    
    So remove this no longer needed call to inode_dio_wait(), as fallocate
    takes the inode's VFS lock in exclusive mode and direct IO writes within
    i_size take that same lock in shared mode.
    Signed-off-by: NFilipe Manana <fdmanana@suse.com>
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    831e1ee6
file.c 104.6 KB