X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=extent-tree.c;h=055582c36da6c7c257ce50d3113ac48c4984a5e3;hb=658cc4daa6ed6e6463cba2f30731abd9a91a7b2d;hp=f1cc4bfed8213dd86d6153229732b58b9e647543;hpb=b423d1822928bcb074e1a0e265c3a1ccbd5a2f94;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/extent-tree.c b/extent-tree.c index f1cc4bf..055582c 100644 --- a/extent-tree.c +++ b/extent-tree.c @@ -284,7 +284,7 @@ out: if (!cache) { printk("Unable to find block group for %llu\n", (unsigned long long)search_start); - WARN_ON(1); + return -ENOENT; } return -ENOSPC; @@ -2690,7 +2690,8 @@ int btrfs_reserve_extent(struct btrfs_trans_handle *trans, search_start, search_end, hint_byte, ins, trans->alloc_exclude_start, trans->alloc_exclude_nr, data); - BUG_ON(ret); + if (ret < 0) + return ret; clear_extent_dirty(&info->free_space_cache, ins->objectid, ins->objectid + ins->offset - 1); return ret; @@ -3724,7 +3725,7 @@ static int free_block_group_cache(struct btrfs_trans_handle *trans, btrfs_remove_free_space_cache(cache); kfree(cache->free_space_ctl); } - clear_extent_bits(&fs_info->block_group_cache, bytenr, bytenr + len, + clear_extent_bits(&fs_info->block_group_cache, bytenr, bytenr + len - 1, (unsigned int)-1); ret = free_space_info(fs_info, flags, len, 0, NULL); if (ret < 0) @@ -3840,7 +3841,7 @@ out: int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans, struct btrfs_root *root) { - int ret; + int ret = 0; int slot; u64 start = 0; u64 bytes_used = 0; @@ -3904,13 +3905,16 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans, bytes_used += fs_info->nodesize; ret = btrfs_update_block_group(trans, root, key.objectid, fs_info->nodesize, 1, 0); - BUG_ON(ret); + if (ret) + goto out; } path.slots[0]++; } btrfs_set_super_bytes_used(root->fs_info->super_copy, bytes_used); + ret = 0; +out: btrfs_release_path(&path); - return 0; + return ret; } static void __get_extent_size(struct btrfs_root *root, struct btrfs_path *path,