diff options
-rw-r--r-- | fs/btrfs/free-space-cache.c | 27 |
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 | } |