Browse Source

Btrfs: modify rw_devices counter under chunk_mutex context

rw_devices counter is often used to tune the profile when doing chunk allocation,
so we should modify it under the chunk_mutex context to avoid getting wrong
chunk profile.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
Miao Xie 11 years ago
parent
commit
c3929c3624
1 changed files with 2 additions and 2 deletions
  1. 2 2
      fs/btrfs/volumes.c

+ 2 - 2
fs/btrfs/volumes.c

@@ -1649,8 +1649,8 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path)
 	if (device->writeable) {
 	if (device->writeable) {
 		lock_chunks(root);
 		lock_chunks(root);
 		list_del_init(&device->dev_alloc_list);
 		list_del_init(&device->dev_alloc_list);
+		device->fs_devices->rw_devices--;
 		unlock_chunks(root);
 		unlock_chunks(root);
-		root->fs_info->fs_devices->rw_devices--;
 		clear_super = true;
 		clear_super = true;
 	}
 	}
 
 
@@ -1795,8 +1795,8 @@ error_undo:
 		lock_chunks(root);
 		lock_chunks(root);
 		list_add(&device->dev_alloc_list,
 		list_add(&device->dev_alloc_list,
 			 &root->fs_info->fs_devices->alloc_list);
 			 &root->fs_info->fs_devices->alloc_list);
+		device->fs_devices->rw_devices++;
 		unlock_chunks(root);
 		unlock_chunks(root);
-		root->fs_info->fs_devices->rw_devices++;
 	}
 	}
 	goto error_brelse;
 	goto error_brelse;
 }
 }