r109 - in lvm2/upstream/current: . daemons/clvmd lib/activate lib/device lib/display lib/format1 lib/format_text lib/metadata lib/report lib/striped tools
Bastian Blank
pkg-lvm-maintainers@lists.alioth.debian.org
Mon, 20 Jun 2005 14:47:29 +0000
Author: waldi
Date: Mon Jun 20 14:47:27 2005
New Revision: 109
Removed:
lvm2/upstream/current/CONTRIBUTORS
Modified:
lvm2/upstream/current/VERSION
lvm2/upstream/current/WHATS_NEW
lvm2/upstream/current/daemons/clvmd/clvmd-gulm.c
lvm2/upstream/current/daemons/clvmd/clvmd.c
lvm2/upstream/current/lib/activate/dev_manager.c
lvm2/upstream/current/lib/device/dev-cache.c
lvm2/upstream/current/lib/display/display.c
lvm2/upstream/current/lib/format1/import-export.c
lvm2/upstream/current/lib/format_text/export.c
lvm2/upstream/current/lib/format_text/import_vsn1.c
lvm2/upstream/current/lib/metadata/lv_alloc.h
lvm2/upstream/current/lib/metadata/lv_manip.c
lvm2/upstream/current/lib/metadata/merge.c
lvm2/upstream/current/lib/metadata/metadata.c
lvm2/upstream/current/lib/metadata/metadata.h
lvm2/upstream/current/lib/metadata/mirror.c
lvm2/upstream/current/lib/metadata/pv_manip.c
lvm2/upstream/current/lib/report/report.c
lvm2/upstream/current/lib/striped/striped.c
lvm2/upstream/current/tools/pvmove.c
Log:
Load LVM2.2.01.12 into /lvm2/upstream/current.
Modified: lvm2/upstream/current/VERSION
==============================================================================
--- lvm2/upstream/current/VERSION (original)
+++ lvm2/upstream/current/VERSION Mon Jun 20 14:47:27 2005
@@ -1 +1 @@
-2.01.11 (2005-06-13)
+2.01.12 (2005-06-14)
Modified: lvm2/upstream/current/WHATS_NEW
==============================================================================
--- lvm2/upstream/current/WHATS_NEW (original)
+++ lvm2/upstream/current/WHATS_NEW Mon Jun 20 14:47:27 2005
@@ -1,5 +1,12 @@
+Version 2.01.12 - 14th June 2005
+================================
+ Various allocation-related pvmove fixes.
+ Log an error if clvmd can't resolve a host name got from CCS.
+ Fix potential spin loop in clvmd.
+
Version 2.01.11 - 13th June 2005
================================
+ Added lvmconf.sh.
Use matchpathcon mode parameter.
Don't defer closing dead FDs in clvmd.
Remove hard-coded 64k text metadata writing restriction.
Modified: lvm2/upstream/current/daemons/clvmd/clvmd-gulm.c
==============================================================================
--- lvm2/upstream/current/daemons/clvmd/clvmd-gulm.c (original)
+++ lvm2/upstream/current/daemons/clvmd/clvmd-gulm.c Mon Jun 20 14:47:27 2005
@@ -944,7 +944,13 @@
}
else
{
- DEBUGLOG("node %s has clvm disabled\n", nodename);
+ if (!clvmflag) {
+ DEBUGLOG("node %s has clvm disabled\n", nodename);
+ }
+ else {
+ DEBUGLOG("Cannot resolve host name %s\n", nodename);
+ log_err("Cannot resolve host name %s\n", nodename);
+ }
}
free(nodename);
}
Modified: lvm2/upstream/current/daemons/clvmd/clvmd.c
==============================================================================
--- lvm2/upstream/current/daemons/clvmd/clvmd.c (original)
+++ lvm2/upstream/current/daemons/clvmd/clvmd.c Mon Jun 20 14:47:27 2005
@@ -512,6 +512,10 @@
FD_ZERO(&in);
for (thisfd = &local_client_head; thisfd != NULL;
thisfd = thisfd->next) {
+
+ if (thisfd->removeme)
+ continue;
+
/* if the cluster is not quorate then don't listen for new requests */
if ((thisfd->type != LOCAL_RENDEZVOUS &&
thisfd->type != LOCAL_SOCK) || quorate)
Modified: lvm2/upstream/current/lib/activate/dev_manager.c
==============================================================================
--- lvm2/upstream/current/lib/activate/dev_manager.c (original)
+++ lvm2/upstream/current/lib/activate/dev_manager.c Mon Jun 20 14:47:27 2005
@@ -803,7 +803,7 @@
(seg_pv(seg, s)->pe_start +
(esize * seg_pe(seg, s))),
trailing_space);
- else {
+ else if (seg_type(seg, s) == AREA_LV) {
if (!(dl = hash_lookup(dm->layers,
seg_lv(seg, s)->lvid.s))) {
log_error("device layer %s missing from hash",
@@ -822,6 +822,10 @@
"%s %" PRIu64 "%s", devbuf,
esize * seg_le(seg, s),
trailing_space);
+ } else {
+ log_error("Internal error: Unassigned area found in LV %s.",
+ seg->lv);
+ return 0;
}
if (tw < 0) {
@@ -1243,6 +1247,7 @@
/* Add dependencies for any LVs that segments refer to */
list_iterate_items(seg, &lv->segments) {
+ // When do we need? _set_flag(dl, REMOVE) on the log?
if (seg->log_lv &&
!str_list_add(dm->mem, &dl->pre_create,
_build_dlid(dm->mem, seg->log_lv->lvid.s,
@@ -1250,7 +1255,6 @@
stack;
return 0;
}
- // FIXME Check we don't want NOPROPAGATE here
for (s = 0; s < seg->area_count; s++) {
if (seg_type(seg, s) != AREA_LV)
@@ -1262,7 +1266,10 @@
stack;
return 0;
}
+
+ // ? if (seg_lv(seg, s)->status & PVMOVE)
_set_flag(dl, NOPROPAGATE);
+ // When do we need? _set_flag(dl, REMOVE)
}
}
Modified: lvm2/upstream/current/lib/device/dev-cache.c
==============================================================================
--- lvm2/upstream/current/lib/device/dev-cache.c (original)
+++ lvm2/upstream/current/lib/device/dev-cache.c Mon Jun 20 14:47:27 2005
@@ -247,6 +247,8 @@
/* Generate pretend device numbers for loopfiles */
if (!d) {
+ if (hash_lookup(_cache.names, path))
+ return 1;
d = ++loopfile_count;
loopfile = 1;
}
@@ -627,6 +629,10 @@
if (!d) {
_insert(name, 0);
d = (struct device *) hash_lookup(_cache.names, name);
+ if (!d) {
+ _full_scan(0);
+ d = (struct device *) hash_lookup(_cache.names, name);
+ }
}
return (d && (!f || (d->flags & DEV_REGULAR) ||
Modified: lvm2/upstream/current/lib/display/display.c
==============================================================================
--- lvm2/upstream/current/lib/display/display.c (original)
+++ lvm2/upstream/current/lib/display/display.c Mon Jun 20 14:47:27 2005
@@ -471,7 +471,9 @@
log_print("%sLogical extents\t%d to %d", pre,
seg_le(seg, s),
seg_le(seg, s) + seg->area_len - 1);
-
+ break;
+ case AREA_UNASSIGNED:
+ log_print("%sUnassigned area", pre);
}
}
Modified: lvm2/upstream/current/lib/format1/import-export.c
==============================================================================
--- lvm2/upstream/current/lib/format1/import-export.c (original)
+++ lvm2/upstream/current/lib/format1/import-export.c Mon Jun 20 14:47:27 2005
@@ -395,7 +395,7 @@
return 0;
}
if (seg_type(seg, s) != AREA_PV) {
- log_error("LV stripe found in LV %s: "
+ log_error("Non-PV stripe found in LV %s: "
"unsupported by format1", lv->name);
return 0;
}
Modified: lvm2/upstream/current/lib/format_text/export.c
==============================================================================
--- lvm2/upstream/current/lib/format_text/export.c (original)
+++ lvm2/upstream/current/lib/format_text/export.c Mon Jun 20 14:47:27 2005
@@ -480,6 +480,9 @@
seg_lv(seg, s)->name,
seg_le(seg, s),
(s == seg->area_count - 1) ? "" : ",");
+ break;
+ case AREA_UNASSIGNED:
+ return 0;
}
}
Modified: lvm2/upstream/current/lib/format_text/import_vsn1.c
==============================================================================
--- lvm2/upstream/current/lib/format_text/import_vsn1.c (original)
+++ lvm2/upstream/current/lib/format_text/import_vsn1.c Mon Jun 20 14:47:27 2005
@@ -364,10 +364,6 @@
stack;
return 0;
}
- /*
- * Adjust extent counts in the pv and vg.
- */
- seg->lv->vg->free_count -= seg->area_len;
} else if ((lv1 = find_lv(seg->lv->vg, cv->v.str))) {
set_lv_segment_area_lv(seg, s, lv1, cv->next->v.i,
flags);
Modified: lvm2/upstream/current/lib/metadata/lv_alloc.h
==============================================================================
--- lvm2/upstream/current/lib/metadata/lv_alloc.h (original)
+++ lvm2/upstream/current/lib/metadata/lv_alloc.h Mon Jun 20 14:47:27 2005
@@ -37,6 +37,10 @@
void set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num,
struct logical_volume *lv, uint32_t le,
uint32_t flags);
+int move_lv_segment_area(struct lv_segment *seg_to, uint32_t area_to,
+ struct lv_segment *seg_from, uint32_t area_from);
+void release_lv_segment_area(struct lv_segment *seg, uint32_t s,
+ uint32_t area_reduction);
struct alloc_handle;
struct alloc_handle *allocate_extents(struct volume_group *vg,
Modified: lvm2/upstream/current/lib/metadata/lv_manip.c
==============================================================================
--- lvm2/upstream/current/lib/metadata/lv_manip.c (original)
+++ lvm2/upstream/current/lib/metadata/lv_manip.c Mon Jun 20 14:47:27 2005
@@ -125,6 +125,74 @@
return seg;
}
+void release_lv_segment_area(struct lv_segment *seg, uint32_t s,
+ uint32_t area_reduction)
+{
+ if (seg_type(seg, s) == AREA_UNASSIGNED)
+ return;
+
+ if (seg_type(seg, s) == AREA_PV) {
+ release_pv_segment(seg_pvseg(seg, s), area_reduction);
+ return;
+ }
+
+ if (seg_lv(seg, s)->status & MIRROR_IMAGE) {
+ lv_reduce(seg_lv(seg, s), area_reduction);
+ return;
+ }
+
+ if (area_reduction == seg->area_len) {
+ seg_lv(seg, s) = NULL;
+ seg_le(seg, s) = 0;
+ seg_type(seg, s) = AREA_UNASSIGNED;
+ }
+}
+
+/*
+ * Move a segment area from one segment to another
+ */
+int move_lv_segment_area(struct lv_segment *seg_to, uint32_t area_to,
+ struct lv_segment *seg_from, uint32_t area_from)
+{
+ struct physical_volume *pv;
+ struct logical_volume *lv;
+ uint32_t pe, le;
+
+ switch (seg_type(seg_from, area_from)) {
+ case AREA_PV:
+ pv = seg_pv(seg_from, area_from);
+ pe = seg_pe(seg_from, area_from);
+
+ release_lv_segment_area(seg_from, area_from,
+ seg_from->area_len);
+ release_lv_segment_area(seg_to, area_to, seg_to->area_len);
+
+ if (!set_lv_segment_area_pv(seg_to, area_to, pv, pe)) {
+ stack;
+ return 0;
+ }
+
+ break;
+
+ case AREA_LV:
+ lv = seg_lv(seg_from, area_from);
+ le = seg_le(seg_from, area_from);
+
+ release_lv_segment_area(seg_from, area_from,
+ seg_from->area_len);
+ release_lv_segment_area(seg_to, area_to, seg_to->area_len);
+
+ set_lv_segment_area_lv(seg_to, area_to, lv, le, 0);
+
+ break;
+
+ case AREA_UNASSIGNED:
+ release_lv_segment_area(seg_to, area_to, seg_to->area_len);
+ }
+
+ return 1;
+}
+
/*
* Link part of a PV to an LV segment.
*/
@@ -132,7 +200,6 @@
struct physical_volume *pv, uint32_t pe)
{
seg->area[area_num].type = AREA_PV;
- pv->pe_alloc_count += seg->area_len;
if (!(seg_pvseg(seg, area_num) =
assign_peg_to_lvseg(pv, pe, seg->area_len, seg, area_num))) {
@@ -175,24 +242,19 @@
} else
area_reduction = reduction;
+ for (s = 0; s < seg->area_count; s++)
+ release_lv_segment_area(seg, s, area_reduction);
+
seg->len -= reduction;
seg->area_len -= area_reduction;
- for (s = 0; s < seg->area_count; s++) {
- if (seg_type(seg, s) == AREA_PV) {
- release_pv_segment(seg_pvseg(seg, s), area_reduction);
- seg->lv->vg->free_count += area_reduction;
- } else if (seg_lv(seg, s)->status & MIRROR_IMAGE)
- lv_reduce(seg_lv(seg, s), area_reduction);
- }
-
return 1;
}
/*
* Entry point for all LV reductions in size.
*/
-int lv_reduce(struct logical_volume *lv, uint32_t extents)
+static int _lv_reduce(struct logical_volume *lv, uint32_t extents, int delete)
{
struct lv_list *lvl;
struct lv_segment *seg;
@@ -225,6 +287,9 @@
lv->le_count -= extents;
lv->size = (uint64_t) lv->le_count * lv->vg->extent_size;
+ if (!delete)
+ return 1;
+
/* Remove the LV if it is now empty */
if (!lv->le_count) {
if (!(lvl = find_lv_in_vg(lv->vg, lv->name))) {
@@ -245,6 +310,19 @@
}
/*
+ * Empty an LV
+ */
+int lv_empty(struct logical_volume *lv)
+{
+ return _lv_reduce(lv, 0, lv->le_count);
+}
+
+int lv_reduce(struct logical_volume *lv, uint32_t extents)
+{
+ return _lv_reduce(lv, extents, 1);
+}
+
+/*
* Completely remove an LV.
*/
int lv_remove(struct logical_volume *lv)
@@ -406,8 +484,6 @@
lv->le_count += extents;
lv->size += (uint64_t) extents *lv->vg->extent_size;
- lv->vg->free_count -= aa[0].len * area_count;
-
if (segtype_is_mirrored(segtype))
lv->status |= MIRRORED;
@@ -624,8 +700,8 @@
/* Only allocate log_area the first time around */
if (ix + ix_offset < ah->area_count +
- (ah->log_count && !ah->log_area.len) ?
- ah->log_count : 0)
+ ((ah->log_count && !ah->log_area.len) ?
+ ah->log_count : 0))
/* FIXME With ALLOC_ANYWHERE, need to split areas */
break;
@@ -912,8 +988,6 @@
log_lv->le_count += ah->log_area.len;
log_lv->size += (uint64_t) log_lv->le_count *log_lv->vg->extent_size;
- log_lv->vg->free_count--;
-
if (log_lv->vg->fid->fmt->ops->lv_setup &&
!log_lv->vg->fid->fmt->ops->lv_setup(log_lv->vg->fid, log_lv)) {
stack;
Modified: lvm2/upstream/current/lib/metadata/merge.c
==============================================================================
--- lvm2/upstream/current/lib/metadata/merge.c (original)
+++ lvm2/upstream/current/lib/metadata/merge.c Mon Jun 20 14:47:27 2005
@@ -86,7 +86,12 @@
}
for (s = 0; s < seg->area_count; s++) {
- if (seg_type(seg, s) == AREA_PV) {
+ if (seg_type(seg, s) == AREA_UNASSIGNED) {
+ log_error("LV %s: segment %u has unassigned "
+ "area %u.",
+ lv->name, seg_count, s);
+ r = 0;
+ } else if (seg_type(seg, s) == AREA_PV) {
if (!seg_pvseg(seg, s) ||
seg_pvseg(seg, s)->lvseg != seg ||
seg_pvseg(seg, s)->lv_area != s) {
@@ -104,6 +109,7 @@
lv->name, seg_count, s);
r = 0;
}
+/* FIXME I don't think this ever holds?
if (seg_le(seg, s) != le) {
log_error("LV %s: segment %u has "
"inconsistent LV area %u "
@@ -111,6 +117,7 @@
lv->name, seg_count, s);
r = 0;
}
+ */
}
}
@@ -205,9 +212,8 @@
seg_pe(split_seg, s));
break;
- default:
- log_error("Unrecognised segment type %u",
- seg_type(seg, s));
+ case AREA_UNASSIGNED:
+ log_error("Unassigned area %u found in segment", s);
return 0;
}
}
Modified: lvm2/upstream/current/lib/metadata/metadata.c
==============================================================================
--- lvm2/upstream/current/lib/metadata/metadata.c (original)
+++ lvm2/upstream/current/lib/metadata/metadata.c Mon Jun 20 14:47:27 2005
@@ -465,9 +465,9 @@
return 0;
}
break;
- default:
- log_error("Unrecognised segment type "
- "%u", seg_type(seg, s));
+ case AREA_UNASSIGNED:
+ log_error("Unassigned area %u found in "
+ "segment", s);
return 0;
}
}
@@ -1045,7 +1045,27 @@
struct volume_group *vg_read(struct cmd_context *cmd, const char *vgname,
int *consistent)
{
- return _vg_read(cmd, vgname, consistent, 0);
+ struct volume_group *vg;
+ struct lv_list *lvl;
+
+ if (!(vg = _vg_read(cmd, vgname, consistent, 0)))
+ return NULL;
+
+ if (!check_pv_segments(vg)) {
+ log_error("Internal error: PV segments corrupted in %s.",
+ vg->name);
+ return NULL;
+ }
+
+ list_iterate_items(lvl, &vg->lvs) {
+ if (!check_lv_segments(lvl->lv)) {
+ log_error("Internal error: LV segments corrupted in %s.",
+ lvl->lv->name);
+ return NULL;
+ }
+ }
+
+ return vg;
}
struct volume_group *vg_read_precommitted(struct cmd_context *cmd,
Modified: lvm2/upstream/current/lib/metadata/metadata.h
==============================================================================
--- lvm2/upstream/current/lib/metadata/metadata.h (original)
+++ lvm2/upstream/current/lib/metadata/metadata.h Mon Jun 20 14:47:27 2005
@@ -81,6 +81,7 @@
} alloc_policy_t;
typedef enum {
+ AREA_UNASSIGNED = 0,
AREA_PV,
AREA_LV
} area_type_t;
@@ -443,9 +444,12 @@
int import,
struct volume_group *vg);
-/* Entry point for all LV extent reductions */
+/* Reduce the size of an LV by extents */
int lv_reduce(struct logical_volume *lv, uint32_t extents);
+/* Empty an LV prior to deleting it */
+int lv_empty(struct logical_volume *lv);
+
/* Entry point for all LV extent allocations */
int lv_extend(struct logical_volume *lv,
struct segment_type *segtype,
Modified: lvm2/upstream/current/lib/metadata/mirror.c
==============================================================================
--- lvm2/upstream/current/lib/metadata/mirror.c (original)
+++ lvm2/upstream/current/lib/metadata/mirror.c Mon Jun 20 14:47:27 2005
@@ -171,6 +171,8 @@
struct lv_segment *seg;
struct lv_list *lvl;
struct pv_list *pvl;
+ struct physical_volume *pv;
+ uint32_t pe;
int lv_used = 0;
uint32_t s, start_le, extent_count = 0u;
struct segment_type *segtype;
@@ -270,18 +272,19 @@
lv_used = 1;
}
+ pv = seg_pv(seg, s);
+ pe = seg_pe(seg, s);
log_very_verbose("Moving %s:%u-%u of %s/%s",
dev_name(pvl->pv->dev),
- seg_pe(seg, s),
- seg_pe(seg, s) +
- seg->area_len - 1,
+ pe, pe + seg->area_len - 1,
lv->vg->name, lv->name);
start_le = lv_mirr->le_count;
+ /* FIXME Clean this up */
+ release_lv_segment_area(seg, s, seg->area_len);
if (!lv_extend(lv_mirr, segtype, 1,
seg->area_len, 0u, seg->area_len,
- seg_pv(seg, s),
- seg_pe(seg, s),
+ pv, pe,
PVMOVE, allocatable_pvs,
alloc)) {
log_error("Unable to allocate "
@@ -355,22 +358,22 @@
else
c = 0;
- if (!set_lv_segment_area_pv(seg, s,
- seg_pv(mir_seg, c),
- seg_pe(mir_seg, c))) {
+ if (!move_lv_segment_area(seg, s, mir_seg, c)) {
stack;
return 0;
}
- /* Replace mirror with old area */
+ release_lv_segment_area(mir_seg, !c, mir_seg->area_len);
+
+ /* Replace mirror with error segment */
if (!
(mir_seg->segtype =
get_segtype_from_string(vg->cmd,
- "striped"))) {
- log_error("Missing striped segtype");
+ "error"))) {
+ log_error("Missing error segtype");
return 0;
}
- mir_seg->area_count = 1;
+ mir_seg->area_count = 0;
/* FIXME Assumes only one pvmove at a time! */
lv1->status &= ~LOCKED;
@@ -381,6 +384,10 @@
}
+ if (!lv_empty(lv_mirr)) {
+ stack;
+ return 0;
+ }
return 1;
}
@@ -392,7 +399,7 @@
list_iterate_items(seg, &lv_mirr->segments) {
if (!seg_is_mirrored(seg))
continue;
- if (seg->area[0].type != AREA_PV)
+ if (seg_type(seg, 0) != AREA_PV)
continue;
return dev_name(seg_dev(seg, 0));
}
@@ -433,7 +440,7 @@
/* Check segment origins point to pvname */
list_iterate_items(seg, &lv->segments) {
- if (seg->area[0].type != AREA_PV)
+ if (seg_type(seg, 0) != AREA_PV)
continue;
if (seg_dev(seg, 0) != dev)
continue;
Modified: lvm2/upstream/current/lib/metadata/pv_manip.c
==============================================================================
--- lvm2/upstream/current/lib/metadata/pv_manip.c (original)
+++ lvm2/upstream/current/lib/metadata/pv_manip.c Mon Jun 20 14:47:27 2005
@@ -162,14 +162,18 @@
peg->lvseg = seg;
peg->lv_area = area_num;
+ peg->pv->pe_alloc_count += area_len;
+ peg->lvseg->lv->vg->free_count -= area_len;
+
return peg;
}
int release_pv_segment(struct pv_segment *peg, uint32_t area_reduction)
{
peg->pv->pe_alloc_count -= area_reduction;
+ peg->lvseg->lv->vg->free_count += area_reduction;
- if (!peg->lvseg->area_len) {
+ if (peg->lvseg->area_len == area_reduction) {
peg->lvseg = NULL;
peg->lv_area = 0;
@@ -178,7 +182,8 @@
return 1;
}
- if (!pv_split_segment(peg->pv, peg->pe + peg->lvseg->area_len)) {
+ if (!pv_split_segment(peg->pv, peg->pe + peg->lvseg->area_len -
+ area_reduction)) {
stack;
return 0;
}
Modified: lvm2/upstream/current/lib/report/report.c
==============================================================================
--- lvm2/upstream/current/lib/report/report.c (original)
+++ lvm2/upstream/current/lib/report/report.c Mon Jun 20 14:47:27 2005
@@ -163,8 +163,8 @@
name = dev_name(seg_dev(seg, s));
extent = seg_pe(seg, s);
break;
- default:
- name = "unknown";
+ case AREA_UNASSIGNED:
+ name = "unassigned";
extent = 0;
}
Modified: lvm2/upstream/current/lib/striped/striped.c
==============================================================================
--- lvm2/upstream/current/lib/striped/striped.c (original)
+++ lvm2/upstream/current/lib/striped/striped.c Mon Jun 20 14:47:27 2005
@@ -115,7 +115,8 @@
/* FIXME Relax this to first area type != second area type */
/* plus the additional AREA_LV checks needed */
if ((first->area[s].type != AREA_PV) ||
- (second->area[s].type != AREA_PV)) return 0;
+ (second->area[s].type != AREA_PV))
+ return 0;
width = first->area_len;
Modified: lvm2/upstream/current/tools/pvmove.c
==============================================================================
--- lvm2/upstream/current/tools/pvmove.c (original)
+++ lvm2/upstream/current/tools/pvmove.c Mon Jun 20 14:47:27 2005
@@ -170,6 +170,14 @@
log_print("Skipping mirror LV %s", lv->name);
continue;
}
+ if (lv->status & MIRROR_LOG) {
+ log_print("Skipping mirror log LV %s", lv->name);
+ continue;
+ }
+ if (lv->status & MIRROR_IMAGE) {
+ log_print("Skipping mirror image LV %s", lv->name);
+ continue;
+ }
if (lv->status & LOCKED) {
log_print("Skipping locked LV %s", lv->name);
continue;