diff options
author | David Sterba <dsterba@suse.com> | 2016-01-06 15:37:06 +0100 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-01-12 15:01:08 +0100 |
commit | 6aff5d74bdf1add66e27b876eb79074bc210599d (patch) | |
tree | 2086bd160efa1acc073135f7ed8b331abdfdf2b9 /cmds-check.c | |
parent | e0a28fa2fd9fdd570fc0e44e7f6f6743706cdc71 (diff) | |
download | btrfs-progs-6aff5d74bdf1add66e27b876eb79074bc210599d.tar.gz |
btrfs-progs: handle errors in add_shared_node and fail in the caller
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-check.c')
-rw-r--r-- | cmds-check.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/cmds-check.c b/cmds-check.c index 77982ee..66ef0f2 100644 --- a/cmds-check.c +++ b/cmds-check.c @@ -1199,6 +1199,8 @@ static int add_shared_node(struct cache_tree *shared, u64 bytenr, u32 refs) struct shared_node *node; node = calloc(1, sizeof(*node)); + if (!node) + return -ENOMEM; node->cache.start = bytenr; node->cache.size = 1; cache_tree_init(&node->root_cache); @@ -1206,8 +1208,8 @@ static int add_shared_node(struct cache_tree *shared, u64 bytenr, u32 refs) node->refs = refs; ret = insert_cache_extent(shared, &node->cache); - BUG_ON(ret); - return 0; + + return ret; } static int enter_shared_node(struct btrfs_root *root, u64 bytenr, u32 refs, @@ -1215,6 +1217,7 @@ static int enter_shared_node(struct btrfs_root *root, u64 bytenr, u32 refs, { struct shared_node *node; struct shared_node *dest; + int ret; if (level == wc->active_node) return 0; @@ -1222,7 +1225,8 @@ static int enter_shared_node(struct btrfs_root *root, u64 bytenr, u32 refs, BUG_ON(wc->active_node <= level); node = find_shared_node(&wc->shared, bytenr); if (!node) { - add_shared_node(&wc->shared, bytenr, refs); + ret = add_shared_node(&wc->shared, bytenr, refs); + BUG_ON(ret); node = find_shared_node(&wc->shared, bytenr); wc->nodes[level] = node; wc->active_node = level; |