diff --git a/WHATS_NEW b/WHATS_NEW index 52400a16c..c1ce79135 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -43,7 +43,9 @@ Version 2.02.29 - All tools: print --help output to stdout, not stderr. After a diagnostic, suggest --help, rather than printing all --help output. Add %PVS extents option to lvresize, lvextend, and lvcreate. + Add 'make check' to run tests in new subdirectory 'test'. Moved the obsolete test subdirectory to old-tests. + Cope with relative paths in configure --with-dmdir. Remove no-longer-correct restrictions on PV arg count with stripes/mirrors. Fix strdup memory leak in str_list_dup(). Link with -lpthread when static SELinux libraries require that. diff --git a/configure.in b/configure.in index 6883b522b..96e677297 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ ## ## Copyright (C) 2000-2004 Sistina Software, Inc. All rights reserved. -## Copyright (C) 2004, 2007 Red Hat, Inc. All rights reserved. +## Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. ## ## This file is part of LVM2. ## diff --git a/lib/metadata/lv_alloc.h b/lib/metadata/lv_alloc.h index 096057e29..c25c32543 100644 --- a/lib/metadata/lv_alloc.h +++ b/lib/metadata/lv_alloc.h @@ -50,6 +50,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg, uint32_t extents, struct list *allocatable_pvs, alloc_policy_t alloc, + unsigned can_split, struct list *parallel_areas); int lv_add_segment(struct alloc_handle *ah, diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 33a834877..ed4c59097 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1055,13 +1055,13 @@ static int _allocate(struct alloc_handle *ah, struct volume_group *vg, struct logical_volume *lv, uint32_t new_extents, + unsigned can_split, struct list *allocatable_pvs) { struct pv_area **areas; uint32_t allocated = lv ? lv->le_count : 0; uint32_t old_allocated; struct lv_segment *prev_lvseg = NULL; - unsigned can_split = 1; /* Are we allowed more than one segment? */ int r = 0; struct list *pvms; uint32_t areas_size; @@ -1180,6 +1180,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg, uint32_t extents, struct list *allocatable_pvs, alloc_policy_t alloc, + unsigned can_split, struct list *parallel_areas) { struct alloc_handle *ah; @@ -1208,7 +1209,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg, if (!segtype_is_virtual(segtype) && !_allocate(ah, vg, lv, (lv ? lv->le_count : 0) + extents, - allocatable_pvs)) { + can_split, allocatable_pvs)) { stack; alloc_destroy(ah); return NULL; @@ -1403,16 +1404,18 @@ int lv_extend(struct logical_volume *lv, uint32_t m; struct alloc_handle *ah; struct lv_segment *seg; + unsigned can_split = 1; if (segtype_is_virtual(segtype)) return lv_add_virtual_segment(lv, status, extents, segtype); /* FIXME Temporary restriction during code reorganisation */ if (mirrored_pv) - alloc = ALLOC_CONTIGUOUS; + can_split = 0; if (!(ah = allocate_extents(lv->vg, lv, segtype, stripes, mirrors, 0, - extents, allocatable_pvs, alloc, NULL))) + extents, allocatable_pvs, alloc, can_split, + NULL))) return_0; if (mirrors < 2) { diff --git a/man/lvchange.8 b/man/lvchange.8 index 86c264eba..56a9fa7a9 100644 --- a/man/lvchange.8 +++ b/man/lvchange.8 @@ -75,11 +75,10 @@ Change access permission to read-only or read/write. .I \-r, \-\-readahead ReadAheadSectors|auto|none Set read ahead sector count of this logical volume. For volume groups with metadata in lvm1 format, this must -be a value between 2 and 120. +be a value between 2 and 120 sectors. The default value is "auto" which allows the kernel to choose a suitable value automatically. "None" is equivalent to specifying zero. -N.B. This setting is currently disregarded and "auto" is always used. .TP .I \-\-refresh If the logical volume is active, reload its metadata. diff --git a/man/lvcreate.8 b/man/lvcreate.8 index 77bdbb8b2..b3d427e25 100644 --- a/man/lvcreate.8 +++ b/man/lvcreate.8 @@ -125,7 +125,6 @@ be a value between 2 and 120. The default value is "auto" which allows the kernel to choose a suitable value automatically. "None" is equivalent to specifying zero. -N.B. This setting is currently disregarded and "auto" is always used. .TP .I \-R, \-\-regionsize MirrorLogRegionSize A mirror is divided into regions of this size (in MB), and the mirror log diff --git a/tools/lvconvert.c b/tools/lvconvert.c index a7484828f..5d28bbdb2 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -339,7 +339,7 @@ static int lvconvert_mirrors(struct cmd_context * cmd, struct logical_volume * l 1, lp->mirrors - 1, corelog ? 0U : 1U, lv->le_count, lp->pvh, lp->alloc, - parallel_areas))) + 1, parallel_areas))) return_0; lp->region_size = adjusted_mirror_region_size(lv->vg->extent_size, @@ -385,7 +385,7 @@ static int lvconvert_mirrors(struct cmd_context * cmd, struct logical_volume * l if (!(ah = allocate_extents(lv->vg, NULL, lp->segtype, 0, 0, 1, 0, lp->pvh, lp->alloc, - parallel_areas))) { + 1, parallel_areas))) { stack; return 0; } diff --git a/tools/lvcreate.c b/tools/lvcreate.c index 958caa6b9..336c7675c 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -750,7 +750,7 @@ static int _lvcreate(struct cmd_context *cmd, struct volume_group *vg, if (!(ah = allocate_extents(vg, NULL, lp->segtype, lp->stripes, lp->mirrors, lp->corelog ? 0U : 1U, - lp->extents, pvh, lp->alloc, NULL))) + lp->extents, pvh, lp->alloc, 1, NULL))) return_0; lp->region_size = adjusted_mirror_region_size(vg->extent_size, diff --git a/tools/pvmove.c b/tools/pvmove.c index 3a8d1085c..e34e6d411 100644 --- a/tools/pvmove.c +++ b/tools/pvmove.c @@ -161,6 +161,11 @@ static struct logical_volume *_set_up_pvmove_lv(struct cmd_context *cmd, log_print("Skipping locked LV %s", lv->name); continue; } + /* FIXME Just insert the layer below - no allocation */ + // This knows nothing about pvmove + // insert_layer_for_segments_on_pv(cmd, lv, source_pvl, lv_mirr, *lvs_changed) + // - for each lv segment using that pv + // - call new fn insert_internal_layer() if (!insert_pvmove_mirrors(cmd, lv_mirr, source_pvl, lv, allocatable_pvs, alloc, *lvs_changed)) { @@ -175,6 +180,10 @@ static struct logical_volume *_set_up_pvmove_lv(struct cmd_context *cmd, return NULL; } + /* FIXME Do allocation and convert to mirror */ + // again, this knows nothing about pvmove: it's a normal lvconvert lv_mirr to mirror with in-core log + // - a flag passed in requires that parent segs get split after the allocation (with failure if not possible) + return lv_mirr; }