aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/free-space-cache.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index 63731a1fb0a1..d634a7e42207 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -420,7 +420,14 @@ int load_free_space_cache(struct btrfs_fs_info *fs_info,
420 spin_lock(&block_group->tree_lock); 420 spin_lock(&block_group->tree_lock);
421 ret = link_free_space(block_group, e); 421 ret = link_free_space(block_group, e);
422 spin_unlock(&block_group->tree_lock); 422 spin_unlock(&block_group->tree_lock);
423 BUG_ON(ret); 423 if (ret) {
424 printk(KERN_ERR "Duplicate entries in "
425 "free space cache, dumping\n");
426 kunmap(page);
427 unlock_page(page);
428 page_cache_release(page);
429 goto free_cache;
430 }
424 } else { 431 } else {
425 e->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS); 432 e->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
426 if (!e->bitmap) { 433 if (!e->bitmap) {
@@ -437,6 +444,14 @@ int load_free_space_cache(struct btrfs_fs_info *fs_info,
437 recalculate_thresholds(block_group); 444 recalculate_thresholds(block_group);
438 spin_unlock(&block_group->tree_lock); 445 spin_unlock(&block_group->tree_lock);
439 list_add_tail(&e->list, &bitmaps); 446 list_add_tail(&e->list, &bitmaps);
447 if (ret) {
448 printk(KERN_ERR "Duplicate entries in "
449 "free space cache, dumping\n");
450 kunmap(page);
451 unlock_page(page);
452 page_cache_release(page);
453 goto free_cache;
454 }
440 } 455 }
441 456
442 num_entries--; 457 num_entries--;
@@ -909,10 +924,16 @@ static int tree_insert_offset(struct rb_root *root, u64 offset,
909 * logically. 924 * logically.
910 */ 925 */
911 if (bitmap) { 926 if (bitmap) {
912 WARN_ON(info->bitmap); 927 if (info->bitmap) {
928 WARN_ON_ONCE(1);
929 return -EEXIST;
930 }
913 p = &(*p)->rb_right; 931 p = &(*p)->rb_right;
914 } else { 932 } else {
915 WARN_ON(!info->bitmap); 933 if (!info->bitmap) {
934 WARN_ON_ONCE(1);
935 return -EEXIST;
936 }
916 p = &(*p)->rb_left; 937 p = &(*p)->rb_left;
917 } 938 }
918 } 939 }