Btrfs uses inclusive range end for lock_extent(), unlock_extent() and
related functions, so we made off-by-one errors in file clone.

This fixes it and also fixes some style problems.

Signed-off-by: Liu Bo <bo.li....@oracle.com>
---
 fs/btrfs/ioctl.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 00ddf22..225761c 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2463,13 +2463,13 @@ static noinline long btrfs_ioctl_clone(struct file 
*file, unsigned long srcfd,
           another, and lock file content */
        while (1) {
                struct btrfs_ordered_extent *ordered;
-               lock_extent(&BTRFS_I(src)->io_tree, off, off+len);
-               ordered = btrfs_lookup_first_ordered_extent(src, off+len);
+               lock_extent(&BTRFS_I(src)->io_tree, off, off + len - 1);
+               ordered = btrfs_lookup_first_ordered_extent(src, off + len - 1);
                if (!ordered &&
-                   !test_range_bit(&BTRFS_I(src)->io_tree, off, off+len,
-                                  EXTENT_DELALLOC, 0, NULL))
+                   !test_range_bit(&BTRFS_I(src)->io_tree, off, off + len - 1,
+                                   EXTENT_DELALLOC, 0, NULL))
                        break;
-               unlock_extent(&BTRFS_I(src)->io_tree, off, off+len);
+               unlock_extent(&BTRFS_I(src)->io_tree, off, off + len - 1);
                if (ordered)
                        btrfs_put_ordered_extent(ordered);
                btrfs_wait_ordered_range(src, off, len);
@@ -2543,7 +2543,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, 
unsigned long srcfd,
                        btrfs_release_path(path);
 
                        if (key.offset + datal <= off ||
-                           key.offset >= off+len)
+                           key.offset >= off + len - 1)
                                goto next;
 
                        memcpy(&new_key, &key, sizeof(new_key));
@@ -2644,8 +2644,8 @@ static noinline long btrfs_ioctl_clone(struct file *file, 
unsigned long srcfd,
                                        new_key.offset += skip;
                                }
 
-                               if (key.offset + datal > off+len)
-                                       trim = key.offset + datal - (off+len);
+                               if (key.offset + datal > off + len)
+                                       trim = key.offset + datal - (off + len);
 
                                if (comp && (skip || trim)) {
                                        ret = -EINVAL;
@@ -2722,7 +2722,7 @@ next:
        ret = 0;
 out:
        btrfs_release_path(path);
-       unlock_extent(&BTRFS_I(src)->io_tree, off, off+len);
+       unlock_extent(&BTRFS_I(src)->io_tree, off, off + len - 1);
 out_unlock:
        mutex_unlock(&src->i_mutex);
        mutex_unlock(&inode->i_mutex);
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to