aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/free-space-cache.c
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2011-03-18 15:27:43 -0400
committerJosef Bacik <josef@redhat.com>2011-03-21 10:25:56 -0400
commitd0a365e84a886ce6b5b7f7a76be0bb24934ec8f0 (patch)
tree5e46221ccd86bb44a1fec70fb7ec7e1801601164 /fs/btrfs/free-space-cache.c
parent7d0d2e8e6b6f7da221a25238cf490a095c8c4788 (diff)
downloadkernel_samsung_smdk4412-d0a365e84a886ce6b5b7f7a76be0bb24934ec8f0.zip
kernel_samsung_smdk4412-d0a365e84a886ce6b5b7f7a76be0bb24934ec8f0.tar.gz
kernel_samsung_smdk4412-d0a365e84a886ce6b5b7f7a76be0bb24934ec8f0.tar.bz2
Btrfs: deal with min_bytes appropriately when looking for a cluster
We do all this fun stuff with min_bytes, but either don't use it in the case of just normal extents, or use it completely wrong in the case of bitmaps. So fix this for both cases 1) In the extent case, stop looking for space with window_free >= min_bytes instead of bytes + empty_size. 2) In the bitmap case, we were looking for streches of free space that was at least min_bytes in size, which was not right at all. So instead search for stretches of free space that are at least bytes in size (this will make a difference when we have > page size blocks) and then only search for min_bytes amount of free space. Thanks, Reviewed-by: Li Zefan <lizf@cn.fujitsu.com> Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/free-space-cache.c')
-rw-r--r--fs/btrfs/free-space-cache.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index f631df8..63776ae 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -1910,8 +1910,8 @@ static int btrfs_bitmap_cluster(struct btrfs_block_group_cache *block_group,
i = offset_to_bit(entry->offset, block_group->sectorsize,
max_t(u64, offset, entry->offset));
- search_bits = bytes_to_bits(min_bytes, block_group->sectorsize);
- total_bits = bytes_to_bits(bytes, block_group->sectorsize);
+ search_bits = bytes_to_bits(bytes, block_group->sectorsize);
+ total_bits = bytes_to_bits(min_bytes, block_group->sectorsize);
again:
found_bits = 0;
@@ -2034,8 +2034,7 @@ again:
if (entry->bitmap && entry->bytes > bytes + empty_size) {
ret = btrfs_bitmap_cluster(block_group, entry, cluster,
- offset, bytes + empty_size,
- min_bytes);
+ offset, bytes, min_bytes);
if (!ret)
goto got_it;
}
@@ -2065,7 +2064,7 @@ again:
while (1) {
/* out window is just right, lets fill it */
- if (window_free >= bytes + empty_size)
+ if (window_free >= min_bytes)
break;
node = rb_next(&last->offset_index);