diff --git a/modules/lvm2/jobhelpers.c b/modules/lvm2/jobhelpers.c index 8bddd5efa..0570adb26 100644 --- a/modules/lvm2/jobhelpers.c +++ b/modules/lvm2/jobhelpers.c @@ -25,9 +25,11 @@ #include #include +#include #include "jobhelpers.h" + gboolean lvcreate_job_func (UDisksThreadedJob *job, GCancellable *cancellable, gpointer user_data, @@ -310,7 +312,18 @@ gboolean pvremove_job_func (UDisksThreadedJob *job, GError **error) { VGJobData *data = user_data; - return bd_lvm_pvremove (data->pv_path, NULL /* extra_args */, error); + gboolean succ = FALSE; + succ = bd_lvm_pvremove (data->pv_path, NULL /* extra_args */, error); + if (!succ) + return FALSE; + + if (bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, NULL) && + !bd_lvm_devices_delete (data->pv_path, NULL, NULL, error)) + { + udisks_warning ("Failed to remove %s from LVM devices file: %s", data->pv_path, (*error)->message); + g_clear_error (error); + } + return TRUE; } gboolean pvmove_job_func (UDisksThreadedJob *job, diff --git a/modules/lvm2/udiskslinuxvolumegroup.c b/modules/lvm2/udiskslinuxvolumegroup.c index 1c51430e5..96b2cadc7 100644 --- a/modules/lvm2/udiskslinuxvolumegroup.c +++ b/modules/lvm2/udiskslinuxvolumegroup.c @@ -362,6 +362,12 @@ handle_delete (UDisksVolumeGroup *_group, udisks_warning ("Failed to wipe PV %s: %s", device_file, error->message); g_clear_error (&error); } + if (bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, NULL) && + !bd_lvm_devices_delete (device_file, NULL, NULL, &error)) + { + udisks_warning ("Failed to remove %s from LVM devices file: %s", device_file, error->message); + g_clear_error (&error); + } } } diff --git a/src/tests/dbus-tests/test_20_LVM.py b/src/tests/dbus-tests/test_20_LVM.py index 9095dfa03..07438402f 100644 --- a/src/tests/dbus-tests/test_20_LVM.py +++ b/src/tests/dbus-tests/test_20_LVM.py @@ -12,6 +12,9 @@ import udiskstestcase +LVM_DEVICES_FILE = "/etc/lvm/devices/system.devices" + + class UDisksLVMTestBase(udiskstestcase.UdisksTestCase): @classmethod @@ -107,6 +110,11 @@ def test_05_vg(self): fstype = self.get_property(dev_obj, '.Block', 'IdType') fstype.assertEqual('') + # check that PV was removed from the LVM devices file + if os.path.exists(LVM_DEVICES_FILE): + devices_file = self.read_file(LVM_DEVICES_FILE) + self.assertNotIn(self.vdevs[0], devices_file) + def test_10_linear(self): '''Test linear (plain) LV functionality'''