diff options
author | Liu Bo <bo.li.liu@oracle.com> | 2012-11-14 14:35:30 (GMT) |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2012-12-12 22:15:28 (GMT) |
commit | d25628bdd66aedd6e07729d8dc6c8ee846d66d72 (patch) | |
tree | a2d8e42e7353380ab6527739468ff1dd5b8e1144 /fs | |
parent | b53d3f5db2b79637acadc06a330db6c2c60863f5 (diff) | |
download | linux-d25628bdd66aedd6e07729d8dc6c8ee846d66d72.tar.xz |
Btrfs: protect devices list with its mutex
Since we've kill the bigger one volume_mutex, we need to add devices
list mutex back.
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/volumes.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index db79fb7..92e586b 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1681,16 +1681,17 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path) filemap_write_and_wait(bdev->bd_inode->i_mapping); devices = &root->fs_info->fs_devices->devices; - /* - * we have the volume lock, so we don't need the extra - * device list mutex while reading the list here. - */ + + mutex_lock(&root->fs_info->fs_devices->device_list_mutex); list_for_each_entry(device, devices, dev_list) { if (device->bdev == bdev) { ret = -EEXIST; + mutex_unlock( + &root->fs_info->fs_devices->device_list_mutex); goto error; } } + mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); device = kzalloc(sizeof(*device), GFP_NOFS); if (!device) { |