From: Richard W.M. Jones Date: Tue, 7 Dec 2010 17:55:38 +0000 (+0000) Subject: ubuntu: deactivate LVs and VGs before removing them. X-Git-Tag: 1.7.20~2 X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=0942cab0375cb445cc8edfba87ea82a703383964;p=libguestfs.git ubuntu: deactivate LVs and VGs before removing them. Even with the '-f' option, LVM on Ubuntu sometimes cannot remove active LVs and VGs. Change lvm-remove-all so it deactivates each LV and VG before removing them. --- diff --git a/daemon/lvm.c b/daemon/lvm.c index 216c9c4..284e580 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -322,6 +322,12 @@ do_lvm_remove_all (void) return -1; for (i = 0; xs[i] != NULL; ++i) { + /* Deactivate the LV first. On Ubuntu, lvremove '-f' option + * does not remove active LVs reliably. + */ + (void) command (NULL, NULL, "lvm", "lvchange", "-an", xs[i], NULL); + udev_settle (); + r = command (NULL, &err, "lvm", "lvremove", "-f", xs[i], NULL); if (r == -1) { reply_with_error ("lvremove: %s: %s", xs[i], err); @@ -339,6 +345,10 @@ do_lvm_remove_all (void) return -1; for (i = 0; xs[i] != NULL; ++i) { + /* Deactivate the VG first, see note above. */ + (void) command (NULL, NULL, "lvm", "vgchange", "-an", xs[i], NULL); + udev_settle (); + r = command (NULL, &err, "lvm", "vgremove", "-f", xs[i], NULL); if (r == -1) { reply_with_error ("vgremove: %s: %s", xs[i], err);