Btrfs: use right root when checking for hash collision
authorJosef Bacik <jbacik@fusionio.com>
Wed, 9 Oct 2013 16:24:04 +0000 (12:24 -0400)
committerChris Mason <chris.mason@fusionio.com>
Fri, 11 Oct 2013 01:27:45 +0000 (21:27 -0400)
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,

Cc: stable@vger.kernel.org
Reported-by: Chris Murphy <lists@colorremedies.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/inode.c

index 8af6c03953ad30975c2e240719b3dde01fe4b9b2..3b4ffaf0cd5204660bd07b864e6ec8341871bdc2 100644 (file)
@@ -7986,7 +7986,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 
 
        /* 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);