summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2011-12-07 11:38:24 +0800
committerLi Zefan <lizf@cn.fujitsu.com>2012-01-11 10:26:54 +0800
commitb367e47fb3a70f5d24ebd6faf7d42436d485fb2d (patch)
tree5acc05bae14070f2dad3433a1482fe3a7bab0744 /fs/btrfs/disk-io.c
parentc7c144db531fda414e532adac56e965ce332e2a5 (diff)
downloadop-kernel-dev-b367e47fb3a70f5d24ebd6faf7d42436d485fb2d.zip
op-kernel-dev-b367e47fb3a70f5d24ebd6faf7d42436d485fb2d.tar.gz
Btrfs: fix possible deadlock when opening a seed device
The correct lock order is uuid_mutex -> volume_mutex -> chunk_mutex, but when we mount a filesystem which has backing seed devices, we have this lock chain: open_ctree() lock(chunk_mutex); read_chunk_tree(); read_one_dev(); open_seed_devices(); lock(uuid_mutex); and then we hit a lockdep splat. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 3f9d555..858ab34 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2270,9 +2270,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
(unsigned long)btrfs_header_chunk_tree_uuid(chunk_root->node),
BTRFS_UUID_SIZE);
- mutex_lock(&fs_info->chunk_mutex);
ret = btrfs_read_chunk_tree(chunk_root);
- mutex_unlock(&fs_info->chunk_mutex);
if (ret) {
printk(KERN_WARNING "btrfs: failed to read chunk tree on %s\n",
sb->s_id);
OpenPOWER on IntegriCloud