summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorDaniel J Blueman <daniel@quora.org>2012-04-27 12:41:46 -0400
committerChris Mason <chris.mason@oracle.com>2012-04-27 13:55:13 -0400
commit1daf3540fa77faea2f91d96bcaf07ce48ee827be (patch)
tree0cdec92cca58085352b7ba8f4c3245a91dd0b5a9 /fs
parent3e74317ad773ba9df36db1fa32848cba41ac4d1a (diff)
downloadlinux-3.10-1daf3540fa77faea2f91d96bcaf07ce48ee827be.tar.gz
linux-3.10-1daf3540fa77faea2f91d96bcaf07ce48ee827be.tar.bz2
linux-3.10-1daf3540fa77faea2f91d96bcaf07ce48ee827be.zip
Btrfs: Prevent root_list corruption
I was seeing root_list corruption on unmount during fs resize in 3.4-rc4; add correct locking to address this. Signed-off-by: Daniel J Blueman <daniel@quora.org> Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/relocation.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 017281dbb2a..5a105a086ac 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -1279,7 +1279,9 @@ static int __update_reloc_root(struct btrfs_root *root, int del)
if (rb_node)
backref_tree_panic(rb_node, -EEXIST, node->bytenr);
} else {
+ spin_lock(&root->fs_info->trans_lock);
list_del_init(&root->root_list);
+ spin_unlock(&root->fs_info->trans_lock);
kfree(node);
}
return 0;