Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165912
b: refs/heads/master
c: 25891f7
h: refs/heads/master
v: v3
  • Loading branch information
Josef Bacik authored and Chris Mason committed Sep 21, 2009
1 parent 044a14f commit a2f3b24
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f61408b81cd040a594dc0b65171230c4d5cc917d
refs/heads/master: 25891f796d8d30f2b86b1e84d78721b44d573d70
35 changes: 21 additions & 14 deletions trunk/fs/btrfs/free-space-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,9 @@ static int link_free_space(struct btrfs_block_group_cache *block_group,

static void recalculate_thresholds(struct btrfs_block_group_cache *block_group)
{
u64 max_bytes, possible_bytes;
u64 max_bytes;
u64 bitmap_bytes;
u64 extent_bytes;

/*
* The goal is to keep the total amount of memory used per 1gb of space
Expand All @@ -269,22 +271,27 @@ static void recalculate_thresholds(struct btrfs_block_group_cache *block_group)
max_bytes = MAX_CACHE_BYTES_PER_GIG *
(div64_u64(block_group->key.offset, 1024 * 1024 * 1024));

possible_bytes = (block_group->total_bitmaps * PAGE_CACHE_SIZE) +
(sizeof(struct btrfs_free_space) *
block_group->extents_thresh);
/*
* we want to account for 1 more bitmap than what we have so we can make
* sure we don't go over our overall goal of MAX_CACHE_BYTES_PER_GIG as
* we add more bitmaps.
*/
bitmap_bytes = (block_group->total_bitmaps + 1) * PAGE_CACHE_SIZE;

if (possible_bytes > max_bytes) {
int extent_bytes = max_bytes -
(block_group->total_bitmaps * PAGE_CACHE_SIZE);
if (bitmap_bytes >= max_bytes) {
block_group->extents_thresh = 0;
return;
}

if (extent_bytes <= 0) {
block_group->extents_thresh = 0;
return;
}
/*
* we want the extent entry threshold to always be at most 1/2 the maxw
* bytes we can have, or whatever is less than that.
*/
extent_bytes = max_bytes - bitmap_bytes;
extent_bytes = min_t(u64, extent_bytes, div64_u64(max_bytes, 2));

block_group->extents_thresh = extent_bytes /
(sizeof(struct btrfs_free_space));
}
block_group->extents_thresh =
div64_u64(extent_bytes, (sizeof(struct btrfs_free_space)));
}

static void bitmap_clear_bits(struct btrfs_block_group_cache *block_group,
Expand Down

0 comments on commit a2f3b24

Please sign in to comment.