Blob Blame History Raw
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