summaryrefslogtreecommitdiffstats
path: root/lib/metadata/lv_manip.c
diff options
context:
space:
mode:
authorJonathan Earl Brassow <jbrassow@redhat.com>2012-02-22 17:14:38 +0000
committerJonathan Earl Brassow <jbrassow@redhat.com>2012-02-22 17:14:38 +0000
commit0e92b70f714f32d9ef78e106e0e1aa89d15a9f90 (patch)
treec54a77f10eba73dd1f1af0b5005f2d1821236d30 /lib/metadata/lv_manip.c
parent7a5a5cb06fbdbe338f7481780803aa7c3777c326 (diff)
downloadlvm2-0e92b70f714f32d9ef78e106e0e1aa89d15a9f90.tar.gz
lvm2-0e92b70f714f32d9ef78e106e0e1aa89d15a9f90.tar.xz
lvm2-0e92b70f714f32d9ef78e106e0e1aa89d15a9f90.zip
*** empty log message ***
Diffstat (limited to 'lib/metadata/lv_manip.c')
-rw-r--r--lib/metadata/lv_manip.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 5d3fba5d..a8a52a49 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -3061,7 +3061,8 @@ struct dm_list *build_parallel_areas_from_lv(struct logical_volume *lv,
struct dm_list *parallel_areas;
struct seg_pvs *spvs;
uint32_t current_le = 0;
- struct lv_segment * uninitialized_var(seg);
+ uint32_t raid_multiple;
+ struct lv_segment *seg = first_seg(lv);
if (!(parallel_areas = dm_pool_alloc(cmd->mem, sizeof(*parallel_areas)))) {
log_error("parallel_areas allocation failed");
@@ -3100,7 +3101,9 @@ struct dm_list *build_parallel_areas_from_lv(struct logical_volume *lv,
return_NULL;
current_le = spvs->le + spvs->len;
- } while (current_le < lv->le_count);
+ raid_multiple = (seg->segtype->parity_devs) ?
+ seg->area_count - seg->segtype->parity_devs : 1;
+ } while ((current_le * raid_multiple) < lv->le_count);
/* FIXME Merge adjacent segments with identical PV lists (avoids need for contiguous allocation attempts between successful allocations) */