diff options
author | Alasdair Kergon <agk@redhat.com> | 2011-07-05 23:10:14 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2011-07-05 23:10:14 +0000 |
commit | 86b15c7c90c87ad0756f4c7d5238a243326c6529 (patch) | |
tree | 5477946c6e187d1b5366c0c0b7310d2d44272c9e /lib/activate | |
parent | 3a8eb3870eba441187128da40533431f0eb9b39c (diff) | |
download | lvm2-86b15c7c90c87ad0756f4c7d5238a243326c6529.tar.gz lvm2-86b15c7c90c87ad0756f4c7d5238a243326c6529.tar.xz lvm2-86b15c7c90c87ad0756f4c7d5238a243326c6529.zip |
Abort operation if dm_tree_node_add_target_area fails.
Diffstat (limited to 'lib/activate')
-rw-r--r-- | lib/activate/dev_manager.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index 04eb1244..6c037496 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -1178,12 +1178,11 @@ static int _add_error_area(struct dev_manager *dm, struct dm_tree_node *node, dlid = _add_error_device(dm, *tree, seg, s); if (!dlid) return_0; - dm_tree_node_add_target_area(node, NULL, dlid, - extent_size * seg_le(seg, s)); + if (!dm_tree_node_add_target_area(node, NULL, dlid, extent_size * seg_le(seg, s))) + return_0; } else - dm_tree_node_add_target_area(node, - dm->cmd->stripe_filler, - NULL, UINT64_C(0)); + if (!dm_tree_node_add_target_area(node, dm->cmd->stripe_filler, NULL, UINT64_C(0))) + return_0; return 1; } @@ -1204,19 +1203,15 @@ int add_areas_line(struct dev_manager *dm, struct lv_segment *seg, (seg_type(seg, s) == AREA_LV && !seg_lv(seg, s))) { if (!_add_error_area(dm, node, seg, s)) return_0; - } else if (seg_type(seg, s) == AREA_PV) - dm_tree_node_add_target_area(node, - dev_name(seg_dev(seg, s)), - NULL, - (seg_pv(seg, s)->pe_start + - (extent_size * seg_pe(seg, s)))); - else if (seg_type(seg, s) == AREA_LV) { - if (!(dlid = build_dm_uuid(dm->mem, - seg_lv(seg, s)->lvid.s, - NULL))) + } else if (seg_type(seg, s) == AREA_PV) { + if (!dm_tree_node_add_target_area(node, dev_name(seg_dev(seg, s)), NULL, + (seg_pv(seg, s)->pe_start + (extent_size * seg_pe(seg, s))))) + return_0; + } else if (seg_type(seg, s) == AREA_LV) { + if (!(dlid = build_dm_uuid(dm->mem, seg_lv(seg, s)->lvid.s, NULL))) + return_0; + if (!dm_tree_node_add_target_area(node, NULL, dlid, extent_size * seg_le(seg, s))) return_0; - dm_tree_node_add_target_area(node, NULL, dlid, - extent_size * seg_le(seg, s)); } else { log_error(INTERNAL_ERROR "Unassigned area found in LV %s.", seg->lv->name); |