[PATCH] Btrfs: fill_holes: Fix slot number passed to hole_mergeable() call.

2014-07-01 Thread Chandan Rajendra
For a non-existent key, btrfs_search_slot() sets path-slots[0] to the slot
where the key could have been present, which in this case would be the slot
containing the extent item which would be the next neighbor of the file range
being punched. The current code passes an incremented path-slots[0] and we
skip to the wrong file extent item. This would mean that we would fail to
merge the yet to be created hole with the next neighboring hole (if one
exists). Fix this.

Signed-off-by: Chandan Rajendra chan...@linux.vnet.ibm.com
---
 fs/btrfs/file.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index ad7c059..3cd7997 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2126,10 +2126,9 @@ static int fill_holes(struct btrfs_trans_handle *trans, 
struct inode *inode,
goto out;
}
 
-   if (hole_mergeable(inode, leaf, path-slots[0]+1, offset, end)) {
+   if (hole_mergeable(inode, leaf, path-slots[0], offset, end)) {
u64 num_bytes;
 
-   path-slots[0]++;
key.offset = offset;
btrfs_set_item_key_safe(root, path, key);
fi = btrfs_item_ptr(leaf, path-slots[0],
-- 
1.8.3.1

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


Re: [PATCH] Btrfs: fill_holes: Fix slot number passed to hole_mergeable() call.

2014-07-01 Thread Wang Shilong

On 07/01/2014 02:34 PM, Chandan Rajendra wrote:

For a non-existent key, btrfs_search_slot() sets path-slots[0] to the slot
where the key could have been present, which in this case would be the slot
containing the extent item which would be the next neighbor of the file range
being punched. The current code passes an incremented path-slots[0] and we
skip to the wrong file extent item. This would mean that we would fail to
merge the yet to be created hole with the next neighboring hole (if one
exists). Fix this.

Signed-off-by: Chandan Rajendra chan...@linux.vnet.ibm.com
---

Nice catch, this looks good to me.

Reviewed-by: Wang Shilong wangsl.f...@cn.fujitsu.com


  fs/btrfs/file.c | 3 +--
  1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index ad7c059..3cd7997 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2126,10 +2126,9 @@ static int fill_holes(struct btrfs_trans_handle *trans, 
struct inode *inode,
goto out;
}
  
-	if (hole_mergeable(inode, leaf, path-slots[0]+1, offset, end)) {

+   if (hole_mergeable(inode, leaf, path-slots[0], offset, end)) {
u64 num_bytes;
  
-		path-slots[0]++;

key.offset = offset;
btrfs_set_item_key_safe(root, path, key);
fi = btrfs_item_ptr(leaf, path-slots[0],


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