From 10577ea32b12244d1887b1ff67f7aa4ffb3fc73b Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Mon, 27 Feb 2017 10:31:38 +0100
Subject: [PATCH 2/2] Always use '--yes' for lvremove
Otherwise LVM may fail with no answer for question if the LV should really be
removed and DISCARDED in case TRIM/DISCARD is enabled.
Resolves: rhbz#1426849
---
src/plugins/lvm-dbus.c | 12 ++++++------
src/plugins/lvm.c | 8 ++++----
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
index 1276548..f0d8694 100644
--- a/src/plugins/lvm-dbus.c
+++ b/src/plugins/lvm-dbus.c
@@ -1655,15 +1655,15 @@ gboolean bd_lvm_lvremove (gchar *vg_name, gchar *lv_name, gboolean force, GError
GVariantBuilder builder;
GVariant *extra = NULL;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_DICTIONARY);
+ /* '--yes' is needed if DISCARD is enabled */
+ g_variant_builder_add (&builder, "{sv}", "--yes", g_variant_new ("s", ""));
if (force) {
- g_variant_builder_init (&builder, G_VARIANT_TYPE_DICTIONARY);
g_variant_builder_add (&builder, "{sv}", "--force", g_variant_new ("s", ""));
- g_variant_builder_add (&builder, "{sv}", "--yes", g_variant_new ("s", ""));
-
- extra = g_variant_builder_end (&builder);
- g_variant_builder_clear (&builder);
- extra = g_variant_new ("(v)", extra);
}
+ extra = g_variant_builder_end (&builder);
+ g_variant_builder_clear (&builder);
+ extra = g_variant_new ("(v)", extra);
call_lv_method_sync (vg_name, lv_name, "Remove", NULL, extra, error);
return (*error == NULL);
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
index 68e7bf9..960634d 100644
--- a/src/plugins/lvm.c
+++ b/src/plugins/lvm.c
@@ -1117,16 +1117,16 @@ gboolean bd_lvm_lvcreate (gchar *vg_name, gchar *lv_name, guint64 size, gchar *t
* Returns: whether the @vg_name/@lv_name LV was successfully removed or not
*/
gboolean bd_lvm_lvremove (gchar *vg_name, gchar *lv_name, gboolean force, GError **error) {
- gchar *args[5] = {"lvremove", NULL, NULL, NULL, NULL};
- guint8 next_arg = 1;
+ /* '--yes' is needed if DISCARD is enabled */
+ gchar *args[5] = {"lvremove", "--yes", NULL, NULL, NULL};
+ guint8 next_arg = 2;
gboolean success = FALSE;
if (force) {
args[next_arg] = "--force";
next_arg++;
- args[next_arg] = "--yes";
- next_arg++;
}
+
args[next_arg] = g_strdup_printf ("%s/%s", vg_name, lv_name);
success = call_lvm_and_report_error (args, error);
--
2.7.4