Skip to content

Commit

Permalink
Btrfs: free bitmaps properly when evicting the cache
Browse files Browse the repository at this point in the history
If our space cache is wrong, we do the right thing and free up everything that
we loaded, however we don't reset the total_bitmaps counter or the thresholds or
anything.  So in btrfs_remove_free_space_cache make sure to call free_bitmap()
if it's a bitmap, this will keep us from panicing when we check to make sure we
don't have too many bitmaps.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Josef Bacik authored and chrismason-xx committed Apr 25, 2011
1 parent f789b68 commit a4f0162
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions fs/btrfs/free-space-cache.c
Expand Up @@ -1768,10 +1768,13 @@ void btrfs_remove_free_space_cache(struct btrfs_block_group_cache *block_group)

while ((node = rb_last(&block_group->free_space_offset)) != NULL) {
info = rb_entry(node, struct btrfs_free_space, offset_index);
unlink_free_space(block_group, info);
if (info->bitmap)
kfree(info->bitmap);
kmem_cache_free(btrfs_free_space_cachep, info);
if (!info->bitmap) {
unlink_free_space(block_group, info);
kmem_cache_free(btrfs_free_space_cachep, info);
} else {
free_bitmap(block_group, info);
}

if (need_resched()) {
spin_unlock(&block_group->tree_lock);
cond_resched();
Expand Down

0 comments on commit a4f0162

Please sign in to comment.