From 0942cab0375cb445cc8edfba87ea82a703383964 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 7 Dec 2010 17:55:38 +0000 Subject: [PATCH] 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. --- daemon/lvm.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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); -- 1.8.3.1