diff options
author | Chris Mason <chris.mason@oracle.com> | 2011-05-28 07:00:39 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-05-28 07:00:39 -0400 |
commit | ff5714cca971848963b87d6b477c16ca8abbaa54 (patch) | |
tree | 17ee34b9b5e00804df4059503f82f6f1d94383a9 /fs/btrfs/free-space-cache.c | |
parent | 174ba50915b08dcfd07c8b5fb795b46a165fa09a (diff) | |
parent | d90c732122a1f6d0efe388a8a204f67f144b2eb3 (diff) |
Merge branch 'for-chris' of
git://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-work into for-linus
Conflicts:
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/free-space-cache.c
fs/btrfs/inode.c
fs/btrfs/transaction.c
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/free-space-cache.c')
-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 70d45795d758..dd38d4c3a599 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c | |||
@@ -402,7 +402,14 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, | |||
402 | spin_lock(&ctl->tree_lock); | 402 | spin_lock(&ctl->tree_lock); |
403 | ret = link_free_space(ctl, e); | 403 | ret = link_free_space(ctl, e); |
404 | spin_unlock(&ctl->tree_lock); | 404 | spin_unlock(&ctl->tree_lock); |
405 | BUG_ON(ret); | 405 | if (ret) { |
406 | printk(KERN_ERR "Duplicate entries in " | ||
407 | "free space cache, dumping\n"); | ||
408 | kunmap(page); | ||
409 | unlock_page(page); | ||
410 | page_cache_release(page); | ||
411 | goto free_cache; | ||
412 | } | ||
406 | } else { | 413 | } else { |
407 | e->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS); | 414 | e->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS); |
408 | if (!e->bitmap) { | 415 | if (!e->bitmap) { |
@@ -419,6 +426,14 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, | |||
419 | ctl->op->recalc_thresholds(ctl); | 426 | ctl->op->recalc_thresholds(ctl); |
420 | spin_unlock(&ctl->tree_lock); | 427 | spin_unlock(&ctl->tree_lock); |
421 | list_add_tail(&e->list, &bitmaps); | 428 | list_add_tail(&e->list, &bitmaps); |
429 | if (ret) { | ||
430 | printk(KERN_ERR "Duplicate entries in " | ||
431 | "free space cache, dumping\n"); | ||
432 | kunmap(page); | ||
433 | unlock_page(page); | ||
434 | page_cache_release(page); | ||
435 | goto free_cache; | ||
436 | } | ||
422 | } | 437 | } |
423 | 438 | ||
424 | num_entries--; | 439 | num_entries--; |
@@ -963,10 +978,16 @@ static int tree_insert_offset(struct rb_root *root, u64 offset, | |||
963 | * logically. | 978 | * logically. |
964 | */ | 979 | */ |
965 | if (bitmap) { | 980 | if (bitmap) { |
966 | WARN_ON(info->bitmap); | 981 | if (info->bitmap) { |
982 | WARN_ON_ONCE(1); | ||
983 | return -EEXIST; | ||
984 | } | ||
967 | p = &(*p)->rb_right; | 985 | p = &(*p)->rb_right; |
968 | } else { | 986 | } else { |
969 | WARN_ON(!info->bitmap); | 987 | if (!info->bitmap) { |
988 | WARN_ON_ONCE(1); | ||
989 | return -EEXIST; | ||
990 | } | ||
970 | p = &(*p)->rb_left; | 991 | p = &(*p)->rb_left; |
971 | } | 992 | } |
972 | } | 993 | } |