Btrfs: refactor btrfs_extent_same() slightly
authorOmar Sandoval <osandov@fb.com>
Wed, 18 Jan 2017 07:37:38 +0000 (23:37 -0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 14 Feb 2017 14:50:58 +0000 (15:50 +0100)
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: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c

index 529cc273e817e6b41d32ce907d06127285513d77..77f93a1e65c789e9c93b7c317f09a63300bb69be 100644 (file)
@@ -3125,26 +3125,27 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
        int ret;
        u64 len = olen;
        struct cmp_pages cmp;
-       int same_inode = 0;
+       bool same_inode = (src == dst);
        u64 same_lock_start = 0;
        u64 same_lock_len = 0;
 
-       if (src == dst)
-               same_inode = 1;
-
        if (len == 0)
                return 0;
 
-       if (same_inode) {
+       if (same_inode)
                inode_lock(src);
+       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(src, dst_loff, &len, olen);
-               if (ret)
-                       goto out_unlock;
+       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;
+
+       if (same_inode) {
                /*
                 * Single inode case wants the same checks, except we
                 * 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,
 
                same_lock_start = min_t(u64, loff, dst_loff);
                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 */