Lines Matching refs:lv

37 int add_seg_to_segs_using_this_lv(struct logical_volume *lv,
42 dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
50 seg->lv->name, seg->le, lv->name);
52 if (!(sl = dm_pool_zalloc(lv->vg->cmd->mem, sizeof(*sl)))) {
59 dm_list_add(&lv->segs_using_this_lv, &sl->list);
64 int remove_seg_from_segs_using_this_lv(struct logical_volume *lv,
69 dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
76 "of %s", seg->lv->name, seg->le,
77 lv->name);
91 * In general, walk through lv->segs_using_this_lv.
93 struct lv_segment *get_only_segment_using_this_lv(struct logical_volume *lv)
97 if (dm_list_size(&lv->segs_using_this_lv) != 1) {
99 "while it has %d", lv->name,
100 dm_list_size(&lv->segs_using_this_lv));
104 sl = dm_list_item(dm_list_first(&lv->segs_using_this_lv), struct seg_list);
109 lv->name, sl->seg->lv->name, sl->seg->le, sl->count);
142 uint32_t find_free_lvnum(struct logical_volume *lv)
151 dm_list_iterate_items(lvl, &lv->vg->lvs) {
152 lvnum = lvnum_from_lvid(&lvl->lv->lvid);
170 struct logical_volume *lv,
198 seg->lv = lv;
217 struct lv_segment *alloc_snapshot_seg(struct logical_volume *lv,
223 segtype = get_segtype_from_string(lv->vg->cmd, "snapshot");
229 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv, old_le_count,
230 lv->le_count - old_le_count, status, 0,
231 NULL, 0, lv->le_count - old_le_count,
237 dm_list_add(&lv->segments, &seg->list);
238 lv->status |= VIRTUAL;
264 seg->lv->name, seg->le, s,
281 struct logical_volume *lv;
299 lv = seg_lv(seg_from, area_from);
306 if (!set_lv_segment_area_lv(seg_to, area_to, lv, le, 0))
337 struct logical_volume *lv, uint32_t le,
341 seg->lv->name, seg->le, area_num, lv->name, le);
344 seg_lv(seg, area_num) = lv;
346 lv->status |= flags;
348 if (!add_seg_to_segs_using_this_lv(lv, seg))
357 static int _lv_segment_add_areas(struct logical_volume *lv,
364 if (!(newareas = dm_pool_zalloc(lv->vg->cmd->mem, areas_sz)))
406 static int _lv_reduce(struct logical_volume *lv, uint32_t extents, int delete)
412 dm_list_iterate_back_items(seg, &lv->segments) {
431 lv->le_count -= extents;
432 lv->size = (uint64_t) lv->le_count * lv->vg->extent_size;
438 if (!lv->le_count && !unlink_lv_from_vg(lv))
440 else if (lv->vg->fid->fmt->ops->lv_setup &&
441 !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
450 int lv_empty(struct logical_volume *lv)
452 return _lv_reduce(lv, lv->le_count, 0);
458 int replace_lv_with_error_segment(struct logical_volume *lv)
460 uint32_t len = lv->le_count;
462 if (!lv_empty(lv))
465 if (!lv_add_virtual_segment(lv, 0, len,
466 get_segtype_from_string(lv->vg->cmd,
476 int lv_reduce(struct logical_volume *lv, uint32_t extents)
478 return _lv_reduce(lv, extents, 1);
484 int lv_remove(struct logical_volume *lv)
487 if (!lv_reduce(lv, lv->le_count))
644 static int _setup_alloced_segment(struct logical_volume *lv, uint32_t status,
658 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
659 lv->le_count,
672 dm_list_add(&lv->segments, &seg->list);
675 lv->le_count += extents;
676 lv->size += (uint64_t) extents *lv->vg->extent_size;
679 lv->status |= MIRRORED;
684 static int _setup_alloced_segments(struct logical_volume *lv,
696 if (!_setup_alloced_segment(lv, status, area_count,
780 * Call fn for each AREA_PV used by the LV segment at lv:le of length *max_seg_len.
786 static int _for_each_pv(struct cmd_context *cmd, struct logical_volume *lv,
801 if (!(seg = find_seg_by_le(lv, le))) {
803 lv->name, le);
939 if (!(r = _for_each_pv(cmd, prev_lvseg->lv,
967 if (!(r = _for_each_pv(cmd, prev_lvseg->lv,
1191 struct logical_volume *lv,
1197 uint32_t allocated = lv ? lv->le_count : 0;
1213 if (lv && !dm_list_empty(&lv->segments))
1214 prev_lvseg = dm_list_item(dm_list_last(&lv->segments),
1263 lv ? lv->name : "",
1272 lv ? lv->name : "");
1283 int lv_add_virtual_segment(struct logical_volume *lv, uint32_t status,
1288 if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
1289 lv->le_count, extents, status, 0,
1295 dm_list_add(&lv->segments, &seg->list);
1297 lv->le_count += extents;
1298 lv->size += (uint64_t) extents *lv->vg->extent_size;
1300 lv->status |= VIRTUAL;
1309 struct logical_volume *lv,
1343 !_allocate(ah, vg, lv, (lv ? lv->le_count : 0) + extents,
1357 struct logical_volume *lv,
1374 if (!_setup_alloced_segments(lv, &ah->alloced_areas[first_area],
1380 if ((segtype->flags & SEG_CAN_SPLIT) && !lv_merge_segments(lv)) {
1386 if (lv->vg->fid->fmt->ops->lv_setup &&
1387 !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
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,
1442 struct logical_volume *lv, uint32_t le,
1451 if (!(seg = find_seg_by_le(lv, current_le))) {
1453 PRIu32, lv->name, current_le);
1459 if (!lv_split_segment(lv, seg->le + aa[0].len)) {
1461 "extent %" PRIu32, lv->name, le);
1473 if (!_lv_segment_add_areas(lv, seg, new_area_count))
1485 lv->status |= MIRRORED;
1487 if (lv->vg->fid->fmt->ops->lv_setup &&
1488 !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
1497 int lv_add_mirror_lvs(struct logical_volume *lv,
1507 seg = first_seg(lv);
1509 if (dm_list_size(&lv->segments) != 1 || seg_type(seg, 0) != AREA_LV) {
1514 mirror_segtype = get_segtype_from_string(lv->vg->cmd, "mirror");
1527 if (!_lv_segment_add_areas(lv, seg, new_area_count)) {
1529 lv->name);
1543 lv->status |= MIRRORED;
1584 struct logical_volume *lv,
1590 seg = first_seg(lv);
1600 get_segtype_from_string(lv->vg->cmd,
1610 lv->le_count += extents;
1611 lv->size += (uint64_t) extents *lv->vg->extent_size;
1619 int lv_extend(struct logical_volume *lv,
1632 return lv_add_virtual_segment(lv, status, extents, segtype);
1634 if (!(ah = allocate_extents(lv->vg, lv, segtype, stripes, mirrors, 0, 0,
1639 r = lv_add_segment(ah, 0, ah->area_count, lv, segtype,
1642 r = _lv_extend_mirror(ah, lv, extents, 0);
1653 static int _rename_single_lv(struct logical_volume *lv, char *new_name)
1655 struct volume_group *vg = lv->vg;
1663 if (lv->status & LOCKED) {
1664 log_error("Cannot rename locked LV %s", lv->name);
1668 lv->name = new_name;
1678 struct logical_volume *lv,
1689 if (strncmp(lv->name, lv_name_old, len) || lv->name[len] != '_') {
1692 lv_name_old, lv->name);
1695 suffix = lv->name + len;
1698 * Compose a new name for sub lv:
1715 return _rename_single_lv(lv, new_name);
1719 static int _rename_cb(struct cmd_context *cmd, struct logical_volume *lv,
1724 return _rename_sub_lv(cmd, lv, lv_names->old, lv_names->new);
1731 static int _for_each_sub_lv(struct cmd_context *cmd, struct logical_volume *lv,
1733 struct logical_volume *lv,
1741 if (lv_is_cow(lv) && lv_is_virtual_origin(org = origin_from_cow(lv)))
1745 dm_list_iterate_items(seg, &lv->segments) {
1766 int lv_rename(struct cmd_context *cmd, struct logical_volume *lv,
1769 struct volume_group *vg = lv->vg;
1776 if (!lv_is_visible(lv)) {
1777 log_error("Cannot rename internal LV \"%s\".", lv->name);
1787 if (lv->status & LOCKED) {
1788 log_error("Cannot rename locked LV %s", lv->name);
1796 lv_names.old = lv->name;
1798 if (!_for_each_sub_lv(cmd, lv, _rename_cb, (void *) &lv_names))
1802 if (!(lv->name = dm_pool_strdup(cmd->mem, new_name))) {
1807 lvl.lv = lv;
1811 if (lv_is_cow(lv) && lv_is_virtual_origin(lvl2.lv = origin_from_cow(lv)))
1840 if (sscanf(lvl->lv->name, format, &i) != 1)
1869 struct logical_volume *lv;
1871 if (!(lv = dm_pool_zalloc(mem, sizeof(*lv)))) {
1876 lv->snapshot = NULL;
1877 dm_list_init(&lv->snapshot_segs);
1878 dm_list_init(&lv->segments);
1879 dm_list_init(&lv->tags);
1880 dm_list_init(&lv->segs_using_this_lv);
1882 return lv;
1895 struct logical_volume *lv;
1914 if (!(lv = alloc_lv(vg->vgmem)))
1917 if (!(lv->name = dm_pool_strdup(vg->vgmem, name)))
1920 lv->status = status;
1921 lv->alloc = alloc;
1922 lv->read_ahead = vg->cmd->default_settings.read_ahead;
1923 lv->major = -1;
1924 lv->minor = -1;
1925 lv->size = UINT64_C(0);
1926 lv->le_count = 0;
1929 lv->lvid = *lvid;
1931 if (!link_lv_to_vg(vg, lv))
1934 if (fi->fmt->ops->lv_setup && !fi->fmt->ops->lv_setup(fi, lv))
1937 return lv;
1939 dm_pool_free(vg->vgmem, lv);
1969 struct logical_volume *lv)
1991 spvs->len = lv->le_count - current_le;
1997 if (!_for_each_pv(cmd, lv, current_le, spvs->len, &spvs->len,
2002 } while (current_le < lv->le_count);
2009 int link_lv_to_vg(struct volume_group *vg, struct logical_volume *lv)
2019 lvl->lv = lv;
2020 lv->vg = vg;
2026 int unlink_lv_from_vg(struct logical_volume *lv)
2030 if (!(lvl = find_lv_in_vg(lv->vg, lv->name)))
2038 void lv_set_visible(struct logical_volume *lv)
2040 if (lv_is_visible(lv))
2043 lv->status |= VISIBLE_LV;
2045 log_debug("LV %s in VG %s is now visible.", lv->name, lv->vg->name);
2048 void lv_set_hidden(struct logical_volume *lv)
2050 if (!lv_is_visible(lv))
2053 lv->status &= ~VISIBLE_LV;
2055 log_debug("LV %s in VG %s is now hidden.", lv->name, lv->vg->name);
2058 int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
2065 vg = lv->vg;
2070 if (lv_is_origin(lv)) {
2072 lv->name);
2076 if (lv->status & MIRROR_IMAGE) {
2078 lv->name);
2082 if (lv->status & MIRROR_LOG) {
2084 lv->name);
2088 if (lv->status & LOCKED) {
2089 log_error("Can't remove locked LV %s", lv->name);
2095 if (lv_info(cmd, lv, &info, 1, 0)) {
2098 lv->name);
2102 if (lv_is_active(lv) && (force == PROMPT) &&
2103 lv_is_visible(lv) &&
2107 lv->name) == 'n') {
2108 log_print("Logical volume %s not removed", lv->name);
2117 if (!deactivate_lv(cmd, lv)) {
2119 lv->name);
2123 if (lv_is_cow(lv)) {
2124 origin = origin_from_cow(lv);
2125 log_verbose("Removing snapshot %s", lv->name);
2126 if (!vg_remove_snapshot(lv))
2130 log_verbose("Releasing logical volume \"%s\"", lv->name);
2131 if (!lv_remove(lv)) {
2132 log_error("Error releasing logical volume \"%s\"", lv->name);
2150 if (lv_is_visible(lv))
2151 log_print("Logical volume \"%s\" successfully removed", lv->name);
2159 int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *lv,
2164 if (lv_is_origin(lv)) {
2166 dm_list_iterate_safe(snh, snht, &lv->snapshot_segs) {
2174 return lv_remove_single(cmd, lv, force);
2205 seg->lv->name, parent_le);
2212 seg->lv->name, parent_le, s,
2219 if (!lv_split_segment(seg->lv, parent_le))
2247 parent_lv = lvl->lv;
2269 struct logical_volume *lv,
2279 layer_lv->name, lv->name);
2282 dm_list_iterate_items(seg, &lv->segments) {
2314 lv->name, seg->le, seg->area_len,
2325 get_segtype_from_string(lv->vg->cmd, "error"))) {
2337 lvl->lv = lv;
2343 if (lv_changed && !lv_merge_segments(lv))
2360 lv1 = lvl->lv;
2393 seg->lv = lv_to;
2410 int remove_layer_from_lv(struct logical_volume *lv,
2417 log_very_verbose("Removing layer %s for %s", layer_lv->name, lv->name);
2421 layer_lv->name, lv->name);
2424 parent = parent_seg->lv;
2444 segtype = get_segtype_from_string(lv->vg->cmd, "error");
2565 seg->lv->vg->name, seg->lv->name);
2723 lvl->lv = lv_where;
2745 int set_lv(struct cmd_context *cmd, struct logical_volume *lv,
2764 lv->vg->name, lv->name) < 0) {
2765 log_error("Name too long - device not cleared (%s)", lv->name);
2770 lv->vg->name, lv->name) < 0) {
2771 log_error("Name too long - device not cleared (%s)", lv->name);
2775 log_verbose("Clearing start of logical volume \"%s\"", lv->name);
2788 if (sectors > lv->size)
2789 sectors = lv->size;
2808 struct logical_volume *lv;
2822 if (!(lv = lv_create_empty(vorigin_name, NULL, permission,
2826 if (!lv_extend(lv, segtype, 1, 0, 1, voriginextents, NULL, 0u, 0u,
2836 return lv;
2845 struct logical_volume *lv, *org = NULL;
3026 if (!(lv = lv_create_empty(lv_name ? lv_name : "lvol%d", NULL,
3032 lv->read_ahead = lp->read_ahead;
3036 lv->major = lp->major;
3037 lv->minor = lp->minor;
3038 lv->status |= FIXED_MINOR;
3039 log_verbose("Setting device number to (%d, %d)", lv->major,
3040 lv->minor);
3043 if (lp->tag && !str_list_add(cmd->mem, &lv->tags, lp->tag)) {
3045 lp->tag, lv->vg->name, lv->name);
3049 if (!lv_extend(lv, lp->segtype, lp->stripes, lp->stripe_size,
3054 if (!lv_add_mirrors(cmd, lv, lp->mirrors - 1, lp->stripes,
3057 lv->le_count,
3074 if (!activate_lv_excl(cmd, lv)) {
3079 } else if (!activate_lv(cmd, lv)) {
3090 log_error("WARNING: \"%s\" not zeroed", lv->name);
3091 else if (!set_lv(cmd, lv, UINT64_C(0), 0)) {
3101 lv->status &= ~LVM_WRITE;
3104 if (!origin_active && !deactivate_lv(cmd, lv)) {
3112 (!(org = _create_virtual_origin(cmd, vg, lv->name,
3117 lv->name);
3125 if (!vg_add_snapshot(org, lv, NULL,
3152 log_print("Logical volume \"%s\" created", lv->name);
3162 if (!deactivate_lv(cmd, lv)) {
3170 if (!lv_remove(lv) || !vg_write(vg) || !vg_commit(vg))