Home | History | Annotate | Line # | Download | only in metadata
      1 /*	$NetBSD: lv_manip.c,v 1.4 2009/12/02 00:58:03 haad Exp $	*/
      2 
      3 /*
      4  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
      5  * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
      6  *
      7  * This file is part of LVM2.
      8  *
      9  * This copyrighted material is made available to anyone wishing to use,
     10  * modify, copy, or redistribute it subject to the terms and conditions
     11  * of the GNU Lesser General Public License v.2.1.
     12  *
     13  * You should have received a copy of the GNU Lesser General Public License
     14  * along with this program; if not, write to the Free Software Foundation,
     15  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     16  */
     17 
     18 #include "lib.h"
     19 #include "metadata.h"
     20 #include "locking.h"
     21 #include "pv_map.h"
     22 #include "lvm-string.h"
     23 #include "toolcontext.h"
     24 #include "lv_alloc.h"
     25 #include "pv_alloc.h"
     26 #include "display.h"
     27 #include "segtype.h"
     28 #include "archiver.h"
     29 #include "activate.h"
     30 #include "str_list.h"
     31 
     32 struct lv_names {
     33 	const char *old;
     34 	const char *new;
     35 };
     36 
     37 int add_seg_to_segs_using_this_lv(struct logical_volume *lv,
     38 				  struct lv_segment *seg)
     39 {
     40 	struct seg_list *sl;
     41 
     42 	dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
     43 		if (sl->seg == seg) {
     44 			sl->count++;
     45 			return 1;
     46 		}
     47 	}
     48 
     49 	log_very_verbose("Adding %s:%" PRIu32 " as an user of %s",
     50 			 seg->lv->name, seg->le, lv->name);
     51 
     52 	if (!(sl = dm_pool_zalloc(lv->vg->cmd->mem, sizeof(*sl)))) {
     53 		log_error("Failed to allocate segment list");
     54 		return 0;
     55 	}
     56 
     57 	sl->count = 1;
     58 	sl->seg = seg;
     59 	dm_list_add(&lv->segs_using_this_lv, &sl->list);
     60 
     61 	return 1;
     62 }
     63 
     64 int remove_seg_from_segs_using_this_lv(struct logical_volume *lv,
     65 				       struct lv_segment *seg)
     66 {
     67 	struct seg_list *sl;
     68 
     69 	dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
     70 		if (sl->seg != seg)
     71 			continue;
     72 		if (sl->count > 1)
     73 			sl->count--;
     74 		else {
     75 			log_very_verbose("%s:%" PRIu32 " is no longer a user "
     76 					 "of %s", seg->lv->name, seg->le,
     77 					 lv->name);
     78 			dm_list_del(&sl->list);
     79 		}
     80 		return 1;
     81 	}
     82 
     83 	return 0;
     84 }
     85 
     86 /*
     87  * This is a function specialized for the common case where there is
     88  * only one segment which uses the LV.
     89  * e.g. the LV is a layer inserted by insert_layer_for_lv().
     90  *
     91  * In general, walk through lv->segs_using_this_lv.
     92  */
     93 struct lv_segment *get_only_segment_using_this_lv(struct logical_volume *lv)
     94 {
     95 	struct seg_list *sl;
     96 
     97 	if (dm_list_size(&lv->segs_using_this_lv) != 1) {
     98 		log_error("%s is expected to have only one segment using it, "
     99 			  "while it has %d", lv->name,
    100 			  dm_list_size(&lv->segs_using_this_lv));
    101 		return NULL;
    102 	}
    103 
    104 	sl = dm_list_item(dm_list_first(&lv->segs_using_this_lv), struct seg_list);
    105 
    106 	if (sl->count != 1) {
    107 		log_error("%s is expected to have only one segment using it, "
    108 			  "while %s:%" PRIu32 " uses it %d times",
    109 			  lv->name, sl->seg->lv->name, sl->seg->le, sl->count);
    110 		return NULL;
    111 	}
    112 
    113 	return sl->seg;
    114 }
    115 
    116 /*
    117  * PVs used by a segment of an LV
    118  */
    119 struct seg_pvs {
    120 	struct dm_list list;
    121 
    122 	struct dm_list pvs;	/* struct pv_list */
    123 
    124 	uint32_t le;
    125 	uint32_t len;
    126 };
    127 
    128 static struct seg_pvs *_find_seg_pvs_by_le(struct dm_list *list, uint32_t le)
    129 {
    130 	struct seg_pvs *spvs;
    131 
    132 	dm_list_iterate_items(spvs, list)
    133 		if (le >= spvs->le && le < spvs->le + spvs->len)
    134 			return spvs;
    135 
    136 	return NULL;
    137 }
    138 
    139 /*
    140  * Find first unused LV number.
    141  */
    142 uint32_t find_free_lvnum(struct logical_volume *lv)
    143 {
    144 	int lvnum_used[MAX_RESTRICTED_LVS + 1];
    145 	uint32_t i = 0;
    146 	struct lv_list *lvl;
    147 	int lvnum;
    148 
    149 	memset(&lvnum_used, 0, sizeof(lvnum_used));
    150 
    151 	dm_list_iterate_items(lvl, &lv->vg->lvs) {
    152 		lvnum = lvnum_from_lvid(&lvl->lv->lvid);
    153 		if (lvnum <= MAX_RESTRICTED_LVS)
    154 			lvnum_used[lvnum] = 1;
    155 	}
    156 
    157 	while (lvnum_used[i])
    158 		i++;
    159 
    160 	/* FIXME What if none are free? */
    161 
    162 	return i;
    163 }
    164 
    165 /*
    166  * All lv_segments get created here.
    167  */
    168 struct lv_segment *alloc_lv_segment(struct dm_pool *mem,
    169 				    const struct segment_type *segtype,
    170 				    struct logical_volume *lv,
    171 				    uint32_t le, uint32_t len,
    172 				    uint32_t status,
    173 				    uint32_t stripe_size,
    174 				    struct logical_volume *log_lv,
    175 				    uint32_t area_count,
    176 				    uint32_t area_len,
    177 				    uint32_t chunk_size,
    178 				    uint32_t region_size,
    179 				    uint32_t extents_copied)
    180 {
    181 	struct lv_segment *seg;
    182 	uint32_t areas_sz = area_count * sizeof(*seg->areas);
    183 
    184 	if (!(seg = dm_pool_zalloc(mem, sizeof(*seg))))
    185 		return_NULL;
    186 
    187 	if (!(seg->areas = dm_pool_zalloc(mem, areas_sz))) {
    188 		dm_pool_free(mem, seg);
    189 		return_NULL;
    190 	}
    191 
    192 	if (!segtype) {
    193 		log_error("alloc_lv_segment: Missing segtype.");
    194 		return NULL;
    195 	}
    196 
    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);
    210 
    211 	if (log_lv && !attach_mirror_log(seg, log_lv))
    212 		return_NULL;
    213 
    214 	return seg;
    215 }
    216 
    217 struct lv_segment *alloc_snapshot_seg(struct logical_volume *lv,
    218 				      uint32_t status, uint32_t old_le_count)
    219 {
    220 	struct lv_segment *seg;
    221 	const struct segment_type *segtype;
    222 
    223 	segtype = get_segtype_from_string(lv->vg->cmd, "snapshot");
    224 	if (!segtype) {
    225 		log_error("Failed to find snapshot segtype");
    226 		return NULL;
    227 	}
    228 
    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,
    232 				     0, 0, 0))) {
    233 		log_error("Couldn't allocate new snapshot segment.");
    234 		return NULL;
    235 	}
    236 
    237 	dm_list_add(&lv->segments, &seg->list);
    238 	lv->status |= VIRTUAL;
    239 
    240 	return seg;
    241 }
    242 
    243 void release_lv_segment_area(struct lv_segment *seg, uint32_t s,
    244 			     uint32_t area_reduction)
    245 {
    246 	if (seg_type(seg, s) == AREA_UNASSIGNED)
    247 		return;
    248 
    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;
    253 		return;
    254 	}
    255 
    256 	if (seg_lv(seg, s)->status & MIRROR_IMAGE) {
    257 		lv_reduce(seg_lv(seg, s), area_reduction);
    258 		return;
    259 	}
    260 
    261 	if (area_reduction == seg->area_len) {
    262 		log_very_verbose("Remove %s:%" PRIu32 "[%" PRIu32 "] from "
    263 				 "the top of LV %s:%" PRIu32,
    264 				 seg->lv->name, seg->le, s,
    265 				 seg_lv(seg, s)->name, seg_le(seg, s));
    266 
    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;
    271 	}
    272 }
    273 
    274 /*
    275  * Move a segment area from one segment to another
    276  */
    277 int move_lv_segment_area(struct lv_segment *seg_to, uint32_t area_to,
    278 			 struct lv_segment *seg_from, uint32_t area_from)
    279 {
    280 	struct physical_volume *pv;
    281 	struct logical_volume *lv;
    282 	uint32_t pe, le;
    283 
    284 	switch (seg_type(seg_from, area_from)) {
    285 	case AREA_PV:
    286 		pv = seg_pv(seg_from, area_from);
    287 		pe = seg_pe(seg_from, area_from);
    288 
    289 		release_lv_segment_area(seg_from, area_from,
    290 					seg_from->area_len);
    291 		release_lv_segment_area(seg_to, area_to, seg_to->area_len);
    292 
    293 		if (!set_lv_segment_area_pv(seg_to, area_to, pv, pe))
    294 			return_0;
    295 
    296 		break;
    297 
    298 	case AREA_LV:
    299 		lv = seg_lv(seg_from, area_from);
    300 		le = seg_le(seg_from, area_from);
    301 
    302 		release_lv_segment_area(seg_from, area_from,
    303 					seg_from->area_len);
    304 		release_lv_segment_area(seg_to, area_to, seg_to->area_len);
    305 
    306 		if (!set_lv_segment_area_lv(seg_to, area_to, lv, le, 0))
    307 			return_0;
    308 
    309 		break;
    310 
    311 	case AREA_UNASSIGNED:
    312 		release_lv_segment_area(seg_to, area_to, seg_to->area_len);
    313 	}
    314 
    315 	return 1;
    316 }
    317 
    318 /*
    319  * Link part of a PV to an LV segment.
    320  */
    321 int set_lv_segment_area_pv(struct lv_segment *seg, uint32_t area_num,
    322 			   struct physical_volume *pv, uint32_t pe)
    323 {
    324 	seg->areas[area_num].type = AREA_PV;
    325 
    326 	if (!(seg_pvseg(seg, area_num) =
    327 	      assign_peg_to_lvseg(pv, pe, seg->area_len, seg, area_num)))
    328 		return_0;
    329 
    330 	return 1;
    331 }
    332 
    333 /*
    334  * Link one LV segment to another.  Assumes sizes already match.
    335  */
    336 int set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num,
    337 			   struct logical_volume *lv, uint32_t le,
    338 			   uint32_t flags)
    339 {
    340 	log_very_verbose("Stack %s:%" PRIu32 "[%" PRIu32 "] on LV %s:%" PRIu32,
    341 			 seg->lv->name, seg->le, area_num, lv->name, le);
    342 
    343 	seg->areas[area_num].type = AREA_LV;
    344 	seg_lv(seg, area_num) = lv;
    345 	seg_le(seg, area_num) = le;
    346 	lv->status |= flags;
    347 
    348 	if (!add_seg_to_segs_using_this_lv(lv, seg))
    349 		return_0;
    350 
    351 	return 1;
    352 }
    353 
    354 /*
    355  * Prepare for adding parallel areas to an existing segment.
    356  */
    357 static int _lv_segment_add_areas(struct logical_volume *lv,
    358 				 struct lv_segment *seg,
    359 				 uint32_t new_area_count)
    360 {
    361 	struct lv_segment_area *newareas;
    362 	uint32_t areas_sz = new_area_count * sizeof(*newareas);
    363 
    364 	if (!(newareas = dm_pool_zalloc(lv->vg->cmd->mem, areas_sz)))
    365 		return_0;
    366 
    367 	memcpy(newareas, seg->areas, seg->area_count * sizeof(*seg->areas));
    368 
    369 	seg->areas = newareas;
    370 	seg->area_count = new_area_count;
    371 
    372 	return 1;
    373 }
    374 
    375 /*
    376  * Reduce the size of an lv_segment.  New size can be zero.
    377  */
    378 static int _lv_segment_reduce(struct lv_segment *seg, uint32_t reduction)
    379 {
    380 	uint32_t area_reduction, s;
    381 
    382 	/* Caller must ensure exact divisibility */
    383 	if (seg_is_striped(seg)) {
    384 		if (reduction % seg->area_count) {
    385 			log_error("Segment extent reduction %" PRIu32
    386 				  "not divisible by #stripes %" PRIu32,
    387 				  reduction, seg->area_count);
    388 			return 0;
    389 		}
    390 		area_reduction = (reduction / seg->area_count);
    391 	} else
    392 		area_reduction = reduction;
    393 
    394 	for (s = 0; s < seg->area_count; s++)
    395 		release_lv_segment_area(seg, s, area_reduction);
    396 
    397 	seg->len -= reduction;
    398 	seg->area_len -= area_reduction;
    399 
    400 	return 1;
    401 }
    402 
    403 /*
    404  * Entry point for all LV reductions in size.
    405  */
    406 static int _lv_reduce(struct logical_volume *lv, uint32_t extents, int delete)
    407 {
    408 	struct lv_segment *seg;
    409 	uint32_t count = extents;
    410 	uint32_t reduction;
    411 
    412 	dm_list_iterate_back_items(seg, &lv->segments) {
    413 		if (!count)
    414 			break;
    415 
    416 		if (seg->len <= count) {
    417 			/* remove this segment completely */
    418 			/* FIXME Check this is safe */
    419 			if (seg->log_lv && !lv_remove(seg->log_lv))
    420 				return_0;
    421 			dm_list_del(&seg->list);
    422 			reduction = seg->len;
    423 		} else
    424 			reduction = count;
    425 
    426 		if (!_lv_segment_reduce(seg, reduction))
    427 			return_0;
    428 		count -= reduction;
    429 	}
    430 
    431 	lv->le_count -= extents;
    432 	lv->size = (uint64_t) lv->le_count * lv->vg->extent_size;
    433 
    434 	if (!delete)
    435 		return 1;
    436 
    437 	/* Remove the LV if it is now empty */
    438 	if (!lv->le_count && !unlink_lv_from_vg(lv))
    439 		return_0;
    440 	else if (lv->vg->fid->fmt->ops->lv_setup &&
    441 		   !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
    442 		return_0;
    443 
    444 	return 1;
    445 }
    446 
    447 /*
    448  * Empty an LV.
    449  */
    450 int lv_empty(struct logical_volume *lv)
    451 {
    452 	return _lv_reduce(lv, lv->le_count, 0);
    453 }
    454 
    455 /*
    456  * Empty an LV and add error segment.
    457  */
    458 int replace_lv_with_error_segment(struct logical_volume *lv)
    459 {
    460 	uint32_t len = lv->le_count;
    461 
    462 	if (!lv_empty(lv))
    463 		return_0;
    464 
    465 	if (!lv_add_virtual_segment(lv, 0, len,
    466 				    get_segtype_from_string(lv->vg->cmd,
    467 							    "error")))
    468 		return_0;
    469 
    470 	return 1;
    471 }
    472 
    473 /*
    474  * Remove given number of extents from LV.
    475  */
    476 int lv_reduce(struct logical_volume *lv, uint32_t extents)
    477 {
    478 	return _lv_reduce(lv, extents, 1);
    479 }
    480 
    481 /*
    482  * Completely remove an LV.
    483  */
    484 int lv_remove(struct logical_volume *lv)
    485 {
    486 
    487 	if (!lv_reduce(lv, lv->le_count))
    488 		return_0;
    489 
    490 	return 1;
    491 }
    492 
    493 /*
    494  * A set of contiguous physical extents allocated
    495  */
    496 struct alloced_area {
    497 	struct dm_list list;
    498 
    499 	struct physical_volume *pv;
    500 	uint32_t pe;
    501 	uint32_t len;
    502 };
    503 
    504 /*
    505  * Details of an allocation attempt
    506  */
    507 struct alloc_handle {
    508 	struct cmd_context *cmd;
    509 	struct dm_pool *mem;
    510 
    511 	alloc_policy_t alloc;		/* Overall policy */
    512 	uint32_t area_count;		/* Number of parallel areas */
    513 	uint32_t area_multiple;		/* seg->len = area_len * area_multiple */
    514 	uint32_t log_count;		/* Number of parallel 1-extent logs */
    515 	uint32_t log_region_size;	/* region size for log device */
    516 	uint32_t total_area_len;	/* Total number of parallel extents */
    517 
    518 	struct dm_list *parallel_areas;	/* PVs to avoid */
    519 
    520 	struct alloced_area log_area;	/* Extent used for log */
    521 	struct dm_list alloced_areas[0];	/* Lists of areas in each stripe */
    522 };
    523 
    524 static uint32_t calc_area_multiple(const struct segment_type *segtype,
    525 				   const uint32_t area_count)
    526 {
    527 	if (!segtype_is_striped(segtype) || !area_count)
    528 		return 1;
    529 
    530 	return area_count;
    531 }
    532 
    533 /*
    534  * Preparation for a specific allocation attempt
    535  */
    536 static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
    537 					struct dm_pool *mem,
    538 					const struct segment_type *segtype,
    539 					alloc_policy_t alloc,
    540 					uint32_t mirrors,
    541 					uint32_t stripes,
    542 					uint32_t log_count,
    543 					uint32_t log_region_size,
    544 					struct dm_list *parallel_areas)
    545 {
    546 	struct alloc_handle *ah;
    547 	uint32_t s, area_count;
    548 
    549 	if (stripes > 1 && mirrors > 1) {
    550 		log_error("Striped mirrors are not supported yet");
    551 		return NULL;
    552 	}
    553 
    554 	if (log_count && stripes > 1) {
    555 		log_error("Can't mix striping with a mirror log yet.");
    556 		return NULL;
    557 	}
    558 
    559 	if (segtype_is_virtual(segtype))
    560 		area_count = 0;
    561 	else if (mirrors > 1)
    562 		area_count = mirrors;
    563 	else
    564 		area_count = stripes;
    565 
    566 	if (!(ah = dm_pool_zalloc(mem, sizeof(*ah) + sizeof(ah->alloced_areas[0]) * area_count))) {
    567 		log_error("allocation handle allocation failed");
    568 		return NULL;
    569 	}
    570 
    571 	if (segtype_is_virtual(segtype))
    572 		return ah;
    573 
    574 	ah->cmd = cmd;
    575 
    576 	if (!(ah->mem = dm_pool_create("allocation", 1024))) {
    577 		log_error("allocation pool creation failed");
    578 		return NULL;
    579 	}
    580 
    581 	ah->area_count = area_count;
    582 	ah->log_count = log_count;
    583 	ah->log_region_size = log_region_size;
    584 	ah->alloc = alloc;
    585 	ah->area_multiple = calc_area_multiple(segtype, area_count);
    586 
    587 	for (s = 0; s < ah->area_count; s++)
    588 		dm_list_init(&ah->alloced_areas[s]);
    589 
    590 	ah->parallel_areas = parallel_areas;
    591 
    592 	return ah;
    593 }
    594 
    595 void alloc_destroy(struct alloc_handle *ah)
    596 {
    597 	if (ah->mem)
    598 		dm_pool_destroy(ah->mem);
    599 }
    600 
    601 static int _log_parallel_areas(struct dm_pool *mem, struct dm_list *parallel_areas)
    602 {
    603 	struct seg_pvs *spvs;
    604 	struct pv_list *pvl;
    605 	char *pvnames;
    606 
    607 	if (!parallel_areas)
    608 		return 1;
    609 
    610 	dm_list_iterate_items(spvs, parallel_areas) {
    611 		if (!dm_pool_begin_object(mem, 256)) {
    612 			log_error("dm_pool_begin_object failed");
    613 			return 0;
    614 		}
    615 
    616 		dm_list_iterate_items(pvl, &spvs->pvs) {
    617 			if (!dm_pool_grow_object(mem, pv_dev_name(pvl->pv), strlen(pv_dev_name(pvl->pv)))) {
    618 				log_error("dm_pool_grow_object failed");
    619 				dm_pool_abandon_object(mem);
    620 				return 0;
    621 			}
    622 			if (!dm_pool_grow_object(mem, " ", 1)) {
    623 				log_error("dm_pool_grow_object failed");
    624 				dm_pool_abandon_object(mem);
    625 				return 0;
    626 			}
    627 		}
    628 
    629 		if (!dm_pool_grow_object(mem, "\0", 1)) {
    630 			log_error("dm_pool_grow_object failed");
    631 			dm_pool_abandon_object(mem);
    632 			return 0;
    633 		}
    634 
    635 		pvnames = dm_pool_end_object(mem);
    636 		log_debug("Parallel PVs at LE %" PRIu32 " length %" PRIu32 ": %s",
    637 			  spvs->le, spvs->len, pvnames);
    638 		dm_pool_free(mem, pvnames);
    639 	}
    640 
    641 	return 1;
    642 }
    643 
    644 static int _setup_alloced_segment(struct logical_volume *lv, uint32_t status,
    645 				  uint32_t area_count,
    646 				  uint32_t stripe_size,
    647 				  const struct segment_type *segtype,
    648 				  struct alloced_area *aa,
    649 				  uint32_t region_size,
    650 				  struct logical_volume *log_lv __attribute((unused)))
    651 {
    652 	uint32_t s, extents, area_multiple;
    653 	struct lv_segment *seg;
    654 
    655 	area_multiple = calc_area_multiple(segtype, area_count);
    656 
    657 	/* log_lv gets set up elsehere */
    658 	if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
    659 				     lv->le_count,
    660 				     aa[0].len * area_multiple,
    661 				     status, stripe_size, NULL,
    662 				     area_count,
    663 				     aa[0].len, 0u, region_size, 0u))) {
    664 		log_error("Couldn't allocate new LV segment.");
    665 		return 0;
    666 	}
    667 
    668 	for (s = 0; s < area_count; s++)
    669 		if (!set_lv_segment_area_pv(seg, s, aa[s].pv, aa[s].pe))
    670 			return_0;
    671 
    672 	dm_list_add(&lv->segments, &seg->list);
    673 
    674 	extents = aa[0].len * area_multiple;
    675 	lv->le_count += extents;
    676 	lv->size += (uint64_t) extents *lv->vg->extent_size;
    677 
    678 	if (segtype_is_mirrored(segtype))
    679 		lv->status |= MIRRORED;
    680 
    681 	return 1;
    682 }
    683 
    684 static int _setup_alloced_segments(struct logical_volume *lv,
    685 				   struct dm_list *alloced_areas,
    686 				   uint32_t area_count,
    687 				   uint32_t status,
    688 				   uint32_t stripe_size,
    689 				   const struct segment_type *segtype,
    690 				   uint32_t region_size,
    691 				   struct logical_volume *log_lv)
    692 {
    693 	struct alloced_area *aa;
    694 
    695 	dm_list_iterate_items(aa, &alloced_areas[0]) {
    696 		if (!_setup_alloced_segment(lv, status, area_count,
    697 					    stripe_size, segtype, aa,
    698 					    region_size, log_lv))
    699 			return_0;
    700 	}
    701 
    702 	return 1;
    703 }
    704 
    705 /*
    706  * Returns log device size in extents, algorithm from kernel code
    707  */
    708 #define BYTE_SHIFT 3
    709 static uint32_t mirror_log_extents(uint32_t region_size, uint32_t pe_size, uint32_t area_len)
    710 {
    711 	size_t area_size, bitset_size, log_size, region_count;
    712 
    713 	area_size = area_len * pe_size;
    714 	region_count = dm_div_up(area_size, region_size);
    715 
    716 	/* Work out how many "unsigned long"s we need to hold the bitset. */
    717 	bitset_size = dm_round_up(region_count, sizeof(uint32_t) << BYTE_SHIFT);
    718 	bitset_size >>= BYTE_SHIFT;
    719 
    720 	/* Log device holds both header and bitset. */
    721 	log_size = dm_round_up((MIRROR_LOG_OFFSET << SECTOR_SHIFT) + bitset_size, 1 << SECTOR_SHIFT);
    722 	log_size >>= SECTOR_SHIFT;
    723 
    724 	return dm_div_up(log_size, pe_size);
    725 }
    726 
    727 /*
    728  * This function takes a list of pv_areas and adds them to allocated_areas.
    729  * If the complete area is not needed then it gets split.
    730  * The part used is removed from the pv_map so it can't be allocated twice.
    731  */
    732 static int _alloc_parallel_area(struct alloc_handle *ah, uint32_t needed,
    733 				struct pv_area **areas,
    734 				uint32_t *ix, struct pv_area *log_area,
    735 				uint32_t log_len)
    736 {
    737 	uint32_t area_len, remaining;
    738 	uint32_t s;
    739 	struct alloced_area *aa;
    740 
    741 	remaining = needed - *ix;
    742 	area_len = remaining / ah->area_multiple;
    743 
    744 	/* Reduce area_len to the smallest of the areas */
    745 	for (s = 0; s < ah->area_count; s++)
    746 		if (area_len > areas[s]->count)
    747 			area_len = areas[s]->count;
    748 
    749 	if (!(aa = dm_pool_alloc(ah->mem, sizeof(*aa) *
    750 			      (ah->area_count + (log_area ? 1 : 0))))) {
    751 		log_error("alloced_area allocation failed");
    752 		return 0;
    753 	}
    754 
    755 	for (s = 0; s < ah->area_count; s++) {
    756 		aa[s].pv = areas[s]->map->pv;
    757 		aa[s].pe = areas[s]->start;
    758 		aa[s].len = area_len;
    759 		dm_list_add(&ah->alloced_areas[s], &aa[s].list);
    760 	}
    761 
    762 	ah->total_area_len += area_len;
    763 
    764 	for (s = 0; s < ah->area_count; s++)
    765 		consume_pv_area(areas[s], area_len);
    766 
    767 	if (log_area) {
    768 		ah->log_area.pv = log_area->map->pv;
    769 		ah->log_area.pe = log_area->start;
    770 		ah->log_area.len = log_len;
    771 		consume_pv_area(log_area, ah->log_area.len);
    772 	}
    773 
    774 	*ix += area_len * ah->area_multiple;
    775 
    776 	return 1;
    777 }
    778 
    779 /*
    780  * Call fn for each AREA_PV used by the LV segment at lv:le of length *max_seg_len.
    781  * If any constituent area contains more than one segment, max_seg_len is
    782  * reduced to cover only the first.
    783  * fn should return 0 on error, 1 to continue scanning or >1 to terminate without error.
    784  * In the last case, this function passes on the return code.
    785  */
    786 static int _for_each_pv(struct cmd_context *cmd, struct logical_volume *lv,
    787 			uint32_t le, uint32_t len, uint32_t *max_seg_len,
    788 			uint32_t first_area, uint32_t max_areas,
    789 			int top_level_area_index,
    790 			int only_single_area_segments,
    791 			int (*fn)(struct cmd_context *cmd,
    792 				  struct pv_segment *peg, uint32_t s,
    793 				  void *data),
    794 			void *data)
    795 {
    796 	struct lv_segment *seg;
    797 	uint32_t s;
    798 	uint32_t remaining_seg_len, area_len, area_multiple;
    799 	int r = 1;
    800 
    801 	if (!(seg = find_seg_by_le(lv, le))) {
    802 		log_error("Failed to find segment for %s extent %" PRIu32,
    803 			  lv->name, le);
    804 		return 0;
    805 	}
    806 
    807 	/* Remaining logical length of segment */
    808 	remaining_seg_len = seg->len - (le - seg->le);
    809 
    810 	if (remaining_seg_len > len)
    811 		remaining_seg_len = len;
    812 
    813 	if (max_seg_len && *max_seg_len > remaining_seg_len)
    814 		*max_seg_len = remaining_seg_len;
    815 
    816 	area_multiple = calc_area_multiple(seg->segtype, seg->area_count);
    817 	area_len = remaining_seg_len / area_multiple ? : 1;
    818 
    819 	for (s = first_area;
    820 	     s < seg->area_count && (!max_areas || s <= max_areas);
    821 	     s++) {
    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,
    826 					       area_len, max_seg_len,
    827 					       only_single_area_segments ? 0 : 0,
    828 					       only_single_area_segments ? 1U : 0U,
    829 					       top_level_area_index != -1 ? top_level_area_index : (int) s,
    830 					       only_single_area_segments, fn,
    831 					       data)))
    832 				stack;
    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)))
    835 				stack;
    836 		if (r != 1)
    837 			return r;
    838 	}
    839 
    840 	/* FIXME only_single_area_segments used as workaround to skip log LV - needs new param? */
    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,
    843 				       NULL, 0, 0, 0, only_single_area_segments,
    844 				       fn, data)))
    845 			stack;
    846 		if (r != 1)
    847 			return r;
    848 	}
    849 
    850 	/* FIXME Add snapshot cow LVs etc. */
    851 
    852 	return 1;
    853 }
    854 
    855 static int _comp_area(const void *l, const void *r)
    856 {
    857 	const struct pv_area *lhs = *((const struct pv_area **) l);
    858 	const struct pv_area *rhs = *((const struct pv_area **) r);
    859 
    860 	if (lhs->count < rhs->count)
    861 		return 1;
    862 
    863 	else if (lhs->count > rhs->count)
    864 		return -1;
    865 
    866 	return 0;
    867 }
    868 
    869 /*
    870  * Search for pvseg that matches condition
    871  */
    872 struct pv_match {
    873 	int (*condition)(struct pv_segment *pvseg, struct pv_area *pva);
    874 
    875 	struct pv_area **areas;
    876 	struct pv_area *pva;
    877 	uint32_t areas_size;
    878 	int s;	/* Area index of match */
    879 };
    880 
    881 /*
    882  * Is PV area on the same PV?
    883  */
    884 static int _is_same_pv(struct pv_segment *pvseg, struct pv_area *pva)
    885 {
    886 	if (pvseg->pv != pva->map->pv)
    887 		return 0;
    888 
    889 	return 1;
    890 }
    891 
    892 /*
    893  * Is PV area contiguous to PV segment?
    894  */
    895 static int _is_contiguous(struct pv_segment *pvseg, struct pv_area *pva)
    896 {
    897 	if (pvseg->pv != pva->map->pv)
    898 		return 0;
    899 
    900 	if (pvseg->pe + pvseg->len != pva->start)
    901 		return 0;
    902 
    903 	return 1;
    904 }
    905 
    906 static int _is_condition(struct cmd_context *cmd __attribute((unused)),
    907 			 struct pv_segment *pvseg, uint32_t s,
    908 			 void *data)
    909 {
    910 	struct pv_match *pvmatch = data;
    911 
    912 	if (!pvmatch->condition(pvseg, pvmatch->pva))
    913 		return 1;	/* Continue */
    914 
    915 	if (s >= pvmatch->areas_size)
    916 		return 1;
    917 
    918 	pvmatch->areas[s] = pvmatch->pva;
    919 
    920 	return 2;	/* Finished */
    921 }
    922 
    923 /*
    924  * Is pva on same PV as any existing areas?
    925  */
    926 static int _check_cling(struct cmd_context *cmd,
    927 			struct lv_segment *prev_lvseg, struct pv_area *pva,
    928 			struct pv_area **areas, uint32_t areas_size)
    929 {
    930 	struct pv_match pvmatch;
    931 	int r;
    932 
    933 	pvmatch.condition = _is_same_pv;
    934 	pvmatch.areas = areas;
    935 	pvmatch.areas_size = areas_size;
    936 	pvmatch.pva = pva;
    937 
    938 	/* FIXME Cope with stacks by flattening */
    939 	if (!(r = _for_each_pv(cmd, prev_lvseg->lv,
    940 			       prev_lvseg->le + prev_lvseg->len - 1, 1, NULL,
    941 			       0, 0, -1, 1,
    942 			       _is_condition, &pvmatch)))
    943 		stack;
    944 
    945 	if (r != 2)
    946 		return 0;
    947 
    948 	return 1;
    949 }
    950 
    951 /*
    952  * Is pva contiguous to any existing areas or on the same PV?
    953  */
    954 static int _check_contiguous(struct cmd_context *cmd,
    955 			     struct lv_segment *prev_lvseg, struct pv_area *pva,
    956 			     struct pv_area **areas, uint32_t areas_size)
    957 {
    958 	struct pv_match pvmatch;
    959 	int r;
    960 
    961 	pvmatch.condition = _is_contiguous;
    962 	pvmatch.areas = areas;
    963 	pvmatch.areas_size = areas_size;
    964 	pvmatch.pva = pva;
    965 
    966 	/* FIXME Cope with stacks by flattening */
    967 	if (!(r = _for_each_pv(cmd, prev_lvseg->lv,
    968 			       prev_lvseg->le + prev_lvseg->len - 1, 1, NULL,
    969 			       0, 0, -1, 1,
    970 			       _is_condition, &pvmatch)))
    971 		stack;
    972 
    973 	if (r != 2)
    974 		return 0;
    975 
    976 	return 1;
    977 }
    978 
    979 /*
    980  * Choose sets of parallel areas to use, respecting any constraints.
    981  */
    982 static int _find_parallel_space(struct alloc_handle *ah, alloc_policy_t alloc,
    983 				struct dm_list *pvms, struct pv_area **areas,
    984 				uint32_t areas_size, unsigned can_split,
    985 				struct lv_segment *prev_lvseg,
    986 				uint32_t *allocated, uint32_t needed)
    987 {
    988 	struct pv_map *pvm;
    989 	struct pv_area *pva;
    990 	struct pv_list *pvl;
    991 	unsigned already_found_one = 0;
    992 	unsigned contiguous = 0, cling = 0, preferred_count = 0;
    993 	unsigned ix;
    994 	unsigned ix_offset = 0;	/* Offset for non-preferred allocations */
    995 	unsigned too_small_for_log_count; /* How many too small for log? */
    996 	uint32_t max_parallel;	/* Maximum extents to allocate */
    997 	uint32_t next_le;
    998 	struct seg_pvs *spvs;
    999 	struct dm_list *parallel_pvs;
   1000 	uint32_t free_pes;
   1001 	uint32_t log_len;
   1002 	struct pv_area *log_area;
   1003 	unsigned log_needs_allocating;
   1004 
   1005 	/* Is there enough total space? */
   1006 	free_pes = pv_maps_size(pvms);
   1007 	if (needed - *allocated > free_pes) {
   1008 		log_error("Insufficient free space: %" PRIu32 " extents needed,"
   1009 			  " but only %" PRIu32 " available",
   1010 			  needed - *allocated, free_pes);
   1011 		return 0;
   1012 	}
   1013 
   1014 	/* FIXME Select log PV appropriately if there isn't one yet */
   1015 
   1016 	/* Are there any preceding segments we must follow on from? */
   1017 	if (prev_lvseg) {
   1018 		ix_offset = prev_lvseg->area_count;
   1019 		if ((alloc == ALLOC_CONTIGUOUS))
   1020 			contiguous = 1;
   1021 		else if ((alloc == ALLOC_CLING))
   1022 			cling = 1;
   1023 		else
   1024 			ix_offset = 0;
   1025 	}
   1026 
   1027 	/* FIXME This algorithm needs a lot of cleaning up! */
   1028 	/* FIXME anywhere doesn't find all space yet */
   1029 	/* ix_offset holds the number of allocations that must be contiguous */
   1030 	/* ix holds the number of areas found on other PVs */
   1031 	do {
   1032 		ix = 0;
   1033 		preferred_count = 0;
   1034 
   1035 		parallel_pvs = NULL;
   1036 		max_parallel = needed;
   1037 
   1038 		/*
   1039 		 * If there are existing parallel PVs, avoid them and reduce
   1040 		 * the maximum we can allocate in one go accordingly.
   1041 		 */
   1042 		if (ah->parallel_areas) {
   1043 			next_le = (prev_lvseg ? prev_lvseg->le + prev_lvseg->len : 0) + *allocated / ah->area_multiple;
   1044 			dm_list_iterate_items(spvs, ah->parallel_areas) {
   1045 				if (next_le >= spvs->le + spvs->len)
   1046 					continue;
   1047 
   1048 				if (max_parallel > (spvs->le + spvs->len) * ah->area_multiple)
   1049 					max_parallel = (spvs->le + spvs->len) * ah->area_multiple;
   1050 				parallel_pvs = &spvs->pvs;
   1051 				break;
   1052 			}
   1053 		}
   1054 
   1055 		/*
   1056 		 * Put the smallest area of each PV that is at least the
   1057 		 * size we need into areas array.  If there isn't one
   1058 		 * that fits completely and we're allowed more than one
   1059 		 * LV segment, then take the largest remaining instead.
   1060 		 */
   1061 		dm_list_iterate_items(pvm, pvms) {
   1062 			if (dm_list_empty(&pvm->areas))
   1063 				continue;	/* Next PV */
   1064 
   1065 			if (alloc != ALLOC_ANYWHERE) {
   1066 				/* Don't allocate onto the log pv */
   1067 				if (ah->log_count &&
   1068 				    pvm->pv == ah->log_area.pv)
   1069 					continue;	/* Next PV */
   1070 
   1071 				/* Avoid PVs used by existing parallel areas */
   1072 				if (parallel_pvs)
   1073 					dm_list_iterate_items(pvl, parallel_pvs)
   1074 						if (pvm->pv == pvl->pv)
   1075 							goto next_pv;
   1076 			}
   1077 
   1078 			already_found_one = 0;
   1079 			/* First area in each list is the largest */
   1080 			dm_list_iterate_items(pva, &pvm->areas) {
   1081 				if (contiguous) {
   1082 					if (prev_lvseg &&
   1083 					    _check_contiguous(ah->cmd,
   1084 							      prev_lvseg,
   1085 							      pva, areas,
   1086 							      areas_size)) {
   1087 						preferred_count++;
   1088 						goto next_pv;
   1089 					}
   1090 					continue;
   1091 				}
   1092 
   1093 				if (cling) {
   1094 					if (prev_lvseg &&
   1095 					    _check_cling(ah->cmd,
   1096 							   prev_lvseg,
   1097 							   pva, areas,
   1098 							   areas_size)) {
   1099 						preferred_count++;
   1100 					}
   1101 					goto next_pv;
   1102 				}
   1103 
   1104 				/* Is it big enough on its own? */
   1105 				if (pva->count * ah->area_multiple <
   1106 				    max_parallel - *allocated &&
   1107 				    ((!can_split && !ah->log_count) ||
   1108 				     (already_found_one &&
   1109 				      !(alloc == ALLOC_ANYWHERE))))
   1110 					goto next_pv;
   1111 
   1112 				if (!already_found_one ||
   1113 				    alloc == ALLOC_ANYWHERE) {
   1114 					ix++;
   1115 					already_found_one = 1;
   1116 				}
   1117 
   1118 				areas[ix + ix_offset - 1] = pva;
   1119 
   1120 				goto next_pv;
   1121 			}
   1122 		next_pv:
   1123 			if (ix >= areas_size)
   1124 				break;
   1125 		}
   1126 
   1127 		if ((contiguous || cling) && (preferred_count < ix_offset))
   1128 			break;
   1129 
   1130 		log_needs_allocating = (ah->log_count && !ah->log_area.len) ?
   1131 				       1 : 0;
   1132 
   1133 		if (ix + ix_offset < ah->area_count +
   1134 		   (log_needs_allocating ? ah->log_count : 0))
   1135 			break;
   1136 
   1137 		/* sort the areas so we allocate from the biggest */
   1138 		if (ix > 1)
   1139 			qsort(areas + ix_offset, ix, sizeof(*areas),
   1140 			      _comp_area);
   1141 
   1142 		/*
   1143 		 * First time around, if there's a log, allocate it on the
   1144 		 * smallest device that has space for it.
   1145 		 *
   1146 		 * FIXME decide which PV to use at top of function instead
   1147 		 */
   1148 
   1149 		too_small_for_log_count = 0;
   1150 
   1151 		if (!log_needs_allocating) {
   1152 			log_len = 0;
   1153 			log_area = NULL;
   1154 		} else {
   1155 			log_len = mirror_log_extents(ah->log_region_size,
   1156 			    pv_pe_size((*areas)->map->pv),
   1157 			    (max_parallel - *allocated) / ah->area_multiple);
   1158 
   1159 			/* How many areas are too small for the log? */
   1160 			while (too_small_for_log_count < ix_offset + ix &&
   1161 			       (*(areas + ix_offset + ix - 1 -
   1162 				  too_small_for_log_count))->count < log_len)
   1163 				too_small_for_log_count++;
   1164 
   1165 			log_area = *(areas + ix_offset + ix - 1 -
   1166 				     too_small_for_log_count);
   1167 		}
   1168 
   1169 		if (ix + ix_offset < ah->area_count +
   1170 		    (log_needs_allocating ? ah->log_count +
   1171 					    too_small_for_log_count : 0))
   1172 			/* FIXME With ALLOC_ANYWHERE, need to split areas */
   1173 			break;
   1174 
   1175 		if (!_alloc_parallel_area(ah, max_parallel, areas, allocated,
   1176 					  log_area, log_len))
   1177 			return_0;
   1178 
   1179 	} while (!contiguous && *allocated != needed && can_split);
   1180 
   1181 	return 1;
   1182 }
   1183 
   1184 /*
   1185  * Allocate several segments, each the same size, in parallel.
   1186  * If mirrored_pv and mirrored_pe are supplied, it is used as
   1187  * the first area, and additional areas are allocated parallel to it.
   1188  */
   1189 static int _allocate(struct alloc_handle *ah,
   1190 		     struct volume_group *vg,
   1191 		     struct logical_volume *lv,
   1192 		     uint32_t new_extents,
   1193 		     unsigned can_split,
   1194 		     struct dm_list *allocatable_pvs)
   1195 {
   1196 	struct pv_area **areas;
   1197 	uint32_t allocated = lv ? lv->le_count : 0;
   1198 	uint32_t old_allocated;
   1199 	struct lv_segment *prev_lvseg = NULL;
   1200 	int r = 0;
   1201 	struct dm_list *pvms;
   1202 	uint32_t areas_size;
   1203 	alloc_policy_t alloc;
   1204 
   1205 	if (allocated >= new_extents && !ah->log_count) {
   1206 		log_error("_allocate called with no work to do!");
   1207 		return 1;
   1208 	}
   1209 
   1210 	if (ah->alloc == ALLOC_CONTIGUOUS)
   1211 		can_split = 0;
   1212 
   1213 	if (lv && !dm_list_empty(&lv->segments))
   1214 		prev_lvseg = dm_list_item(dm_list_last(&lv->segments),
   1215 				       struct lv_segment);
   1216 	/*
   1217 	 * Build the sets of available areas on the pv's.
   1218 	 */
   1219 	if (!(pvms = create_pv_maps(ah->mem, vg, allocatable_pvs)))
   1220 		return_0;
   1221 
   1222 	if (!_log_parallel_areas(ah->mem, ah->parallel_areas))
   1223 		stack;
   1224 
   1225 	areas_size = dm_list_size(pvms);
   1226 	if (areas_size && areas_size < (ah->area_count + ah->log_count)) {
   1227 		if (ah->alloc != ALLOC_ANYWHERE) {
   1228 			log_error("Not enough PVs with free space available "
   1229 				  "for parallel allocation.");
   1230 			log_error("Consider --alloc anywhere if desperate.");
   1231 			return 0;
   1232 		}
   1233 		areas_size = ah->area_count + ah->log_count;
   1234 	}
   1235 
   1236 	/* Upper bound if none of the PVs in prev_lvseg is in pvms */
   1237 	/* FIXME Work size out properly */
   1238 	if (prev_lvseg)
   1239 		areas_size += prev_lvseg->area_count;
   1240 
   1241 	/* Allocate an array of pv_areas to hold the largest space on each PV */
   1242 	if (!(areas = dm_malloc(sizeof(*areas) * areas_size))) {
   1243 		log_error("Couldn't allocate areas array.");
   1244 		return 0;
   1245 	}
   1246 
   1247 	/* Attempt each defined allocation policy in turn */
   1248 	for (alloc = ALLOC_CONTIGUOUS; alloc < ALLOC_INHERIT; alloc++) {
   1249 		old_allocated = allocated;
   1250 		if (!_find_parallel_space(ah, alloc, pvms, areas,
   1251 					  areas_size, can_split,
   1252 					  prev_lvseg, &allocated, new_extents))
   1253 			goto_out;
   1254 		if ((allocated == new_extents) || (ah->alloc == alloc) ||
   1255 		    (!can_split && (allocated != old_allocated)))
   1256 			break;
   1257 	}
   1258 
   1259 	if (allocated != new_extents) {
   1260 		log_error("Insufficient suitable %sallocatable extents "
   1261 			  "for logical volume %s: %u more required",
   1262 			  can_split ? "" : "contiguous ",
   1263 			  lv ? lv->name : "",
   1264 			  (new_extents - allocated) * ah->area_count
   1265 			  / ah->area_multiple);
   1266 		goto out;
   1267 	}
   1268 
   1269 	if (ah->log_count && !ah->log_area.len) {
   1270 		log_error("Insufficient extents for log allocation "
   1271 			  "for logical volume %s.",
   1272 			  lv ? lv->name : "");
   1273 		goto out;
   1274 	}
   1275 
   1276 	r = 1;
   1277 
   1278       out:
   1279 	dm_free(areas);
   1280 	return r;
   1281 }
   1282 
   1283 int lv_add_virtual_segment(struct logical_volume *lv, uint32_t status,
   1284 			   uint32_t extents, const struct segment_type *segtype)
   1285 {
   1286 	struct lv_segment *seg;
   1287 
   1288 	if (!(seg = alloc_lv_segment(lv->vg->cmd->mem, segtype, lv,
   1289 				     lv->le_count, extents, status, 0,
   1290 				     NULL, 0, extents, 0, 0, 0))) {
   1291 		log_error("Couldn't allocate new zero segment.");
   1292 		return 0;
   1293 	}
   1294 
   1295 	dm_list_add(&lv->segments, &seg->list);
   1296 
   1297 	lv->le_count += extents;
   1298 	lv->size += (uint64_t) extents *lv->vg->extent_size;
   1299 
   1300 	lv->status |= VIRTUAL;
   1301 
   1302 	return 1;
   1303 }
   1304 
   1305 /*
   1306  * Entry point for all extent allocations.
   1307  */
   1308 struct alloc_handle *allocate_extents(struct volume_group *vg,
   1309 				      struct logical_volume *lv,
   1310 				      const struct segment_type *segtype,
   1311 				      uint32_t stripes,
   1312 				      uint32_t mirrors, uint32_t log_count,
   1313 				      uint32_t log_region_size, uint32_t extents,
   1314 				      struct dm_list *allocatable_pvs,
   1315 				      alloc_policy_t alloc,
   1316 				      struct dm_list *parallel_areas)
   1317 {
   1318 	struct alloc_handle *ah;
   1319 
   1320 	if (segtype_is_virtual(segtype)) {
   1321 		log_error("allocate_extents does not handle virtual segments");
   1322 		return NULL;
   1323 	}
   1324 
   1325 	if (vg->fid->fmt->ops->segtype_supported &&
   1326 	    !vg->fid->fmt->ops->segtype_supported(vg->fid, segtype)) {
   1327 		log_error("Metadata format (%s) does not support required "
   1328 			  "LV segment type (%s).", vg->fid->fmt->name,
   1329 			  segtype->name);
   1330 		log_error("Consider changing the metadata format by running "
   1331 			  "vgconvert.");
   1332 		return NULL;
   1333 	}
   1334 
   1335 	if (alloc == ALLOC_INHERIT)
   1336 		alloc = vg->alloc;
   1337 
   1338 	if (!(ah = _alloc_init(vg->cmd, vg->cmd->mem, segtype, alloc, mirrors,
   1339 			       stripes, log_count, log_region_size, parallel_areas)))
   1340 		return_NULL;
   1341 
   1342 	if (!segtype_is_virtual(segtype) &&
   1343 	    !_allocate(ah, vg, lv, (lv ? lv->le_count : 0) + extents,
   1344 		       1, allocatable_pvs)) {
   1345 		alloc_destroy(ah);
   1346 		return_NULL;
   1347 	}
   1348 
   1349 	return ah;
   1350 }
   1351 
   1352 /*
   1353  * Add new segments to an LV from supplied list of areas.
   1354  */
   1355 int lv_add_segment(struct alloc_handle *ah,
   1356 		   uint32_t first_area, uint32_t num_areas,
   1357 		   struct logical_volume *lv,
   1358 		   const struct segment_type *segtype,
   1359 		   uint32_t stripe_size,
   1360 		   uint32_t status,
   1361 		   uint32_t region_size,
   1362 		   struct logical_volume *log_lv)
   1363 {
   1364 	if (!segtype) {
   1365 		log_error("Missing segtype in lv_add_segment().");
   1366 		return 0;
   1367 	}
   1368 
   1369 	if (segtype_is_virtual(segtype)) {
   1370 		log_error("lv_add_segment cannot handle virtual segments");
   1371 		return 0;
   1372 	}
   1373 
   1374 	if (!_setup_alloced_segments(lv, &ah->alloced_areas[first_area],
   1375 				     num_areas, status,
   1376 				     stripe_size, segtype,
   1377 				     region_size, log_lv))
   1378 		return_0;
   1379 
   1380 	if ((segtype->flags & SEG_CAN_SPLIT) && !lv_merge_segments(lv)) {
   1381 		log_error("Couldn't merge segments after extending "
   1382 			  "logical volume.");
   1383 		return 0;
   1384 	}
   1385 
   1386 	if (lv->vg->fid->fmt->ops->lv_setup &&
   1387 	    !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
   1388 		return_0;
   1389 
   1390 	return 1;
   1391 }
   1392 
   1393 /*
   1394  * "mirror" segment type doesn't support split.
   1395  * So, when adding mirrors to linear LV segment, first split it,
   1396  * then convert it to "mirror" and add areas.
   1397  */
   1398 static struct lv_segment *_convert_seg_to_mirror(struct lv_segment *seg,
   1399 						 uint32_t region_size,
   1400 						 struct logical_volume *log_lv)
   1401 {
   1402 	struct lv_segment *newseg;
   1403 	uint32_t s;
   1404 
   1405 	if (!seg_is_striped(seg)) {
   1406 		log_error("Can't convert non-striped segment to mirrored.");
   1407 		return NULL;
   1408 	}
   1409 
   1410 	if (seg->area_count > 1) {
   1411 		log_error("Can't convert striped segment with multiple areas "
   1412 			  "to mirrored.");
   1413 		return NULL;
   1414 	}
   1415 
   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,
   1420 					log_lv,
   1421 					seg->area_count, seg->area_len,
   1422 					seg->chunk_size, region_size,
   1423 					seg->extents_copied))) {
   1424 		log_error("Couldn't allocate converted LV segment");
   1425 		return NULL;
   1426 	}
   1427 
   1428 	for (s = 0; s < seg->area_count; s++)
   1429 		if (!move_lv_segment_area(newseg, s, seg, s))
   1430 			return_NULL;
   1431 
   1432 	dm_list_add(&seg->list, &newseg->list);
   1433 	dm_list_del(&seg->list);
   1434 
   1435 	return newseg;
   1436 }
   1437 
   1438 /*
   1439  * Add new areas to mirrored segments
   1440  */
   1441 int lv_add_mirror_areas(struct alloc_handle *ah,
   1442 			struct logical_volume *lv, uint32_t le,
   1443 			uint32_t region_size)
   1444 {
   1445 	struct alloced_area *aa;
   1446 	struct lv_segment *seg;
   1447 	uint32_t current_le = le;
   1448 	uint32_t s, old_area_count, new_area_count;
   1449 
   1450 	dm_list_iterate_items(aa, &ah->alloced_areas[0]) {
   1451 		if (!(seg = find_seg_by_le(lv, current_le))) {
   1452 			log_error("Failed to find segment for %s extent %"
   1453 				  PRIu32, lv->name, current_le);
   1454 			return 0;
   1455 		}
   1456 
   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)) {
   1460 				log_error("Failed to split segment at %s "
   1461 					  "extent %" PRIu32, lv->name, le);
   1462 				return 0;
   1463 			}
   1464 		}
   1465 
   1466 		if (!seg_is_mirrored(seg) &&
   1467 		    (!(seg = _convert_seg_to_mirror(seg, region_size, NULL))))
   1468 			return_0;
   1469 
   1470 		old_area_count = seg->area_count;
   1471 		new_area_count = old_area_count + ah->area_count;
   1472 
   1473 		if (!_lv_segment_add_areas(lv, seg, new_area_count))
   1474 			return_0;
   1475 
   1476 		for (s = 0; s < ah->area_count; s++) {
   1477 			if (!set_lv_segment_area_pv(seg, s + old_area_count,
   1478 						    aa[s].pv, aa[s].pe))
   1479 				return_0;
   1480 		}
   1481 
   1482 		current_le += seg->area_len;
   1483 	}
   1484 
   1485 	lv->status |= MIRRORED;
   1486 
   1487 	if (lv->vg->fid->fmt->ops->lv_setup &&
   1488 	    !lv->vg->fid->fmt->ops->lv_setup(lv->vg->fid, lv))
   1489 		return_0;
   1490 
   1491 	return 1;
   1492 }
   1493 
   1494 /*
   1495  * Add mirror image LVs to mirrored segments
   1496  */
   1497 int lv_add_mirror_lvs(struct logical_volume *lv,
   1498 		      struct logical_volume **sub_lvs,
   1499 		      uint32_t num_extra_areas,
   1500 		      uint32_t status, uint32_t region_size)
   1501 {
   1502 	struct lv_segment *seg;
   1503 	uint32_t old_area_count, new_area_count;
   1504 	uint32_t m;
   1505 	struct segment_type *mirror_segtype;
   1506 
   1507 	seg = first_seg(lv);
   1508 
   1509 	if (dm_list_size(&lv->segments) != 1 || seg_type(seg, 0) != AREA_LV) {
   1510 		log_error("Mirror layer must be inserted before adding mirrors");
   1511 		return_0;
   1512 	}
   1513 
   1514 	mirror_segtype = get_segtype_from_string(lv->vg->cmd, "mirror");
   1515 	if (seg->segtype != mirror_segtype)
   1516 		if (!(seg = _convert_seg_to_mirror(seg, region_size, NULL)))
   1517 			return_0;
   1518 
   1519 	if (region_size && region_size != seg->region_size) {
   1520 		log_error("Conflicting region_size");
   1521 		return 0;
   1522 	}
   1523 
   1524 	old_area_count = seg->area_count;
   1525 	new_area_count = old_area_count + num_extra_areas;
   1526 
   1527 	if (!_lv_segment_add_areas(lv, seg, new_area_count)) {
   1528 		log_error("Failed to allocate widened LV segment for %s.",
   1529 			  lv->name);
   1530 		return 0;
   1531 	}
   1532 
   1533 	for (m = 0; m < old_area_count; m++)
   1534 		seg_lv(seg, m)->status |= status;
   1535 
   1536 	for (m = old_area_count; m < new_area_count; m++) {
   1537 		if (!set_lv_segment_area_lv(seg, m, sub_lvs[m - old_area_count],
   1538 					    0, status))
   1539 			return_0;
   1540 		lv_set_hidden(sub_lvs[m - old_area_count]);
   1541 	}
   1542 
   1543 	lv->status |= MIRRORED;
   1544 
   1545 	return 1;
   1546 }
   1547 
   1548 /*
   1549  * Turn an empty LV into a mirror log.
   1550  */
   1551 int lv_add_log_segment(struct alloc_handle *ah, struct logical_volume *log_lv)
   1552 {
   1553 	struct lv_segment *seg;
   1554 
   1555 	if (dm_list_size(&log_lv->segments)) {
   1556 		log_error("Log segments can only be added to an empty LV");
   1557 		return 0;
   1558 	}
   1559 
   1560 	if (!(seg = alloc_lv_segment(log_lv->vg->cmd->mem,
   1561 				     get_segtype_from_string(log_lv->vg->cmd,
   1562 							     "striped"),
   1563 				     log_lv, 0, ah->log_area.len, MIRROR_LOG,
   1564 				     0, NULL, 1, ah->log_area.len, 0, 0, 0))) {
   1565 		log_error("Couldn't allocate new mirror log segment.");
   1566 		return 0;
   1567 	}
   1568 
   1569 	if (!set_lv_segment_area_pv(seg, 0, ah->log_area.pv, ah->log_area.pe))
   1570 		return_0;
   1571 
   1572 	dm_list_add(&log_lv->segments, &seg->list);
   1573 	log_lv->le_count += ah->log_area.len;
   1574 	log_lv->size += (uint64_t) log_lv->le_count * log_lv->vg->extent_size;
   1575 
   1576 	if (log_lv->vg->fid->fmt->ops->lv_setup &&
   1577 	    !log_lv->vg->fid->fmt->ops->lv_setup(log_lv->vg->fid, log_lv))
   1578 		return_0;
   1579 
   1580 	return 1;
   1581 }
   1582 
   1583 static int _lv_extend_mirror(struct alloc_handle *ah,
   1584 			     struct logical_volume *lv,
   1585 			     uint32_t extents, uint32_t first_area)
   1586 {
   1587 	struct lv_segment *seg;
   1588 	uint32_t m, s;
   1589 
   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))
   1594 				return_0;
   1595 			m += lv_mirror_count(seg_lv(seg, s));
   1596 			continue;
   1597 		}
   1598 
   1599 		if (!lv_add_segment(ah, m++, 1, seg_lv(seg, s),
   1600 				    get_segtype_from_string(lv->vg->cmd,
   1601 							    "striped"),
   1602 				    0, 0, 0, NULL)) {
   1603 			log_error("Aborting. Failed to extend %s.",
   1604 				  seg_lv(seg, s)->name);
   1605 			return 0;
   1606 		}
   1607 	}
   1608 	seg->area_len += extents;
   1609 	seg->len += extents;
   1610 	lv->le_count += extents;
   1611 	lv->size += (uint64_t) extents *lv->vg->extent_size;
   1612 
   1613 	return 1;
   1614 }
   1615 
   1616 /*
   1617  * Entry point for single-step LV allocation + extension.
   1618  */
   1619 int lv_extend(struct logical_volume *lv,
   1620 	      const struct segment_type *segtype,
   1621 	      uint32_t stripes, uint32_t stripe_size,
   1622 	      uint32_t mirrors, uint32_t extents,
   1623 	      struct physical_volume *mirrored_pv __attribute((unused)),
   1624 	      uint32_t mirrored_pe __attribute((unused)),
   1625 	      uint32_t status, struct dm_list *allocatable_pvs,
   1626 	      alloc_policy_t alloc)
   1627 {
   1628 	int r = 1;
   1629 	struct alloc_handle *ah;
   1630 
   1631 	if (segtype_is_virtual(segtype))
   1632 		return lv_add_virtual_segment(lv, status, extents, segtype);
   1633 
   1634 	if (!(ah = allocate_extents(lv->vg, lv, segtype, stripes, mirrors, 0, 0,
   1635 				    extents, allocatable_pvs, alloc, NULL)))
   1636 		return_0;
   1637 
   1638 	if (mirrors < 2)
   1639 		r = lv_add_segment(ah, 0, ah->area_count, lv, segtype,
   1640 				   stripe_size, status, 0, NULL);
   1641 	else
   1642 		r = _lv_extend_mirror(ah, lv, extents, 0);
   1643 
   1644 	alloc_destroy(ah);
   1645 	return r;
   1646 }
   1647 
   1648 /*
   1649  * Minimal LV renaming function.
   1650  * Metadata transaction should be made by caller.
   1651  * Assumes new_name is allocated from cmd->mem pool.
   1652  */
   1653 static int _rename_single_lv(struct logical_volume *lv, char *new_name)
   1654 {
   1655 	struct volume_group *vg = lv->vg;
   1656 
   1657 	if (find_lv_in_vg(vg, new_name)) {
   1658 		log_error("Logical volume \"%s\" already exists in "
   1659 			  "volume group \"%s\"", new_name, vg->name);
   1660 		return 0;
   1661 	}
   1662 
   1663 	if (lv->status & LOCKED) {
   1664 		log_error("Cannot rename locked LV %s", lv->name);
   1665 		return 0;
   1666 	}
   1667 
   1668 	lv->name = new_name;
   1669 
   1670 	return 1;
   1671 }
   1672 
   1673 /*
   1674  * Rename sub LV.
   1675  * 'lv_name_old' and 'lv_name_new' are old and new names of the main LV.
   1676  */
   1677 static int _rename_sub_lv(struct cmd_context *cmd,
   1678 			  struct logical_volume *lv,
   1679 			  const char *lv_name_old, const char *lv_name_new)
   1680 {
   1681 	char *suffix, *new_name;
   1682 	size_t len;
   1683 
   1684 	/*
   1685 	 * A sub LV name starts with lv_name_old + '_'.
   1686 	 * The suffix follows lv_name_old and includes '_'.
   1687 	 */
   1688 	len = strlen(lv_name_old);
   1689 	if (strncmp(lv->name, lv_name_old, len) || lv->name[len] != '_') {
   1690 		log_error("Cannot rename \"%s\": name format not recognized "
   1691 			  "for internal LV \"%s\"",
   1692 			  lv_name_old, lv->name);
   1693 		return 0;
   1694 	}
   1695 	suffix = lv->name + len;
   1696 
   1697 	/*
   1698 	 * Compose a new name for sub lv:
   1699 	 *   e.g. new name is "lvol1_mlog"
   1700 	 *        if the sub LV is "lvol0_mlog" and
   1701 	 *        a new name for main LV is "lvol1"
   1702 	 */
   1703 	len = strlen(lv_name_new) + strlen(suffix) + 1;
   1704 	new_name = dm_pool_alloc(cmd->mem, len);
   1705 	if (!new_name) {
   1706 		log_error("Failed to allocate space for new name");
   1707 		return 0;
   1708 	}
   1709 	if (!dm_snprintf(new_name, len, "%s%s", lv_name_new, suffix)) {
   1710 		log_error("Failed to create new name");
   1711 		return 0;
   1712 	}
   1713 
   1714 	/* Rename it */
   1715 	return _rename_single_lv(lv, new_name);
   1716 }
   1717 
   1718 /* Callback for _for_each_sub_lv */
   1719 static int _rename_cb(struct cmd_context *cmd, struct logical_volume *lv,
   1720 		      void *data)
   1721 {
   1722 	struct lv_names *lv_names = (struct lv_names *) data;
   1723 
   1724 	return _rename_sub_lv(cmd, lv, lv_names->old, lv_names->new);
   1725 }
   1726 
   1727 /*
   1728  * Loop down sub LVs and call "func" for each.
   1729  * "func" is responsible to log necessary information on failure.
   1730  */
   1731 static int _for_each_sub_lv(struct cmd_context *cmd, struct logical_volume *lv,
   1732 			    int (*func)(struct cmd_context *cmd,
   1733 					struct logical_volume *lv,
   1734 					void *data),
   1735 			    void *data)
   1736 {
   1737 	struct logical_volume *org;
   1738 	struct lv_segment *seg;
   1739 	uint32_t s;
   1740 
   1741 	if (lv_is_cow(lv) && lv_is_virtual_origin(org = origin_from_cow(lv)))
   1742 		if (!func(cmd, org, data))
   1743 			return_0;
   1744 
   1745 	dm_list_iterate_items(seg, &lv->segments) {
   1746 		if (seg->log_lv && !func(cmd, seg->log_lv, data))
   1747 			return_0;
   1748 		for (s = 0; s < seg->area_count; s++) {
   1749 			if (seg_type(seg, s) != AREA_LV)
   1750 				continue;
   1751 			if (!func(cmd, seg_lv(seg, s), data))
   1752 				return_0;
   1753 			if (!_for_each_sub_lv(cmd, seg_lv(seg, s), func, data))
   1754 				return_0;
   1755 		}
   1756 	}
   1757 
   1758 	return 1;
   1759 }
   1760 
   1761 
   1762 /*
   1763  * Core of LV renaming routine.
   1764  * VG must be locked by caller.
   1765  */
   1766 int lv_rename(struct cmd_context *cmd, struct logical_volume *lv,
   1767 	      const char *new_name)
   1768 {
   1769 	struct volume_group *vg = lv->vg;
   1770 	struct lv_names lv_names;
   1771 	DM_LIST_INIT(lvs_changed);
   1772 	struct lv_list lvl, lvl2;
   1773 	int r = 0;
   1774 
   1775 	/* rename is not allowed on sub LVs */
   1776 	if (!lv_is_visible(lv)) {
   1777 		log_error("Cannot rename internal LV \"%s\".", lv->name);
   1778 		return 0;
   1779 	}
   1780 
   1781 	if (find_lv_in_vg(vg, new_name)) {
   1782 		log_error("Logical volume \"%s\" already exists in "
   1783 			  "volume group \"%s\"", new_name, vg->name);
   1784 		return 0;
   1785 	}
   1786 
   1787 	if (lv->status & LOCKED) {
   1788 		log_error("Cannot rename locked LV %s", lv->name);
   1789 		return 0;
   1790 	}
   1791 
   1792 	if (!archive(vg))
   1793 		return 0;
   1794 
   1795 	/* rename sub LVs */
   1796 	lv_names.old = lv->name;
   1797 	lv_names.new = new_name;
   1798 	if (!_for_each_sub_lv(cmd, lv, _rename_cb, (void *) &lv_names))
   1799 		return 0;
   1800 
   1801 	/* rename main LV */
   1802 	if (!(lv->name = dm_pool_strdup(cmd->mem, new_name))) {
   1803 		log_error("Failed to allocate space for new name");
   1804 		return 0;
   1805 	}
   1806 
   1807 	lvl.lv = lv;
   1808 	dm_list_add(&lvs_changed, &lvl.list);
   1809 
   1810 	/* rename active virtual origin too */
   1811 	if (lv_is_cow(lv) && lv_is_virtual_origin(lvl2.lv = origin_from_cow(lv)))
   1812 		dm_list_add_h(&lvs_changed, &lvl2.list);
   1813 
   1814 	log_verbose("Writing out updated volume group");
   1815 	if (!vg_write(vg))
   1816 		return 0;
   1817 
   1818 
   1819 	if (!suspend_lvs(cmd, &lvs_changed)) {
   1820 		vg_revert(vg);
   1821 		goto_out;
   1822 	}
   1823 
   1824 	if (!(r = vg_commit(vg)))
   1825 		stack;
   1826 
   1827 	resume_lvs(cmd, &lvs_changed);
   1828 out:
   1829 	backup(vg);
   1830 	return r;
   1831 }
   1832 
   1833 char *generate_lv_name(struct volume_group *vg, const char *format,
   1834 		       char *buffer, size_t len)
   1835 {
   1836 	struct lv_list *lvl;
   1837 	int high = -1, i;
   1838 
   1839 	dm_list_iterate_items(lvl, &vg->lvs) {
   1840 		if (sscanf(lvl->lv->name, format, &i) != 1)
   1841 			continue;
   1842 
   1843 		if (i > high)
   1844 			high = i;
   1845 	}
   1846 
   1847 	if (dm_snprintf(buffer, len, format, high + 1) < 0)
   1848 		return NULL;
   1849 
   1850 	return buffer;
   1851 }
   1852 
   1853 int vg_max_lv_reached(struct volume_group *vg)
   1854 {
   1855 	if (!vg->max_lv)
   1856 		return 0;
   1857 
   1858 	if (vg->max_lv > vg_visible_lvs(vg))
   1859 		return 0;
   1860 
   1861 	log_verbose("Maximum number of logical volumes (%u) reached "
   1862 		    "in volume group %s", vg->max_lv, vg->name);
   1863 
   1864 	return 1;
   1865 }
   1866 
   1867 struct logical_volume *alloc_lv(struct dm_pool *mem)
   1868 {
   1869 	struct logical_volume *lv;
   1870 
   1871 	if (!(lv = dm_pool_zalloc(mem, sizeof(*lv)))) {
   1872 		log_error("Unable to allocate logical volume structure");
   1873 		return NULL;
   1874 	}
   1875 
   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);
   1881 
   1882 	return lv;
   1883 }
   1884 
   1885 /*
   1886  * Create a new empty LV.
   1887  */
   1888 struct logical_volume *lv_create_empty(const char *name,
   1889 				       union lvid *lvid,
   1890 				       uint32_t status,
   1891 				       alloc_policy_t alloc,
   1892 				       struct volume_group *vg)
   1893 {
   1894 	struct format_instance *fi = vg->fid;
   1895 	struct logical_volume *lv;
   1896 	char dname[NAME_LEN];
   1897 
   1898 	if (vg_max_lv_reached(vg))
   1899 		stack;
   1900 
   1901 	if (strstr(name, "%d") &&
   1902 	    !(name = generate_lv_name(vg, name, dname, sizeof(dname)))) {
   1903 		log_error("Failed to generate unique name for the new "
   1904 			  "logical volume");
   1905 		return NULL;
   1906 	} else if (find_lv_in_vg(vg, name)) {
   1907 		log_error("Unable to create LV %s in Volume Group %s: "
   1908 			  "name already in use.", name, vg->name);
   1909 		return NULL;
   1910 	}
   1911 
   1912 	log_verbose("Creating logical volume %s", name);
   1913 
   1914 	if (!(lv = alloc_lv(vg->vgmem)))
   1915 		return_NULL;
   1916 
   1917 	if (!(lv->name = dm_pool_strdup(vg->vgmem, name)))
   1918 		goto_bad;
   1919 
   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;
   1927 
   1928 	if (lvid)
   1929 		lv->lvid = *lvid;
   1930 
   1931 	if (!link_lv_to_vg(vg, lv))
   1932 		goto_bad;
   1933 
   1934 	if (fi->fmt->ops->lv_setup && !fi->fmt->ops->lv_setup(fi, lv))
   1935 		goto_bad;
   1936 
   1937 	return lv;
   1938 bad:
   1939 	dm_pool_free(vg->vgmem, lv);
   1940 	return NULL;
   1941 }
   1942 
   1943 static int _add_pvs(struct cmd_context *cmd, struct pv_segment *peg,
   1944 		    uint32_t s __attribute((unused)), void *data)
   1945 {
   1946 	struct seg_pvs *spvs = (struct seg_pvs *) data;
   1947 	struct pv_list *pvl;
   1948 
   1949 	/* Don't add again if it's already on list. */
   1950 	if (find_pv_in_pv_list(&spvs->pvs, peg->pv))
   1951 			return 1;
   1952 
   1953 	if (!(pvl = dm_pool_alloc(cmd->mem, sizeof(*pvl)))) {
   1954 		log_error("pv_list allocation failed");
   1955 		return 0;
   1956 	}
   1957 
   1958 	pvl->pv = peg->pv;
   1959 
   1960 	dm_list_add(&spvs->pvs, &pvl->list);
   1961 
   1962 	return 1;
   1963 }
   1964 
   1965 /*
   1966  * Construct dm_list of segments of LVs showing which PVs they use.
   1967  */
   1968 struct dm_list *build_parallel_areas_from_lv(struct cmd_context *cmd,
   1969 					  struct logical_volume *lv)
   1970 {
   1971 	struct dm_list *parallel_areas;
   1972 	struct seg_pvs *spvs;
   1973 	uint32_t current_le = 0;
   1974 
   1975 	if (!(parallel_areas = dm_pool_alloc(cmd->mem, sizeof(*parallel_areas)))) {
   1976 		log_error("parallel_areas allocation failed");
   1977 		return NULL;
   1978 	}
   1979 
   1980 	dm_list_init(parallel_areas);
   1981 
   1982 	do {
   1983 		if (!(spvs = dm_pool_zalloc(cmd->mem, sizeof(*spvs)))) {
   1984 			log_error("allocation failed");
   1985 			return NULL;
   1986 		}
   1987 
   1988 		dm_list_init(&spvs->pvs);
   1989 
   1990 		spvs->le = current_le;
   1991 		spvs->len = lv->le_count - current_le;
   1992 
   1993 		dm_list_add(parallel_areas, &spvs->list);
   1994 
   1995 		/* Find next segment end */
   1996 		/* FIXME Unnecessary nesting! */
   1997 		if (!_for_each_pv(cmd, lv, current_le, spvs->len, &spvs->len,
   1998 				  0, 0, -1, 0, _add_pvs, (void *) spvs))
   1999 			return_NULL;
   2000 
   2001 		current_le = spvs->le + spvs->len;
   2002 	} while (current_le < lv->le_count);
   2003 
   2004 	/* FIXME Merge adjacent segments with identical PV lists (avoids need for contiguous allocation attempts between successful allocations) */
   2005 
   2006 	return parallel_areas;
   2007 }
   2008 
   2009 int link_lv_to_vg(struct volume_group *vg, struct logical_volume *lv)
   2010 {
   2011 	struct lv_list *lvl;
   2012 
   2013 	if (vg_max_lv_reached(vg))
   2014 		stack;
   2015 
   2016 	if (!(lvl = dm_pool_zalloc(vg->vgmem, sizeof(*lvl))))
   2017 		return_0;
   2018 
   2019 	lvl->lv = lv;
   2020 	lv->vg = vg;
   2021 	dm_list_add(&vg->lvs, &lvl->list);
   2022 
   2023 	return 1;
   2024 }
   2025 
   2026 int unlink_lv_from_vg(struct logical_volume *lv)
   2027 {
   2028 	struct lv_list *lvl;
   2029 
   2030 	if (!(lvl = find_lv_in_vg(lv->vg, lv->name)))
   2031 		return_0;
   2032 
   2033 	dm_list_del(&lvl->list);
   2034 
   2035 	return 1;
   2036 }
   2037 
   2038 void lv_set_visible(struct logical_volume *lv)
   2039 {
   2040 	if (lv_is_visible(lv))
   2041 		return;
   2042 
   2043 	lv->status |= VISIBLE_LV;
   2044 
   2045 	log_debug("LV %s in VG %s is now visible.",  lv->name, lv->vg->name);
   2046 }
   2047 
   2048 void lv_set_hidden(struct logical_volume *lv)
   2049 {
   2050 	if (!lv_is_visible(lv))
   2051 		return;
   2052 
   2053 	lv->status &= ~VISIBLE_LV;
   2054 
   2055 	log_debug("LV %s in VG %s is now hidden.",  lv->name, lv->vg->name);
   2056 }
   2057 
   2058 int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
   2059 		     const force_t force)
   2060 {
   2061 	struct volume_group *vg;
   2062 	struct lvinfo info;
   2063 	struct logical_volume *origin = NULL;
   2064 
   2065 	vg = lv->vg;
   2066 
   2067 	if (!vg_check_status(vg, LVM_WRITE))
   2068 		return 0;
   2069 
   2070 	if (lv_is_origin(lv)) {
   2071 		log_error("Can't remove logical volume \"%s\" under snapshot",
   2072 			  lv->name);
   2073 		return 0;
   2074 	}
   2075 
   2076 	if (lv->status & MIRROR_IMAGE) {
   2077 		log_error("Can't remove logical volume %s used by a mirror",
   2078 			  lv->name);
   2079 		return 0;
   2080 	}
   2081 
   2082 	if (lv->status & MIRROR_LOG) {
   2083 		log_error("Can't remove logical volume %s used as mirror log",
   2084 			  lv->name);
   2085 		return 0;
   2086 	}
   2087 
   2088 	if (lv->status & LOCKED) {
   2089 		log_error("Can't remove locked LV %s", lv->name);
   2090 		return 0;
   2091 	}
   2092 
   2093 	/* FIXME Ensure not referred to by another existing LVs */
   2094 
   2095 	if (lv_info(cmd, lv, &info, 1, 0)) {
   2096 		if (info.open_count) {
   2097 			log_error("Can't remove open logical volume \"%s\"",
   2098 				  lv->name);
   2099 			return 0;
   2100 		}
   2101 
   2102 		if (lv_is_active(lv) && (force == PROMPT) &&
   2103 		    lv_is_visible(lv) &&
   2104 		    yes_no_prompt("Do you really want to remove active "
   2105 				  "%slogical volume %s? [y/n]: ",
   2106 				  vg_is_clustered(vg) ? "clustered " : "",
   2107 				  lv->name) == 'n') {
   2108 			log_print("Logical volume %s not removed", lv->name);
   2109 			return 0;
   2110 		}
   2111 	}
   2112 
   2113 	if (!archive(vg))
   2114 		return 0;
   2115 
   2116 	/* FIXME Snapshot commit out of sequence if it fails after here? */
   2117 	if (!deactivate_lv(cmd, lv)) {
   2118 		log_error("Unable to deactivate logical volume \"%s\"",
   2119 			  lv->name);
   2120 		return 0;
   2121 	}
   2122 
   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))
   2127 			return_0;
   2128 	}
   2129 
   2130 	log_verbose("Releasing logical volume \"%s\"", lv->name);
   2131 	if (!lv_remove(lv)) {
   2132 		log_error("Error releasing logical volume \"%s\"", lv->name);
   2133 		return 0;
   2134 	}
   2135 
   2136 	/* store it on disks */
   2137 	if (!vg_write(vg) || !vg_commit(vg))
   2138 		return_0;
   2139 
   2140 	backup(vg);
   2141 
   2142 	/* If no snapshots left, reload without -real. */
   2143 	if (origin && !lv_is_origin(origin)) {
   2144 		if (!suspend_lv(cmd, origin))
   2145 			log_error("Failed to refresh %s without snapshot.", origin->name);
   2146 		else if (!resume_lv(cmd, origin))
   2147 			log_error("Failed to resume %s.", origin->name);
   2148 	}
   2149 
   2150 	if (lv_is_visible(lv))
   2151 		log_print("Logical volume \"%s\" successfully removed", lv->name);
   2152 
   2153 	return 1;
   2154 }
   2155 
   2156 /*
   2157  * remove LVs with its dependencies - LV leaf nodes should be removed first
   2158  */
   2159 int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *lv,
   2160 				const force_t force)
   2161 {
   2162 	struct dm_list *snh, *snht;
   2163 
   2164         if (lv_is_origin(lv)) {
   2165 		/* remove snapshot LVs first */
   2166 		dm_list_iterate_safe(snh, snht, &lv->snapshot_segs) {
   2167 			if (!lv_remove_with_dependencies(cmd, dm_list_struct_base(snh, struct lv_segment,
   2168 									       origin_list)->cow,
   2169 							 force))
   2170 				return 0;
   2171 		}
   2172 	}
   2173 
   2174         return lv_remove_single(cmd, lv, force);
   2175 }
   2176 
   2177 /*
   2178  * insert_layer_for_segments_on_pv() inserts a layer segment for a segment area.
   2179  * However, layer modification could split the underlying layer segment.
   2180  * This function splits the parent area according to keep the 1:1 relationship
   2181  * between the parent area and the underlying layer segment.
   2182  * Since the layer LV might have other layers below, build_parallel_areas()
   2183  * is used to find the lowest-level segment boundaries.
   2184  */
   2185 static int _split_parent_area(struct lv_segment *seg, uint32_t s,
   2186 			      struct dm_list *layer_seg_pvs)
   2187 {
   2188 	uint32_t parent_area_len, parent_le, layer_le;
   2189 	uint32_t area_multiple;
   2190 	struct seg_pvs *spvs;
   2191 
   2192 	if (seg_is_striped(seg))
   2193 		area_multiple = seg->area_count;
   2194 	else
   2195 		area_multiple = 1;
   2196 
   2197 	parent_area_len = seg->area_len;
   2198 	parent_le = seg->le;
   2199 	layer_le = seg_le(seg, s);
   2200 
   2201 	while (parent_area_len > 0) {
   2202 		/* Find the layer segment pointed at */
   2203 		if (!(spvs = _find_seg_pvs_by_le(layer_seg_pvs, layer_le))) {
   2204 			log_error("layer segment for %s:%" PRIu32 " not found",
   2205 				  seg->lv->name, parent_le);
   2206 			return 0;
   2207 		}
   2208 
   2209 		if (spvs->le != layer_le) {
   2210 			log_error("Incompatible layer boundary: "
   2211 				  "%s:%" PRIu32 "[%" PRIu32 "] on %s:%" PRIu32,
   2212 				  seg->lv->name, parent_le, s,
   2213 				  seg_lv(seg, s)->name, layer_le);
   2214 			return 0;
   2215 		}
   2216 
   2217 		if (spvs->len < parent_area_len) {
   2218 			parent_le += spvs->len * area_multiple;
   2219 			if (!lv_split_segment(seg->lv, parent_le))
   2220 				return_0;
   2221 		}
   2222 
   2223 		parent_area_len -= spvs->len;
   2224 		layer_le += spvs->len;
   2225 	}
   2226 
   2227 	return 1;
   2228 }
   2229 
   2230 /*
   2231  * Split the parent LV segments if the layer LV below it is splitted.
   2232  */
   2233 int split_parent_segments_for_layer(struct cmd_context *cmd,
   2234 				    struct logical_volume *layer_lv)
   2235 {
   2236 	struct lv_list *lvl;
   2237 	struct logical_volume *parent_lv;
   2238 	struct lv_segment *seg;
   2239 	uint32_t s;
   2240 	struct dm_list *parallel_areas;
   2241 
   2242 	if (!(parallel_areas = build_parallel_areas_from_lv(cmd, layer_lv)))
   2243 		return_0;
   2244 
   2245 	/* Loop through all LVs except itself */
   2246 	dm_list_iterate_items(lvl, &layer_lv->vg->lvs) {
   2247 		parent_lv = lvl->lv;
   2248 		if (parent_lv == layer_lv)
   2249 			continue;
   2250 
   2251 		/* Find all segments that point at the layer LV */
   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)
   2256 					continue;
   2257 
   2258 				if (!_split_parent_area(seg, s, parallel_areas))
   2259 					return_0;
   2260 			}
   2261 		}
   2262 	}
   2263 
   2264 	return 1;
   2265 }
   2266 
   2267 /* Remove a layer from the LV */
   2268 int remove_layers_for_segments(struct cmd_context *cmd,
   2269 			       struct logical_volume *lv,
   2270 			       struct logical_volume *layer_lv,
   2271 			       uint32_t status_mask, struct dm_list *lvs_changed)
   2272 {
   2273 	struct lv_segment *seg, *lseg;
   2274 	uint32_t s;
   2275 	int lv_changed = 0;
   2276 	struct lv_list *lvl;
   2277 
   2278 	log_very_verbose("Removing layer %s for segments of %s",
   2279 			 layer_lv->name, lv->name);
   2280 
   2281 	/* Find all segments that point at the temporary mirror */
   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)
   2286 				continue;
   2287 
   2288 			/* Find the layer segment pointed at */
   2289 			if (!(lseg = find_seg_by_le(layer_lv, seg_le(seg, s)))) {
   2290 				log_error("Layer segment found: %s:%" PRIu32,
   2291 					  layer_lv->name, seg_le(seg, s));
   2292 				return 0;
   2293 			}
   2294 
   2295 			/* Check the segment params are compatible */
   2296 			if (!seg_is_striped(lseg) || lseg->area_count != 1) {
   2297 				log_error("Layer is not linear: %s:%" PRIu32,
   2298 					  layer_lv->name, lseg->le);
   2299 				return 0;
   2300 			}
   2301 			if ((lseg->status & status_mask) != status_mask) {
   2302 				log_error("Layer status does not match: "
   2303 					  "%s:%" PRIu32 " status: 0x%x/0x%x",
   2304 					  layer_lv->name, lseg->le,
   2305 					  lseg->status, status_mask);
   2306 				return 0;
   2307 			}
   2308 			if (lseg->le != seg_le(seg, s) ||
   2309 			    lseg->area_len != seg->area_len) {
   2310 				log_error("Layer boundary mismatch: "
   2311 					  "%s:%" PRIu32 "-%" PRIu32 " on "
   2312 					  "%s:%" PRIu32 " / "
   2313 					  "%" PRIu32 "-%" PRIu32 " / ",
   2314 					  lv->name, seg->le, seg->area_len,
   2315 					  layer_lv->name, seg_le(seg, s),
   2316 					  lseg->le, lseg->area_len);
   2317 				return 0;
   2318 			}
   2319 
   2320 			if (!move_lv_segment_area(seg, s, lseg, 0))
   2321 				return_0;
   2322 
   2323 			/* Replace mirror with error segment */
   2324 			if (!(lseg->segtype =
   2325 			      get_segtype_from_string(lv->vg->cmd, "error"))) {
   2326 				log_error("Missing error segtype");
   2327 				return 0;
   2328 			}
   2329 			lseg->area_count = 0;
   2330 
   2331 			/* First time, add LV to list of LVs affected */
   2332 			if (!lv_changed && lvs_changed) {
   2333 				if (!(lvl = dm_pool_alloc(cmd->mem, sizeof(*lvl)))) {
   2334 					log_error("lv_list alloc failed");
   2335 					return 0;
   2336 				}
   2337 				lvl->lv = lv;
   2338 				dm_list_add(lvs_changed, &lvl->list);
   2339 				lv_changed = 1;
   2340 			}
   2341 		}
   2342 	}
   2343 	if (lv_changed && !lv_merge_segments(lv))
   2344 		stack;
   2345 
   2346 	return 1;
   2347 }
   2348 
   2349 /* Remove a layer */
   2350 int remove_layers_for_segments_all(struct cmd_context *cmd,
   2351 				   struct logical_volume *layer_lv,
   2352 				   uint32_t status_mask,
   2353 				   struct dm_list *lvs_changed)
   2354 {
   2355 	struct lv_list *lvl;
   2356 	struct logical_volume *lv1;
   2357 
   2358 	/* Loop through all LVs except the temporary mirror */
   2359 	dm_list_iterate_items(lvl, &layer_lv->vg->lvs) {
   2360 		lv1 = lvl->lv;
   2361 		if (lv1 == layer_lv)
   2362 			continue;
   2363 
   2364 		if (!remove_layers_for_segments(cmd, lv1, layer_lv,
   2365 						status_mask, lvs_changed))
   2366 			return_0;
   2367 	}
   2368 
   2369 	if (!lv_empty(layer_lv))
   2370 		return_0;
   2371 
   2372 	return 1;
   2373 }
   2374 
   2375 static int _move_lv_segments(struct logical_volume *lv_to,
   2376 			     struct logical_volume *lv_from,
   2377 			     uint32_t set_status, uint32_t reset_status)
   2378 {
   2379 	struct lv_segment *seg;
   2380 
   2381 	dm_list_iterate_items(seg, &lv_to->segments) {
   2382 		if (seg->origin) {
   2383 			log_error("Can't move snapshot segment");
   2384 			return 0;
   2385 		}
   2386 	}
   2387 
   2388 	lv_to->segments = lv_from->segments;
   2389 	lv_to->segments.n->p = &lv_to->segments;
   2390 	lv_to->segments.p->n = &lv_to->segments;
   2391 
   2392 	dm_list_iterate_items(seg, &lv_to->segments) {
   2393 		seg->lv = lv_to;
   2394 		seg->status &= ~reset_status;
   2395 		seg->status |= set_status;
   2396 	}
   2397 
   2398 	dm_list_init(&lv_from->segments);
   2399 
   2400 	lv_to->le_count = lv_from->le_count;
   2401 	lv_to->size = lv_from->size;
   2402 
   2403 	lv_from->le_count = 0;
   2404 	lv_from->size = 0;
   2405 
   2406 	return 1;
   2407 }
   2408 
   2409 /* Remove a layer from the LV */
   2410 int remove_layer_from_lv(struct logical_volume *lv,
   2411 			 struct logical_volume *layer_lv)
   2412 {
   2413 	struct logical_volume *parent;
   2414 	struct lv_segment *parent_seg;
   2415 	struct segment_type *segtype;
   2416 
   2417 	log_very_verbose("Removing layer %s for %s", layer_lv->name, lv->name);
   2418 
   2419 	if (!(parent_seg = get_only_segment_using_this_lv(layer_lv))) {
   2420 		log_error("Failed to find layer %s in %s",
   2421 		layer_lv->name, lv->name);
   2422 		return 0;
   2423 	}
   2424 	parent = parent_seg->lv;
   2425 
   2426 	/*
   2427 	 * Before removal, the layer should be cleaned up,
   2428 	 * i.e. additional segments and areas should have been removed.
   2429 	 */
   2430 	if (dm_list_size(&parent->segments) != 1 ||
   2431 	    parent_seg->area_count != 1 ||
   2432 	    seg_type(parent_seg, 0) != AREA_LV ||
   2433 	    layer_lv != seg_lv(parent_seg, 0) ||
   2434 	    parent->le_count != layer_lv->le_count)
   2435 		return_0;
   2436 
   2437 	if (!lv_empty(parent))
   2438 		return_0;
   2439 
   2440 	if (!_move_lv_segments(parent, layer_lv, 0, 0))
   2441 		return_0;
   2442 
   2443 	/* Replace the empty layer with error segment */
   2444 	segtype = get_segtype_from_string(lv->vg->cmd, "error");
   2445 	if (!lv_add_virtual_segment(layer_lv, 0, parent->le_count, segtype))
   2446 		return_0;
   2447 
   2448 	return 1;
   2449 }
   2450 
   2451 /*
   2452  * Create and insert a linear LV "above" lv_where.
   2453  * After the insertion, a new LV named lv_where->name + suffix is created
   2454  * and all segments of lv_where is moved to the new LV.
   2455  * lv_where will have a single segment which maps linearly to the new LV.
   2456  */
   2457 struct logical_volume *insert_layer_for_lv(struct cmd_context *cmd,
   2458 					   struct logical_volume *lv_where,
   2459 					   uint32_t status,
   2460 					   const char *layer_suffix)
   2461 {
   2462 	struct logical_volume *layer_lv;
   2463 	char *name;
   2464 	size_t len;
   2465 	struct segment_type *segtype;
   2466 	struct lv_segment *mapseg;
   2467 
   2468 	/* create an empty layer LV */
   2469 	len = strlen(lv_where->name) + 32;
   2470 	if (!(name = alloca(len))) {
   2471 		log_error("layer name allocation failed. "
   2472 			  "Remove new LV and retry.");
   2473 		return NULL;
   2474 	}
   2475 
   2476 	if (dm_snprintf(name, len, "%s%s", lv_where->name, layer_suffix) < 0) {
   2477 		log_error("layer name allocation failed. "
   2478 			  "Remove new LV and retry.");
   2479 		return NULL;
   2480 	}
   2481 
   2482 	if (!(layer_lv = lv_create_empty(name, NULL, LVM_READ | LVM_WRITE,
   2483 					 ALLOC_INHERIT, lv_where->vg))) {
   2484 		log_error("Creation of layer LV failed");
   2485 		return NULL;
   2486 	}
   2487 
   2488 	if (lv_is_active(lv_where) && strstr(name, "_mimagetmp")) {
   2489 		log_very_verbose("Creating transient LV %s for mirror conversion in VG %s.", name, lv_where->vg->name);
   2490 
   2491 		segtype = get_segtype_from_string(cmd, "error");
   2492 
   2493 		if (!lv_add_virtual_segment(layer_lv, 0, lv_where->le_count, segtype)) {
   2494 			log_error("Creation of transient LV %s for mirror conversion in VG %s failed.", name, lv_where->vg->name);
   2495 			return NULL;
   2496 		}
   2497 
   2498 		if (!vg_write(lv_where->vg)) {
   2499 			log_error("Failed to write intermediate VG %s metadata for mirror conversion.", lv_where->vg->name);
   2500 			return NULL;
   2501 		}
   2502 
   2503 		if (!vg_commit(lv_where->vg)) {
   2504 			log_error("Failed to commit intermediate VG %s metadata for mirror conversion.", lv_where->vg->name);
   2505 			vg_revert(lv_where->vg);
   2506 			return NULL;
   2507 		}
   2508 
   2509 		if (!activate_lv(cmd, layer_lv)) {
   2510 			log_error("Failed to resume transient error LV %s for mirror conversion in VG %s.", name, lv_where->vg->name);
   2511 			return NULL;
   2512 		}
   2513 	}
   2514 
   2515 	log_very_verbose("Inserting layer %s for %s",
   2516 			 layer_lv->name, lv_where->name);
   2517 
   2518 	if (!_move_lv_segments(layer_lv, lv_where, 0, 0))
   2519 		return_NULL;
   2520 
   2521 	if (!(segtype = get_segtype_from_string(cmd, "striped")))
   2522 		return_NULL;
   2523 
   2524 	/* allocate a new linear segment */
   2525 	if (!(mapseg = alloc_lv_segment(cmd->mem, segtype,
   2526 					lv_where, 0, layer_lv->le_count,
   2527 					status, 0, NULL, 1, layer_lv->le_count,
   2528 					0, 0, 0)))
   2529 		return_NULL;
   2530 
   2531 	/* map the new segment to the original underlying are */
   2532 	if (!set_lv_segment_area_lv(mapseg, 0, layer_lv, 0, 0))
   2533 		return_NULL;
   2534 
   2535 	/* add the new segment to the layer LV */
   2536 	dm_list_add(&lv_where->segments, &mapseg->list);
   2537 	lv_where->le_count = layer_lv->le_count;
   2538 	lv_where->size = lv_where->le_count * lv_where->vg->extent_size;
   2539 
   2540 	return layer_lv;
   2541 }
   2542 
   2543 /*
   2544  * Extend and insert a linear layer LV beneath the source segment area.
   2545  */
   2546 static int _extend_layer_lv_for_segment(struct logical_volume *layer_lv,
   2547 					struct lv_segment *seg, uint32_t s,
   2548 					uint32_t status)
   2549 {
   2550 	struct lv_segment *mapseg;
   2551 	struct segment_type *segtype;
   2552 	struct physical_volume *src_pv = seg_pv(seg, s);
   2553 	uint32_t src_pe = seg_pe(seg, s);
   2554 
   2555 	if (seg_type(seg, s) != AREA_PV && seg_type(seg, s) != AREA_LV)
   2556 		return_0;
   2557 
   2558 	if (!(segtype = get_segtype_from_string(layer_lv->vg->cmd, "striped")))
   2559 		return_0;
   2560 
   2561 	/* FIXME Incomplete message? Needs more context */
   2562 	log_very_verbose("Inserting %s:%" PRIu32 "-%" PRIu32 " of %s/%s",
   2563 			 pv_dev_name(src_pv),
   2564 			 src_pe, src_pe + seg->area_len - 1,
   2565 			 seg->lv->vg->name, seg->lv->name);
   2566 
   2567 	/* allocate a new segment */
   2568 	if (!(mapseg = alloc_lv_segment(layer_lv->vg->cmd->mem, segtype,
   2569 					layer_lv, layer_lv->le_count,
   2570 					seg->area_len, status, 0,
   2571 					NULL, 1, seg->area_len, 0, 0, 0)))
   2572 		return_0;
   2573 
   2574 	/* map the new segment to the original underlying are */
   2575 	if (!move_lv_segment_area(mapseg, 0, seg, s))
   2576 		return_0;
   2577 
   2578 	/* add the new segment to the layer LV */
   2579 	dm_list_add(&layer_lv->segments, &mapseg->list);
   2580 	layer_lv->le_count += seg->area_len;
   2581 	layer_lv->size += seg->area_len * layer_lv->vg->extent_size;
   2582 
   2583 	/* map the original area to the new segment */
   2584 	if (!set_lv_segment_area_lv(seg, s, layer_lv, mapseg->le, 0))
   2585 		return_0;
   2586 
   2587 	return 1;
   2588 }
   2589 
   2590 /*
   2591  * Match the segment area to PEs in the pvl
   2592  * (the segment area boundary should be aligned to PE ranges by
   2593  *  _adjust_layer_segments() so that there is no partial overlap.)
   2594  */
   2595 static int _match_seg_area_to_pe_range(struct lv_segment *seg, uint32_t s,
   2596 				       struct pv_list *pvl)
   2597 {
   2598 	struct pe_range *per;
   2599 	uint32_t pe_start, per_end;
   2600 
   2601 	if (!pvl)
   2602 		return 1;
   2603 
   2604 	if (seg_type(seg, s) != AREA_PV || seg_dev(seg, s) != pvl->pv->dev)
   2605 		return 0;
   2606 
   2607 	pe_start = seg_pe(seg, s);
   2608 
   2609 	/* Do these PEs match to any of the PEs in pvl? */
   2610 	dm_list_iterate_items(per, pvl->pe_ranges) {
   2611 		per_end = per->start + per->count - 1;
   2612 
   2613 		if ((pe_start < per->start) || (pe_start > per_end))
   2614 			continue;
   2615 
   2616 		/* FIXME Missing context in this message - add LV/seg details */
   2617 		log_debug("Matched PE range %s:%" PRIu32 "-%" PRIu32 " against "
   2618 			  "%s %" PRIu32 " len %" PRIu32, dev_name(pvl->pv->dev),
   2619 			  per->start, per_end, dev_name(seg_dev(seg, s)),
   2620 			  seg_pe(seg, s), seg->area_len);
   2621 
   2622 		return 1;
   2623 	}
   2624 
   2625 	return 0;
   2626 }
   2627 
   2628 /*
   2629  * For each segment in lv_where that uses a PV in pvl directly,
   2630  * split the segment if it spans more than one underlying PV.
   2631  */
   2632 static int _align_segment_boundary_to_pe_range(struct logical_volume *lv_where,
   2633 					       struct pv_list *pvl)
   2634 {
   2635 	struct lv_segment *seg;
   2636 	struct pe_range *per;
   2637 	uint32_t pe_start, pe_end, per_end, stripe_multiplier, s;
   2638 
   2639 	if (!pvl)
   2640 		return 1;
   2641 
   2642 	/* Split LV segments to match PE ranges */
   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)
   2647 				continue;
   2648 
   2649 			/* Do these PEs match with the condition? */
   2650 			dm_list_iterate_items(per, pvl->pe_ranges) {
   2651 				pe_start = seg_pe(seg, s);
   2652 				pe_end = pe_start + seg->area_len - 1;
   2653 				per_end = per->start + per->count - 1;
   2654 
   2655 				/* No overlap? */
   2656 				if ((pe_end < per->start) ||
   2657 				    (pe_start > per_end))
   2658 					continue;
   2659 
   2660 				if (seg_is_striped(seg))
   2661 					stripe_multiplier = seg->area_count;
   2662 				else
   2663 					stripe_multiplier = 1;
   2664 
   2665 				if ((per->start != pe_start &&
   2666 				     per->start > pe_start) &&
   2667 				    !lv_split_segment(lv_where, seg->le +
   2668 						      (per->start - pe_start) *
   2669 						      stripe_multiplier))
   2670 					return_0;
   2671 
   2672 				if ((per_end != pe_end &&
   2673 				     per_end < pe_end) &&
   2674 				    !lv_split_segment(lv_where, seg->le +
   2675 						      (per_end - pe_start + 1) *
   2676 						      stripe_multiplier))
   2677 					return_0;
   2678 			}
   2679 		}
   2680 	}
   2681 
   2682 	return 1;
   2683 }
   2684 
   2685 /*
   2686  * Scan lv_where for segments on a PV in pvl, and for each one found
   2687  * append a linear segment to lv_layer and insert it between the two.
   2688  *
   2689  * If pvl is empty, a layer is placed under the whole of lv_where.
   2690  * If the layer is inserted, lv_where is added to lvs_changed.
   2691  */
   2692 int insert_layer_for_segments_on_pv(struct cmd_context *cmd,
   2693 				    struct logical_volume *lv_where,
   2694 				    struct logical_volume *layer_lv,
   2695 				    uint32_t status,
   2696 				    struct pv_list *pvl,
   2697 				    struct dm_list *lvs_changed)
   2698 {
   2699 	struct lv_segment *seg;
   2700 	struct lv_list *lvl;
   2701 	int lv_used = 0;
   2702 	uint32_t s;
   2703 
   2704 	log_very_verbose("Inserting layer %s for segments of %s on %s",
   2705 			 layer_lv->name, lv_where->name,
   2706 			 pvl ? pv_dev_name(pvl->pv) : "any");
   2707 
   2708 	if (!_align_segment_boundary_to_pe_range(lv_where, pvl))
   2709 		return_0;
   2710 
   2711 	/* Work through all segments on the supplied PV */
   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))
   2715 				continue;
   2716 
   2717 			/* First time, add LV to list of LVs affected */
   2718 			if (!lv_used && lvs_changed) {
   2719 				if (!(lvl = dm_pool_alloc(cmd->mem, sizeof(*lvl)))) {
   2720 					log_error("lv_list alloc failed");
   2721 					return 0;
   2722 				}
   2723 				lvl->lv = lv_where;
   2724 				dm_list_add(lvs_changed, &lvl->list);
   2725 				lv_used = 1;
   2726 			}
   2727 
   2728 			if (!_extend_layer_lv_for_segment(layer_lv, seg, s,
   2729 							  status)) {
   2730 				log_error("Failed to insert segment in layer "
   2731 					  "LV %s under %s:%" PRIu32 "-%" PRIu32,
   2732 					  layer_lv->name, lv_where->name,
   2733 					  seg->le, seg->le + seg->len);
   2734 				return 0;
   2735 			}
   2736 		}
   2737 	}
   2738 
   2739 	return 1;
   2740 }
   2741 
   2742 /*
   2743  * Initialize the LV with 'value'.
   2744  */
   2745 int set_lv(struct cmd_context *cmd, struct logical_volume *lv,
   2746 	   uint64_t sectors, int value)
   2747 {
   2748 	struct device *dev;
   2749 	char *name;
   2750 
   2751 	/*
   2752 	 * FIXME:
   2753 	 * <clausen> also, more than 4k
   2754 	 * <clausen> say, reiserfs puts it's superblock 32k in, IIRC
   2755 	 * <ejt_> k, I'll drop a fixme to that effect
   2756 	 *	   (I know the device is at least 4k, but not 32k)
   2757 	 */
   2758 	if (!(name = dm_pool_alloc(cmd->mem, PATH_MAX))) {
   2759 		log_error("Name allocation failed - device not cleared");
   2760 		return 0;
   2761 	}
   2762 #ifdef __NetBSD__
   2763 	if (dm_snprintf(name, PATH_MAX, "%s%s/r%s", cmd->dev_dir,
   2764 			lv->vg->name, lv->name) < 0) {
   2765 		log_error("Name too long - device not cleared (%s)", lv->name);
   2766 		return 0;
   2767 	}
   2768 #else
   2769 	if (dm_snprintf(name, PATH_MAX, "%s%s/%s", cmd->dev_dir,
   2770 			lv->vg->name, lv->name) < 0) {
   2771 		log_error("Name too long - device not cleared (%s)", lv->name);
   2772 		return 0;
   2773 	}
   2774 #endif
   2775 	log_verbose("Clearing start of logical volume \"%s\"", lv->name);
   2776 
   2777 	if (!(dev = dev_cache_get(name, NULL))) {
   2778 		log_error("%s: not found: device not cleared", name);
   2779 		return 0;
   2780 	}
   2781 
   2782 	if (!dev_open_quiet(dev))
   2783 		return_0;
   2784 
   2785 	if (!sectors)
   2786 		sectors = UINT64_C(4096) >> SECTOR_SHIFT;
   2787 
   2788 	if (sectors > lv->size)
   2789 		sectors = lv->size;
   2790 
   2791 	dev_set(dev, UINT64_C(0), (size_t) sectors << SECTOR_SHIFT, value);
   2792 	dev_flush(dev);
   2793 	dev_close_immediate(dev);
   2794 
   2795 	return 1;
   2796 }
   2797 
   2798 
   2799 static struct logical_volume *_create_virtual_origin(struct cmd_context *cmd,
   2800 						     struct volume_group *vg,
   2801 						     const char *lv_name,
   2802 						     uint32_t permission,
   2803 						     uint64_t voriginextents)
   2804 {
   2805 	const struct segment_type *segtype;
   2806 	size_t len;
   2807 	char *vorigin_name;
   2808 	struct logical_volume *lv;
   2809 
   2810 	if (!(segtype = get_segtype_from_string(cmd, "zero"))) {
   2811 		log_error("Zero segment type for virtual origin not found");
   2812 		return NULL;
   2813 	}
   2814 
   2815 	len = strlen(lv_name) + 32;
   2816 	if (!(vorigin_name = alloca(len)) ||
   2817 	    dm_snprintf(vorigin_name, len, "%s_vorigin", lv_name) < 0) {
   2818 		log_error("Virtual origin name allocation failed.");
   2819 		return NULL;
   2820 	}
   2821 
   2822 	if (!(lv = lv_create_empty(vorigin_name, NULL, permission,
   2823 				   ALLOC_INHERIT, vg)))
   2824 		return_NULL;
   2825 
   2826 	if (!lv_extend(lv, segtype, 1, 0, 1, voriginextents, NULL, 0u, 0u,
   2827 		       NULL, ALLOC_INHERIT))
   2828 		return_NULL;
   2829 
   2830 	/* store vg on disk(s) */
   2831 	if (!vg_write(vg) || !vg_commit(vg))
   2832 		return_NULL;
   2833 
   2834 	backup(vg);
   2835 
   2836 	return lv;
   2837 }
   2838 
   2839 int lv_create_single(struct volume_group *vg,
   2840 		     struct lvcreate_params *lp)
   2841 {
   2842 	struct cmd_context *cmd = vg->cmd;
   2843 	uint32_t size_rest;
   2844 	uint32_t status = 0;
   2845 	struct logical_volume *lv, *org = NULL;
   2846 	int origin_active = 0;
   2847 	char lv_name_buf[128];
   2848 	const char *lv_name;
   2849 	struct lvinfo info;
   2850 
   2851 	if (lp->lv_name && find_lv_in_vg(vg, lp->lv_name)) {
   2852 		log_error("Logical volume \"%s\" already exists in "
   2853 			  "volume group \"%s\"", lp->lv_name, lp->vg_name);
   2854 		return 0;
   2855 	}
   2856 
   2857 	if (vg_max_lv_reached(vg)) {
   2858 		log_error("Maximum number of logical volumes (%u) reached "
   2859 			  "in volume group %s", vg->max_lv, vg->name);
   2860 		return 0;
   2861 	}
   2862 
   2863 	if (lp->mirrors > 1 && !(vg->fid->fmt->features & FMT_SEGMENTS)) {
   2864 		log_error("Metadata does not support mirroring.");
   2865 		return 0;
   2866 	}
   2867 
   2868 	if (lp->read_ahead != DM_READ_AHEAD_AUTO &&
   2869 	    lp->read_ahead != DM_READ_AHEAD_NONE &&
   2870 	    (vg->fid->fmt->features & FMT_RESTRICTED_READAHEAD) &&
   2871 	    (lp->read_ahead < 2 || lp->read_ahead > 120)) {
   2872 		log_error("Metadata only supports readahead values between 2 and 120.");
   2873 		return 0;
   2874 	}
   2875 
   2876 	if (lp->stripe_size > vg->extent_size) {
   2877 		log_error("Reducing requested stripe size %s to maximum, "
   2878 			  "physical extent size %s",
   2879 			  display_size(cmd, (uint64_t) lp->stripe_size),
   2880 			  display_size(cmd, (uint64_t) vg->extent_size));
   2881 		lp->stripe_size = vg->extent_size;
   2882 	}
   2883 
   2884 	/* Need to check the vg's format to verify this - the cmd format isn't setup properly yet */
   2885 	if (lp->stripes > 1 &&
   2886 	    !(vg->fid->fmt->features & FMT_UNLIMITED_STRIPESIZE) &&
   2887 	    (lp->stripe_size > STRIPE_SIZE_MAX)) {
   2888 		log_error("Stripe size may not exceed %s",
   2889 			  display_size(cmd, (uint64_t) STRIPE_SIZE_MAX));
   2890 		return 0;
   2891 	}
   2892 
   2893 	if ((size_rest = lp->extents % lp->stripes)) {
   2894 		log_print("Rounding size (%d extents) up to stripe boundary "
   2895 			  "size (%d extents)", lp->extents,
   2896 			  lp->extents - size_rest + lp->stripes);
   2897 		lp->extents = lp->extents - size_rest + lp->stripes;
   2898 	}
   2899 
   2900 	if (lp->zero && !activation()) {
   2901 		log_error("Can't wipe start of new LV without using "
   2902 			  "device-mapper kernel driver");
   2903 		return 0;
   2904 	}
   2905 
   2906 	status |= lp->permission | VISIBLE_LV;
   2907 
   2908 	if (lp->snapshot) {
   2909 		if (!activation()) {
   2910 			log_error("Can't create snapshot without using "
   2911 				  "device-mapper kernel driver");
   2912 			return 0;
   2913 		}
   2914 		/* FIXME Allow exclusive activation. */
   2915 		if (vg_is_clustered(vg)) {
   2916 			log_error("Clustered snapshots are not yet supported.");
   2917 			return 0;
   2918 		}
   2919 
   2920 		/* Must zero cow */
   2921 		status |= LVM_WRITE;
   2922 
   2923 		if (lp->voriginsize)
   2924 			origin_active = 1;
   2925 		else {
   2926 
   2927 			if (!(org = find_lv(vg, lp->origin))) {
   2928 				log_error("Couldn't find origin volume '%s'.",
   2929 					  lp->origin);
   2930 				return 0;
   2931 			}
   2932 			if (lv_is_virtual_origin(org)) {
   2933 				log_error("Can't share virtual origins. "
   2934 					  "Use --virtualsize.");
   2935 				return 0;
   2936 			}
   2937 			if (lv_is_cow(org)) {
   2938 				log_error("Snapshots of snapshots are not "
   2939 					  "supported yet.");
   2940 				return 0;
   2941 			}
   2942 			if (org->status & LOCKED) {
   2943 				log_error("Snapshots of locked devices are not "
   2944 					  "supported yet");
   2945 				return 0;
   2946 			}
   2947 			if ((org->status & MIRROR_IMAGE) ||
   2948 			    (org->status & MIRROR_LOG)) {
   2949 				log_error("Snapshots of mirror %ss "
   2950 					  "are not supported",
   2951 					  (org->status & MIRROR_LOG) ?
   2952 					  "log" : "image");
   2953 				return 0;
   2954 			}
   2955 
   2956 			if (!lv_info(cmd, org, &info, 0, 0)) {
   2957 				log_error("Check for existence of snapshot "
   2958 					  "origin '%s' failed.", org->name);
   2959 				return 0;
   2960 			}
   2961 			origin_active = info.exists;
   2962 		}
   2963 	}
   2964 
   2965 	if (!lp->extents) {
   2966 		log_error("Unable to create new logical volume with no extents");
   2967 		return 0;
   2968 	}
   2969 
   2970 	if (!seg_is_virtual(lp) &&
   2971 	    vg->free_count < lp->extents) {
   2972 		log_error("Insufficient free extents (%u) in volume group %s: "
   2973 			  "%u required", vg->free_count, vg->name, lp->extents);
   2974 		return 0;
   2975 	}
   2976 
   2977 	if (lp->stripes > dm_list_size(lp->pvh) && lp->alloc != ALLOC_ANYWHERE) {
   2978 		log_error("Number of stripes (%u) must not exceed "
   2979 			  "number of physical volumes (%d)", lp->stripes,
   2980 			  dm_list_size(lp->pvh));
   2981 		return 0;
   2982 	}
   2983 
   2984 	if (lp->mirrors > 1 && !activation()) {
   2985 		log_error("Can't create mirror without using "
   2986 			  "device-mapper kernel driver.");
   2987 		return 0;
   2988 	}
   2989 
   2990 	/* The snapshot segment gets created later */
   2991 	if (lp->snapshot &&
   2992 	    !(lp->segtype = get_segtype_from_string(cmd, "striped")))
   2993 		return_0;
   2994 
   2995 	if (!archive(vg))
   2996 		return 0;
   2997 
   2998 	if (lp->lv_name)
   2999 		lv_name = lp->lv_name;
   3000 	else {
   3001 		if (!generate_lv_name(vg, "lvol%d", lv_name_buf, sizeof(lv_name_buf))) {
   3002 			log_error("Failed to generate LV name.");
   3003 			return 0;
   3004 		}
   3005 		lv_name = &lv_name_buf[0];
   3006 	}
   3007 
   3008 	if (lp->tag) {
   3009 		if (!(vg->fid->fmt->features & FMT_TAGS)) {
   3010 			log_error("Volume group %s does not support tags",
   3011 				  vg->name);
   3012 			return 0;
   3013 		}
   3014 	}
   3015 
   3016 	if (lp->mirrors > 1) {
   3017 		init_mirror_in_sync(lp->nosync);
   3018 
   3019 		if (lp->nosync) {
   3020 			log_warn("WARNING: New mirror won't be synchronised. "
   3021 				  "Don't read what you didn't write!");
   3022 			status |= MIRROR_NOTSYNCED;
   3023 		}
   3024 	}
   3025 
   3026 	if (!(lv = lv_create_empty(lv_name ? lv_name : "lvol%d", NULL,
   3027 				   status, lp->alloc, vg)))
   3028 		return_0;
   3029 
   3030 	if (lp->read_ahead) {
   3031 		log_verbose("Setting read ahead sectors");
   3032 		lv->read_ahead = lp->read_ahead;
   3033 	}
   3034 
   3035 	if (lp->minor >= 0) {
   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);
   3041 	}
   3042 
   3043 	if (lp->tag && !str_list_add(cmd->mem, &lv->tags, lp->tag)) {
   3044 		log_error("Failed to add tag %s to %s/%s",
   3045 			  lp->tag, lv->vg->name, lv->name);
   3046 		return 0;
   3047 	}
   3048 
   3049 	if (!lv_extend(lv, lp->segtype, lp->stripes, lp->stripe_size,
   3050 		       1, lp->extents, NULL, 0u, 0u, lp->pvh, lp->alloc))
   3051 		return_0;
   3052 
   3053 	if (lp->mirrors > 1) {
   3054 		if (!lv_add_mirrors(cmd, lv, lp->mirrors - 1, lp->stripes,
   3055 				    adjusted_mirror_region_size(
   3056 						vg->extent_size,
   3057 						lv->le_count,
   3058 						lp->region_size),
   3059 				    lp->corelog ? 0U : 1U, lp->pvh, lp->alloc,
   3060 				    MIRROR_BY_LV |
   3061 				    (lp->nosync ? MIRROR_SKIP_INIT_SYNC : 0))) {
   3062 			stack;
   3063 			goto revert_new_lv;
   3064 		}
   3065 	}
   3066 
   3067 	/* store vg on disk(s) */
   3068 	if (!vg_write(vg) || !vg_commit(vg))
   3069 		return_0;
   3070 
   3071 	backup(vg);
   3072 
   3073 	if (lp->snapshot) {
   3074 		if (!activate_lv_excl(cmd, lv)) {
   3075 			log_error("Aborting. Failed to activate snapshot "
   3076 				  "exception store.");
   3077 			goto revert_new_lv;
   3078 		}
   3079 	} else if (!activate_lv(cmd, lv)) {
   3080 		if (lp->zero) {
   3081 			log_error("Aborting. Failed to activate new LV to wipe "
   3082 				  "the start of it.");
   3083 			goto deactivate_and_revert_new_lv;
   3084 		}
   3085 		log_error("Failed to activate new LV.");
   3086 		return 0;
   3087 	}
   3088 
   3089 	if (!lp->zero && !lp->snapshot)
   3090 		log_error("WARNING: \"%s\" not zeroed", lv->name);
   3091 	else if (!set_lv(cmd, lv, UINT64_C(0), 0)) {
   3092 		log_error("Aborting. Failed to wipe %s.",
   3093 			  lp->snapshot ? "snapshot exception store" :
   3094 					 "start of new LV");
   3095 		goto deactivate_and_revert_new_lv;
   3096 	}
   3097 
   3098 	if (lp->snapshot) {
   3099 		/* Reset permission after zeroing */
   3100 		if (!(lp->permission & LVM_WRITE))
   3101 			lv->status &= ~LVM_WRITE;
   3102 
   3103 		/* COW area must be deactivated if origin is not active */
   3104 		if (!origin_active && !deactivate_lv(cmd, lv)) {
   3105 			log_error("Aborting. Couldn't deactivate snapshot "
   3106 				  "COW area. Manual intervention required.");
   3107 			return 0;
   3108 		}
   3109 
   3110 		/* A virtual origin must be activated explicitly. */
   3111 		if (lp->voriginsize &&
   3112 		    (!(org = _create_virtual_origin(cmd, vg, lv->name,
   3113 						    lp->permission,
   3114 						    lp->voriginextents)) ||
   3115 		     !activate_lv(cmd, org))) {
   3116 			log_error("Couldn't create virtual origin for LV %s",
   3117 				  lv->name);
   3118 			if (org && !lv_remove(org))
   3119 				stack;
   3120 			goto deactivate_and_revert_new_lv;
   3121 		}
   3122 
   3123 		/* cow LV remains active and becomes snapshot LV */
   3124 
   3125 		if (!vg_add_snapshot(org, lv, NULL,
   3126 				     org->le_count, lp->chunk_size)) {
   3127 			log_error("Couldn't create snapshot.");
   3128 			goto deactivate_and_revert_new_lv;
   3129 		}
   3130 
   3131 		/* store vg on disk(s) */
   3132 		if (!vg_write(vg))
   3133 			return_0;
   3134 
   3135 		if (!suspend_lv(cmd, org)) {
   3136 			log_error("Failed to suspend origin %s", org->name);
   3137 			vg_revert(vg);
   3138 			return 0;
   3139 		}
   3140 
   3141 		if (!vg_commit(vg))
   3142 			return_0;
   3143 
   3144 		if (!resume_lv(cmd, org)) {
   3145 			log_error("Problem reactivating origin %s", org->name);
   3146 			return 0;
   3147 		}
   3148 	}
   3149 	/* FIXME out of sequence */
   3150 	backup(vg);
   3151 
   3152 	log_print("Logical volume \"%s\" created", lv->name);
   3153 
   3154 	/*
   3155 	 * FIXME: as a sanity check we could try reading the
   3156 	 * last block of the device ?
   3157 	 */
   3158 
   3159 	return 1;
   3160 
   3161 deactivate_and_revert_new_lv:
   3162 	if (!deactivate_lv(cmd, lv)) {
   3163 		log_error("Unable to deactivate failed new LV. "
   3164 			  "Manual intervention required.");
   3165 		return 0;
   3166 	}
   3167 
   3168 revert_new_lv:
   3169 	/* FIXME Better to revert to backup of metadata? */
   3170 	if (!lv_remove(lv) || !vg_write(vg) || !vg_commit(vg))
   3171 		log_error("Manual intervention may be required to remove "
   3172 			  "abandoned LV(s) before retrying.");
   3173 	else
   3174 		backup(vg);
   3175 
   3176 	return 0;
   3177 }
   3178 
   3179