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