X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=extent_io.c;h=7b9eb8eff2e97056273ec0d0f7f1371a91b3aecd;hb=52bfe9ef78fdf6c1f1c5ceb3f7a8bf8bf2164775;hp=07695ef8a097fe4a336e6aa70c703bb3b85281f1;hpb=c0f32c54a3de142201847cbcbf83ae83a4b76fd2;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/extent_io.c b/extent_io.c index 07695ef..7b9eb8e 100644 --- a/extent_io.c +++ b/extent_io.c @@ -27,6 +27,7 @@ #include "list.h" #include "ctree.h" #include "volumes.h" +#include "internal.h" void extent_io_tree_init(struct extent_io_tree *tree) { @@ -538,12 +539,9 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree, { struct extent_buffer *eb; - eb = malloc(sizeof(struct extent_buffer) + blocksize); - if (!eb) { - BUG(); + eb = calloc(1, sizeof(struct extent_buffer) + blocksize); + if (!eb) return NULL; - } - memset(eb, 0, sizeof(struct extent_buffer) + blocksize); eb->start = bytenr; eb->len = blocksize; @@ -564,7 +562,7 @@ struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src) struct extent_buffer *new; new = __alloc_extent_buffer(NULL, src->start, src->len); - if (new == NULL) + if (!new) return NULL; copy_extent_buffer(new, src, 0, 0, src->len); @@ -771,10 +769,14 @@ int write_data_to_disk(struct btrfs_fs_info *info, void *buf, u64 offset, u64 stripe_len = this_len; this_len = min(this_len, bytes_left); - this_len = min(this_len, (u64)info->tree_root->leafsize); + this_len = min(this_len, (u64)info->tree_root->nodesize); eb = malloc(sizeof(struct extent_buffer) + this_len); - BUG_ON(!eb); + if (!eb) { + fprintf(stderr, "cannot allocate memory for eb\n"); + ret = -ENOMEM; + goto out; + } memset(eb, 0, sizeof(struct extent_buffer) + this_len); eb->start = offset; @@ -825,6 +827,10 @@ int write_data_to_disk(struct btrfs_fs_info *info, void *buf, u64 offset, multi = NULL; } return 0; + +out: + kfree(raid_map); + return ret; } int set_extent_buffer_dirty(struct extent_buffer *eb) @@ -885,3 +891,9 @@ void memset_extent_buffer(struct extent_buffer *eb, char c, { memset(eb->data + start, c, len); } + +int extent_buffer_test_bit(struct extent_buffer *eb, unsigned long start, + unsigned long nr) +{ + return le_test_bit(nr, (u8 *)eb->data + start); +}