[lvm-devel] [PATCH] (4/6) new vgreduce --removemissing semantics
Petr Rockai
prockai at redhat.com
Wed Sep 10 11:49:09 UTC 2008
Hi,
there is one small addendum to make --removemissing --force actually work with
this patch. It circumvents the error return from _consolidate_vg when it is
used from _make_vg_consistent (which is in turn used when --force is in
effect).
Now looking at the patch again, I am not so convinced this is the correct
solution: it seems that if _make_vg_consistent worked as expected, removing any
LVs that reside on missing PVs should have been removed by the time we call
_consolidate_vg. I am still sending this patch for reference, but please bear
with me, I will come with a better one in a few minutes.
However, I am not sure why this makes the tests pass -- probably an omission in
our testsuite (or how it checks that the vgreduce worked correctly)?
Yours,
Petr.
diff -rN -p -u old-hotspare-everything/tools/vgreduce.c new-hotspare-everything/tools/vgreduce.c
--- old-hotspare-everything/tools/vgreduce.c 2008-09-10 13:39:47.064286369 +0200
+++ new-hotspare-everything/tools/vgreduce.c 2008-09-10 13:39:47.104289777 +0200
@@ -131,12 +131,16 @@ static int _remove_lv(struct cmd_context
return 1;
}
-static int _consolidate_vg(struct cmd_context *cmd, struct volume_group *vg)
+static int _consolidate_vg(struct cmd_context *cmd, struct volume_group *vg,
+ int force)
{
struct pv_list *pvl;
struct lv_list *lvl;
int err = 0;
+ if (force)
+ goto remove;
+
list_iterate_items(lvl, &vg->lvs) {
if (lvl->lv->status & PARTIAL_LV) {
log_warn("WARNING: Partial LV %s needs to be repaired "
@@ -153,6 +157,7 @@ static int _consolidate_vg(struct cmd_co
log_warn("Proceeding to remove empty missing PVs.");
}
+remove:
list_iterate_items(pvl, &vg->pvs) {
if (pvl->pv->dev && !(pvl->pv->status & MISSING_PV))
continue;
@@ -214,7 +219,7 @@ static int _make_vg_consistent(struct cm
return 0;
}
- if (!_consolidate_vg(cmd, vg))
+ if (!_consolidate_vg(cmd, vg, 1))
return_0;
/* FIXME Recovery. For now people must clean up by hand. */
@@ -549,7 +554,7 @@ int vgreduce(struct cmd_context *cmd, in
return ECMD_FAILED;
}
} else {
- fixed = _consolidate_vg(cmd, vg);
+ fixed = _consolidate_vg(cmd, vg, 0);
}
if (!vg_write(vg) || !vg_commit(vg)) {
--
Peter Rockai | me()mornfall!net | prockai()redhat!com
http://blog.mornfall.net | http://web.mornfall.net
"In My Egotistical Opinion, most people's C programs should be
indented six feet downward and covered with dirt."
-- Blair P. Houghton on the subject of C program indentation
More information about the lvm-devel
mailing list