summaryrefslogtreecommitdiffstats
path: root/lib/activate
diff options
context:
space:
mode:
authorJonathan Earl Brassow <jbrassow@redhat.com>2011-08-02 22:07:20 +0000
committerJonathan Earl Brassow <jbrassow@redhat.com>2011-08-02 22:07:20 +0000
commitcac52ca4ce125a5815121944995c0cdd752dec7e (patch)
treeb8b5e34ee23c4af2034ccfcd9a23c9cd5a0c1083 /lib/activate
parentc212019f3ac76d8b8e3f2afcda45fcf7ca9d9656 (diff)
downloadlvm2-cac52ca4ce125a5815121944995c0cdd752dec7e.tar.gz
lvm2-cac52ca4ce125a5815121944995c0cdd752dec7e.tar.xz
lvm2-cac52ca4ce125a5815121944995c0cdd752dec7e.zip
Add basic RAID segment type(s) support.
Implementation described in doc/lvm2-raid.txt. Basic support includes: - ability to create RAID 1/4/5/6 arrays - ability to delete RAID arrays - ability to display RAID arrays Notable missing features (not included in this patch): - ability to clean-up/repair failures - ability to convert RAID segment types - ability to monitor RAID segment types
Diffstat (limited to 'lib/activate')
-rw-r--r--lib/activate/dev_manager.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index 90cf5a4f..78e346b9 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -751,6 +751,7 @@ int dev_manager_mirror_percent(struct dev_manager *dm,
{
char *name;
const char *dlid;
+ const char *target_type = first_seg(lv)->segtype->name;
const char *layer = (lv_is_origin(lv)) ? "real" : NULL;
/*
@@ -766,8 +767,9 @@ int dev_manager_mirror_percent(struct dev_manager *dm,
return 0;
}
- log_debug("Getting device mirror status percentage for %s", name);
- if (!(_percent(dm, name, dlid, "mirror", wait, lv, percent,
+ log_debug("Getting device %s status percentage for %s",
+ target_type, name);
+ if (!(_percent(dm, name, dlid, target_type, wait, lv, percent,
event_nr, 0)))
return_0;
@@ -1216,6 +1218,15 @@ int add_areas_line(struct dev_manager *dm, struct lv_segment *seg,
(seg_pv(seg, s)->pe_start + (extent_size * seg_pe(seg, s)))))
return_0;
} else if (seg_type(seg, s) == AREA_LV) {
+ if (seg_is_raid(seg)) {
+ dlid = build_dm_uuid(dm->mem,
+ seg_metalv(seg, s)->lvid.s,
+ NULL);
+ if (!dlid)
+ return_0;
+ dm_tree_node_add_target_area(node, NULL, dlid,
+ extent_size * seg_metale(seg, s));
+ }
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)))
@@ -1444,11 +1455,16 @@ static int _add_segment_to_dtree(struct dev_manager *dm,
return_0;
} else {
/* Add any LVs used by this segment */
- for (s = 0; s < seg->area_count; s++)
+ for (s = 0; s < seg->area_count; s++) {
if ((seg_type(seg, s) == AREA_LV) &&
(!_add_new_lv_to_dtree(dm, dtree, seg_lv(seg, s),
laopts, NULL)))
return_0;
+ if (seg_is_raid(seg) &&
+ !_add_new_lv_to_dtree(dm, dtree, seg_metalv(seg, s),
+ laopts, NULL))
+ return_0;
+ }
}
/* Now we've added its dependencies, we can add the target itself */