| From 4871c1588f92c6c13f4713a7009f25f217055807 Mon Sep 17 00:00:00 2001 |
| From: Josef Bacik <jbacik@fusionio.com> |
| Date: Wed, 9 Oct 2013 12:24:04 -0400 |
| Subject: Btrfs: use right root when checking for hash collision |
| |
| From: Josef Bacik <jbacik@fusionio.com> |
| |
| commit 4871c1588f92c6c13f4713a7009f25f217055807 upstream. |
| |
| btrfs_rename was using the root of the old dir instead of the root of the new |
| dir when checking for a hash collision, so if you tried to move a file into a |
| subvol it would freak out because it would see the file you are trying to move |
| in its current root. This fixes the bug where this would fail |
| |
| btrfs subvol create test1 |
| btrfs subvol create test2 |
| mv test1 test2. |
| |
| Thanks to Chris Murphy for catching this, |
| |
| Reported-by: Chris Murphy <lists@colorremedies.com> |
| Signed-off-by: Josef Bacik <jbacik@fusionio.com> |
| Signed-off-by: Chris Mason <chris.mason@fusionio.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/inode.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/btrfs/inode.c |
| +++ b/fs/btrfs/inode.c |
| @@ -8146,7 +8146,7 @@ static int btrfs_rename(struct inode *ol |
| |
| |
| /* check for collisions, even if the name isn't there */ |
| - ret = btrfs_check_dir_item_collision(root, new_dir->i_ino, |
| + ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino, |
| new_dentry->d_name.name, |
| new_dentry->d_name.len); |
| |