Commit fc4badd9 authored by Omar Sandoval's avatar Omar Sandoval Committed by David Sterba

Btrfs: refactor btrfs_extent_same() slightly

This was originally a prep patch for changing the behavior on len=0, but
we went another direction with that. This still makes the function
slightly easier to follow.
Reviewed-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 310712b2
...@@ -3125,26 +3125,27 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen, ...@@ -3125,26 +3125,27 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
int ret; int ret;
u64 len = olen; u64 len = olen;
struct cmp_pages cmp; struct cmp_pages cmp;
int same_inode = 0; bool same_inode = (src == dst);
u64 same_lock_start = 0; u64 same_lock_start = 0;
u64 same_lock_len = 0; u64 same_lock_len = 0;
if (src == dst)
same_inode = 1;
if (len == 0) if (len == 0)
return 0; return 0;
if (same_inode) { if (same_inode)
inode_lock(src); inode_lock(src);
else
btrfs_double_inode_lock(src, dst);
ret = extent_same_check_offsets(src, loff, &len, olen); ret = extent_same_check_offsets(src, loff, &len, olen);
if (ret) if (ret)
goto out_unlock; goto out_unlock;
ret = extent_same_check_offsets(src, dst_loff, &len, olen);
if (ret)
goto out_unlock;
ret = extent_same_check_offsets(dst, dst_loff, &len, olen);
if (ret)
goto out_unlock;
if (same_inode) {
/* /*
* Single inode case wants the same checks, except we * Single inode case wants the same checks, except we
* don't want our length pushed out past i_size as * don't want our length pushed out past i_size as
...@@ -3172,16 +3173,6 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen, ...@@ -3172,16 +3173,6 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
same_lock_start = min_t(u64, loff, dst_loff); same_lock_start = min_t(u64, loff, dst_loff);
same_lock_len = max_t(u64, loff, dst_loff) + len - same_lock_start; same_lock_len = max_t(u64, loff, dst_loff) + len - same_lock_start;
} else {
btrfs_double_inode_lock(src, dst);
ret = extent_same_check_offsets(src, loff, &len, olen);
if (ret)
goto out_unlock;
ret = extent_same_check_offsets(dst, dst_loff, &len, olen);
if (ret)
goto out_unlock;
} }
/* don't make the dst file partly checksummed */ /* don't make the dst file partly checksummed */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment