diff options
author | Li Zefan <lizf@cn.fujitsu.com> | 2011-12-06 22:38:24 -0500 |
---|---|---|
committer | Li Zefan <lizf@cn.fujitsu.com> | 2012-01-10 21:26:54 -0500 |
commit | b367e47fb3a70f5d24ebd6faf7d42436d485fb2d (patch) | |
tree | 5acc05bae14070f2dad3433a1482fe3a7bab0744 /fs/btrfs/disk-io.c | |
parent | c7c144db531fda414e532adac56e965ce332e2a5 (diff) |
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.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 3f9d5551e582..858ab347413e 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, | |||
2270 | (unsigned long)btrfs_header_chunk_tree_uuid(chunk_root->node), | 2270 | (unsigned long)btrfs_header_chunk_tree_uuid(chunk_root->node), |
2271 | BTRFS_UUID_SIZE); | 2271 | BTRFS_UUID_SIZE); |
2272 | 2272 | ||
2273 | mutex_lock(&fs_info->chunk_mutex); | ||
2274 | ret = btrfs_read_chunk_tree(chunk_root); | 2273 | ret = btrfs_read_chunk_tree(chunk_root); |
2275 | mutex_unlock(&fs_info->chunk_mutex); | ||
2276 | if (ret) { | 2274 | if (ret) { |
2277 | printk(KERN_WARNING "btrfs: failed to read chunk tree on %s\n", | 2275 | printk(KERN_WARNING "btrfs: failed to read chunk tree on %s\n", |
2278 | sb->s_id); | 2276 | sb->s_id); |