mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
Btrfs: increase the size of the free space cache
Arne was complaining about the space cache having mismatching generation numbers when debugging a deadlock. This is because we can run out of space in our preallocated range for our space cache if you have a pretty fragmented amount of space in your pinned space. So just increase the amount of space we preallocate for space cache so we can be sure to have enough space. This will only really affect data ranges since their the only chunks that end up larger than 256MB. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
parent
66657b318e
commit
6fc823b10f
1 changed files with 7 additions and 8 deletions
|
@ -2975,17 +2975,16 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,
|
|||
}
|
||||
spin_unlock(&block_group->lock);
|
||||
|
||||
num_pages = (int)div64_u64(block_group->key.offset, 1024 * 1024 * 1024);
|
||||
/*
|
||||
* Try to preallocate enough space based on how big the block group is.
|
||||
* Keep in mind this has to include any pinned space which could end up
|
||||
* taking up quite a bit since it's not folded into the other space
|
||||
* cache.
|
||||
*/
|
||||
num_pages = (int)div64_u64(block_group->key.offset, 256 * 1024 * 1024);
|
||||
if (!num_pages)
|
||||
num_pages = 1;
|
||||
|
||||
/*
|
||||
* Just to make absolutely sure we have enough space, we're going to
|
||||
* preallocate 12 pages worth of space for each block group. In
|
||||
* practice we ought to use at most 8, but we need extra space so we can
|
||||
* add our header and have a terminator between the extents and the
|
||||
* bitmaps.
|
||||
*/
|
||||
num_pages *= 16;
|
||||
num_pages *= PAGE_CACHE_SIZE;
|
||||
|
||||
|
|
Loading…
Reference in a new issue