mirror of
https://github.com/torvalds/linux
synced 2024-10-07 20:05:15 +00:00
btrfs: remove inode_dio_wait() calls when starting reflink operations
When starting a reflink operation we have these calls to inode_dio_wait() which used to be needed because direct IO writes that don't cross the i_size boundary did not take the inode's VFS lock, so we could race with them and end up with ordered extents in target range after calling btrfs_wait_ordered_range(). However that is not the case anymore, because the inode's VFS lock was changed from a mutex to a rw semaphore, by commit9902af79c0
("parallel lookups: actual switch to rwsem"), and several years later we started to lock the inode's VFS lock in shared mode for direct IO writes that don't cross the i_size boundary (commite9adabb971
("btrfs: use shared lock for direct writes within EOF")). So remove those inode_dio_wait() calls. Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
831e1ee602
commit
1c6cbbbeee
|
@ -771,7 +771,6 @@ static int btrfs_remap_file_range_prep(struct file *file_in, loff_t pos_in,
|
|||
struct inode *inode_in = file_inode(file_in);
|
||||
struct inode *inode_out = file_inode(file_out);
|
||||
u64 bs = BTRFS_I(inode_out)->root->fs_info->sb->s_blocksize;
|
||||
bool same_inode = inode_out == inode_in;
|
||||
u64 wb_len;
|
||||
int ret;
|
||||
|
||||
|
@ -809,15 +808,6 @@ static int btrfs_remap_file_range_prep(struct file *file_in, loff_t pos_in,
|
|||
else
|
||||
wb_len = ALIGN(*len, bs);
|
||||
|
||||
/*
|
||||
* Since we don't lock ranges, wait for ongoing lockless dio writes (as
|
||||
* any in progress could create its ordered extents after we wait for
|
||||
* existing ordered extents below).
|
||||
*/
|
||||
inode_dio_wait(inode_in);
|
||||
if (!same_inode)
|
||||
inode_dio_wait(inode_out);
|
||||
|
||||
/*
|
||||
* Workaround to make sure NOCOW buffered write reach disk as NOCOW.
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue