summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/volumes.c
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2015-06-09 17:48:21 +0100
committerChris Mason <clm@fb.com>2015-06-10 07:02:46 -0700
commit4617ea3a52cfe8ae407ef406ab999f40a558c369 (patch)
tree12f1391feee7674ed4d411ae71a0bd1c4ffb20c6 /fs/btrfs/volumes.c
parent7558c8bc17481c1f856e009af8503ab40fec348a (diff)
downloadop-kernel-dev-4617ea3a52cfe8ae407ef406ab999f40a558c369.zip
op-kernel-dev-4617ea3a52cfe8ae407ef406ab999f40a558c369.tar.gz
Btrfs: fix necessary chunk tree space calculation when allocating a chunk
When allocating a new chunk or removing one we need to update num_devs device items and insert or remove a chunk item in the chunk tree, so in the worst case the space needed in the chunk space_info is: btrfs_calc_trunc_metadata_size(chunk_root, num_devs) + btrfs_calc_trans_metadata_size(chunk_root, 1) That is, in the worst case we need to cow num_devs paths and cow 1 other path that can result in splitting every node and leaf, and each path consisting of BTRFS_MAX_LEVEL - 1 nodes and 1 leaf. We were requiring some additional chunk_root->nodesize * BTRFS_MAX_LEVEL * num_devs bytes, which were unnecessary since updating the existing device items does not result in splitting the nodes and leaf since after updating them they remain with the same size. Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/volumes.c')
-rw-r--r--fs/btrfs/volumes.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index d766875..c208d6a 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -2626,7 +2626,7 @@ int btrfs_remove_chunk(struct btrfs_trans_handle *trans,
}
map = (struct map_lookup *)em->bdev;
lock_chunks(root->fs_info->chunk_root);
- check_system_chunk(trans, extent_root, map->type, false);
+ check_system_chunk(trans, extent_root, map->type);
unlock_chunks(root->fs_info->chunk_root);
for (i = 0; i < map->num_stripes; i++) {
OpenPOWER on IntegriCloud