Lines Matching refs:seg
38 struct lv_segment *seg)
43 if (sl->seg == seg) {
50 seg->lv->name, seg->le, lv->name);
58 sl->seg = seg;
65 struct lv_segment *seg)
70 if (sl->seg != seg)
76 "of %s", seg->lv->name, seg->le,
109 lv->name, sl->seg->lv->name, sl->seg->le, sl->count);
113 return sl->seg;
181 struct lv_segment *seg;
182 uint32_t areas_sz = area_count * sizeof(*seg->areas);
184 if (!(seg = dm_pool_zalloc(mem, sizeof(*seg))))
187 if (!(seg->areas = dm_pool_zalloc(mem, areas_sz))) {
188 dm_pool_free(mem, seg);
197 seg->segtype = segtype;
198 seg->lv = lv;
199 seg->le = le;
200 seg->len = len;
201 seg->status = status;
202 seg->stripe_size = stripe_size;
203 seg->area_count = area_count;
204 seg->area_len = area_len;
205 seg->chunk_size = chunk_size;
206 seg->region_size = region_size;
207 seg->extents_copied = extents_copied;
208 seg->log_lv = log_lv;
209 dm_list_init(&seg->tags);
211 if (log_lv && !attach_mirror_log(seg, log_lv))
214 return seg;
220 struct lv_segment *seg;
229 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv, old_le_count,
237 dm_list_add(&lv->segments, &seg->list);
240 return seg;
243 void release_lv_segment_area(struct lv_segment *seg, uint32_t s,
246 if (seg_type(seg, s) == AREA_UNASSIGNED)
249 if (seg_type(seg, s) == AREA_PV) {
250 if (release_pv_segment(seg_pvseg(seg, s), area_reduction) &&
251 seg->area_len == area_reduction)
252 seg_type(seg, s) = AREA_UNASSIGNED;
256 if (seg_lv(seg, s)->status & MIRROR_IMAGE) {
257 lv_reduce(seg_lv(seg, s), area_reduction);
261 if (area_reduction == seg->area_len) {
264 seg->lv->name, seg->le, s,
265 seg_lv(seg, s)->name, seg_le(seg, s));
267 remove_seg_from_segs_using_this_lv(seg_lv(seg, s), seg);
268 seg_lv(seg, s) = NULL;
269 seg_le(seg, s) = 0;
270 seg_type(seg, s) = AREA_UNASSIGNED;
321 int set_lv_segment_area_pv(struct lv_segment *seg, uint32_t area_num,
324 seg->areas[area_num].type = AREA_PV;
326 if (!(seg_pvseg(seg, area_num) =
327 assign_peg_to_lvseg(pv, pe, seg->area_len, seg, area_num)))
336 int set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num,
341 seg->lv->name, seg->le, area_num, lv->name, le);
343 seg->areas[area_num].type = AREA_LV;
344 seg_lv(seg, area_num) = lv;
345 seg_le(seg, area_num) = le;
348 if (!add_seg_to_segs_using_this_lv(lv, seg))
358 struct lv_segment *seg,
367 memcpy(newareas, seg->areas, seg->area_count * sizeof(*seg->areas));
369 seg->areas = newareas;
370 seg->area_count = new_area_count;
378 static int _lv_segment_reduce(struct lv_segment *seg, uint32_t reduction)
383 if (seg_is_striped(seg)) {
384 if (reduction % seg->area_count) {
387 reduction, seg->area_count);
390 area_reduction = (reduction / seg->area_count);
394 for (s = 0; s < seg->area_count; s++)
395 release_lv_segment_area(seg, s, area_reduction);
397 seg->len -= reduction;
398 seg->area_len -= area_reduction;
408 struct lv_segment *seg;
412 dm_list_iterate_back_items(seg, &lv->segments) {
416 if (seg->len <= count) {
419 if (seg->log_lv && !lv_remove(seg->log_lv))
421 dm_list_del(&seg->list);
422 reduction = seg->len;
426 if (!_lv_segment_reduce(seg, reduction))
513 uint32_t area_multiple; /* seg->len = area_len * area_multiple */
653 struct lv_segment *seg;
658 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
669 if (!set_lv_segment_area_pv(seg, s, aa[s].pv, aa[s].pe))
672 dm_list_add(&lv->segments, &seg->list);
796 struct lv_segment *seg;
801 if (!(seg = find_seg_by_le(lv, le))) {
808 remaining_seg_len = seg->len - (le - seg->le);
816 area_multiple = calc_area_multiple(seg->segtype, seg->area_count);
820 s < seg->area_count && (!max_areas || s <= max_areas);
822 if (seg_type(seg, s) == AREA_LV) {
823 if (!(r = _for_each_pv(cmd, seg_lv(seg, s),
824 seg_le(seg, s) +
825 (le - seg->le) / area_multiple,
833 } else if (seg_type(seg, s) == AREA_PV)
834 if (!(r = fn(cmd, seg_pvseg(seg, s), top_level_area_index != -1 ? (uint32_t) top_level_area_index : s, data)))
841 if (!only_single_area_segments && seg_is_mirrored(seg) && seg->log_lv) {
842 if (!(r = _for_each_pv(cmd, seg->log_lv, 0, seg->log_lv->le_count,
1286 struct lv_segment *seg;
1288 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
1295 dm_list_add(&lv->segments, &seg->list);
1398 static struct lv_segment *_convert_seg_to_mirror(struct lv_segment *seg,
1405 if (!seg_is_striped(seg)) {
1410 if (seg->area_count > 1) {
1416 if (!(newseg = alloc_lv_segment(seg->lv->vg->cmd->mem,
1417 get_segtype_from_string(seg->lv->vg->cmd, "mirror"),
1418 seg->lv, seg->le, seg->len,
1419 seg->status, seg->stripe_size,
1421 seg->area_count, seg->area_len,
1422 seg->chunk_size, region_size,
1423 seg->extents_copied))) {
1428 for (s = 0; s < seg->area_count; s++)
1429 if (!move_lv_segment_area(newseg, s, seg, s))
1432 dm_list_add(&seg->list, &newseg->list);
1433 dm_list_del(&seg->list);
1446 struct lv_segment *seg;
1451 if (!(seg = find_seg_by_le(lv, current_le))) {
1457 /* Allocator assures aa[0].len <= seg->area_len */
1458 if (aa[0].len < seg->area_len) {
1459 if (!lv_split_segment(lv, seg->le + aa[0].len)) {
1466 if (!seg_is_mirrored(seg) &&
1467 (!(seg = _convert_seg_to_mirror(seg, region_size, NULL))))
1470 old_area_count = seg->area_count;
1473 if (!_lv_segment_add_areas(lv, seg, new_area_count))
1477 if (!set_lv_segment_area_pv(seg, s + old_area_count,
1482 current_le += seg->area_len;
1502 struct lv_segment *seg;
1507 seg = first_seg(lv);
1509 if (dm_list_size(&lv->segments) != 1 || seg_type(seg, 0) != AREA_LV) {
1515 if (seg->segtype != mirror_segtype)
1516 if (!(seg = _convert_seg_to_mirror(seg, region_size, NULL)))
1519 if (region_size && region_size != seg->region_size) {
1524 old_area_count = seg->area_count;
1527 if (!_lv_segment_add_areas(lv, seg, new_area_count)) {
1534 seg_lv(seg, m)->status |= status;
1537 if (!set_lv_segment_area_lv(seg, m, sub_lvs[m - old_area_count],
1553 struct lv_segment *seg;
1560 if (!(seg = alloc_lv_segment(log_lv->vg->cmd->mem,
1569 if (!set_lv_segment_area_pv(seg, 0, ah->log_area.pv, ah->log_area.pe))
1572 dm_list_add(&log_lv->segments, &seg->list);
1587 struct lv_segment *seg;
1590 seg = first_seg(lv);
1591 for (m = first_area, s = 0; s < seg->area_count; s++) {
1592 if (is_temporary_mirror_layer(seg_lv(seg, s))) {
1593 if (!_lv_extend_mirror(ah, seg_lv(seg, s), extents, m))
1595 m += lv_mirror_count(seg_lv(seg, s));
1599 if (!lv_add_segment(ah, m++, 1, seg_lv(seg, s),
1604 seg_lv(seg, s)->name);
1608 seg->area_len += extents;
1609 seg->len += extents;
1738 struct lv_segment *seg;
1745 dm_list_iterate_items(seg, &lv->segments) {
1746 if (seg->log_lv && !func(cmd, seg->log_lv, data))
1748 for (s = 0; s < seg->area_count; s++) {
1749 if (seg_type(seg, s) != AREA_LV)
1751 if (!func(cmd, seg_lv(seg, s), data))
1753 if (!_for_each_sub_lv(cmd, seg_lv(seg, s), func, data))
2185 static int _split_parent_area(struct lv_segment *seg, uint32_t s,
2192 if (seg_is_striped(seg))
2193 area_multiple = seg->area_count;
2197 parent_area_len = seg->area_len;
2198 parent_le = seg->le;
2199 layer_le = seg_le(seg, s);
2205 seg->lv->name, parent_le);
2212 seg->lv->name, parent_le, s,
2213 seg_lv(seg, s)->name, layer_le);
2219 if (!lv_split_segment(seg->lv, parent_le))
2238 struct lv_segment *seg;
2252 dm_list_iterate_items(seg, &parent_lv->segments) {
2253 for (s = 0; s < seg->area_count; s++) {
2254 if (seg_type(seg, s) != AREA_LV ||
2255 seg_lv(seg, s) != layer_lv)
2258 if (!_split_parent_area(seg, s, parallel_areas))
2273 struct lv_segment *seg, *lseg;
2282 dm_list_iterate_items(seg, &lv->segments) {
2283 for (s = 0; s < seg->area_count; s++) {
2284 if (seg_type(seg, s) != AREA_LV ||
2285 seg_lv(seg, s) != layer_lv)
2289 if (!(lseg = find_seg_by_le(layer_lv, seg_le(seg, s)))) {
2291 layer_lv->name, seg_le(seg, s));
2308 if (lseg->le != seg_le(seg, s) ||
2309 lseg->area_len != seg->area_len) {
2314 lv->name, seg->le, seg->area_len,
2315 layer_lv->name, seg_le(seg, s),
2320 if (!move_lv_segment_area(seg, s, lseg, 0))
2379 struct lv_segment *seg;
2381 dm_list_iterate_items(seg, &lv_to->segments) {
2382 if (seg->origin) {
2392 dm_list_iterate_items(seg, &lv_to->segments) {
2393 seg->lv = lv_to;
2394 seg->status &= ~reset_status;
2395 seg->status |= set_status;
2547 struct lv_segment *seg, uint32_t s,
2552 struct physical_volume *src_pv = seg_pv(seg, s);
2553 uint32_t src_pe = seg_pe(seg, s);
2555 if (seg_type(seg, s) != AREA_PV && seg_type(seg, s) != AREA_LV)
2564 src_pe, src_pe + seg->area_len - 1,
2565 seg->lv->vg->name, seg->lv->name);
2570 seg->area_len, status, 0,
2571 NULL, 1, seg->area_len, 0, 0, 0)))
2575 if (!move_lv_segment_area(mapseg, 0, seg, s))
2580 layer_lv->le_count += seg->area_len;
2581 layer_lv->size += seg->area_len * layer_lv->vg->extent_size;
2584 if (!set_lv_segment_area_lv(seg, s, layer_lv, mapseg->le, 0))
2595 static int _match_seg_area_to_pe_range(struct lv_segment *seg, uint32_t s,
2604 if (seg_type(seg, s) != AREA_PV || seg_dev(seg, s) != pvl->pv->dev)
2607 pe_start = seg_pe(seg, s);
2616 /* FIXME Missing context in this message - add LV/seg details */
2619 per->start, per_end, dev_name(seg_dev(seg, s)),
2620 seg_pe(seg, s), seg->area_len);
2635 struct lv_segment *seg;
2643 dm_list_iterate_items(seg, &lv_where->segments) {
2644 for (s = 0; s < seg->area_count; s++) {
2645 if (seg_type(seg, s) != AREA_PV ||
2646 seg_dev(seg, s) != pvl->pv->dev)
2651 pe_start = seg_pe(seg, s);
2652 pe_end = pe_start + seg->area_len - 1;
2660 if (seg_is_striped(seg))
2661 stripe_multiplier = seg->area_count;
2667 !lv_split_segment(lv_where, seg->le +
2674 !lv_split_segment(lv_where, seg->le +
2699 struct lv_segment *seg;
2712 dm_list_iterate_items(seg, &lv_where->segments) {
2713 for (s = 0; s < seg->area_count; s++) {
2714 if (!_match_seg_area_to_pe_range(seg, s, pvl))
2728 if (!_extend_layer_lv_for_segment(layer_lv, seg, s,
2733 seg->le, seg->le + seg->len);