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
 
                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 */