diff options
author | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-08-02 22:07:20 +0000 |
---|---|---|
committer | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-08-02 22:07:20 +0000 |
commit | cac52ca4ce125a5815121944995c0cdd752dec7e (patch) | |
tree | b8b5e34ee23c4af2034ccfcd9a23c9cd5a0c1083 /lib/activate | |
parent | c212019f3ac76d8b8e3f2afcda45fcf7ca9d9656 (diff) | |
download | lvm2-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.c | 22 |
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 */ |