summaryrefslogtreecommitdiffstats
path: root/lib/activate
diff options
context:
space:
mode:
authorJonathan Earl Brassow <jbrassow@redhat.com>2011-08-11 04:18:17 +0000
committerJonathan Earl Brassow <jbrassow@redhat.com>2011-08-11 04:18:17 +0000
commitff58e019d8dfbd77fe1753d313b5f9fc8b0f8ee2 (patch)
tree9760fb005f17f38466366be04d763801b7367b52 /lib/activate
parent66d96755593bf8c2f7a593fe4a207252e06657ab (diff)
downloadlvm2-ff58e019d8dfbd77fe1753d313b5f9fc8b0f8ee2.tar.gz
lvm2-ff58e019d8dfbd77fe1753d313b5f9fc8b0f8ee2.tar.xz
lvm2-ff58e019d8dfbd77fe1753d313b5f9fc8b0f8ee2.zip
Add RAID metadata devices to considered devices in _add_lv_to_dtree.
_add_lv_to_dtree must also add RAID metadata devices.
Diffstat (limited to 'lib/activate')
-rw-r--r--lib/activate/dev_manager.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index 78e346b9..c5b377d6 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -1060,9 +1060,12 @@ static int _add_partial_replicator_to_dtree(struct dev_manager *dm,
/*
* Add LV and any known dependencies
*/
-static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree, struct logical_volume *lv, int origin_only)
+static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
+ struct logical_volume *lv, int origin_only)
{
+ uint32_t s;
struct seg_list *sl;
+ struct lv_segment *seg = first_seg(lv);
if (!origin_only && !_add_dev_to_dtree(dm, dtree, lv, NULL))
return_0;
@@ -1074,10 +1077,16 @@ static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree, struc
if (!origin_only && !_add_dev_to_dtree(dm, dtree, lv, "cow"))
return_0;
- if ((lv->status & MIRRORED) && first_seg(lv)->log_lv &&
- !_add_dev_to_dtree(dm, dtree, first_seg(lv)->log_lv, NULL))
+ if ((lv->status & MIRRORED) && seg->log_lv &&
+ !_add_dev_to_dtree(dm, dtree, seg->log_lv, NULL))
return_0;
+ if (lv->status & RAID)
+ for (s = 0; s < seg->area_count; s++)
+ if (!_add_lv_to_dtree(dm, dtree,
+ seg_metalv(seg, s), origin_only))
+ return_0;
+
/* Add any LVs referencing a PVMOVE LV unless told not to. */
if (dm->track_pvmove_deps && lv->status & PVMOVE)
dm_list_iterate_items(sl, &lv->segs_using_this_lv)