diff --git a/0004-Revert-Terminology-cleanups.patch b/0004-Revert-Terminology-cleanups.patch
deleted file mode 100644
index 0db4494..0000000
--- a/0004-Revert-Terminology-cleanups.patch
+++ /dev/null
@@ -1,908 +0,0 @@
-From 42042e7fb6177d3cfe5568e358a38278925a2624 Mon Sep 17 00:00:00 2001
-From: Vojtech Trefny <vtrefny@redhat.com>
-Date: Wed, 26 May 2021 12:27:34 +0200
-Subject: [PATCH] Revert "Terminology cleanups"
-
-This reverts following commits:
-- 3d46339fe9cf12e9082fcbe4dc5acc9f92617e8d
-- 63c9c7165e5cdfa4a47dcf0ed9d717b71e7921f2
-- 8956b9af8a785ae25e0e7153d2ef0702ce2f567c
----
- blivet/devicefactory.py               | 24 +++++-----
- blivet/devices/dm.py                  |  9 +++-
- blivet/devices/loop.py                | 20 ++++----
- blivet/devices/luks.py                | 26 +++++-----
- blivet/errors.py                      |  2 +-
- blivet/partitioning.py                | 22 +++++++--
- blivet/populator/helpers/dm.py        |  4 +-
- blivet/populator/helpers/luks.py      |  4 +-
- blivet/populator/helpers/lvm.py       |  2 +-
- blivet/populator/helpers/mdraid.py    | 14 +++---
- blivet/populator/helpers/multipath.py |  8 ++--
- blivet/populator/populator.py         | 69 ++++++++++++++-------------
- blivet/threads.py                     |  3 +-
- blivet/udev.py                        | 34 ++++++-------
- tests/devicefactory_test.py           | 10 ++--
- tests/devices_test/size_test.py       |  6 +--
- tests/populator_test.py               | 34 ++++++-------
- tests/udev_test.py                    | 12 ++---
- tests/vmtests/vmbackedtestcase.py     |  2 +-
- 19 files changed, 168 insertions(+), 137 deletions(-)
-
-diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
-index 0f7fdfa1..f56bd9a3 100644
---- a/blivet/devicefactory.py
-+++ b/blivet/devicefactory.py
-@@ -849,12 +849,12 @@ class DeviceFactory(object):
-                 parent_container.parents.remove(orig_device)
- 
-         if self.encrypted and isinstance(self.device, LUKSDevice) and \
--                self.raw_device.format.luks_version != self.luks_version:
--            self.raw_device.format.luks_version = self.luks_version
-+                self.device.slave.format.luks_version != self.luks_version:
-+            self.device.slave.format.luks_version = self.luks_version
- 
-         if self.encrypted and isinstance(self.device, LUKSDevice) and \
--                self.raw_device.format.luks_sector_size != self.luks_sector_size:
--            self.raw_device.format.luks_sector_size = self.luks_sector_size
-+                self.device.slave.format.luks_sector_size != self.luks_sector_size:
-+            self.device.slave.format.luks_sector_size = self.luks_sector_size
- 
-     def _set_name(self):
-         if not self.device_name:
-@@ -1173,11 +1173,11 @@ class PartitionSetFactory(PartitionFactory):
-                     container.parents.remove(member)
-                 self.storage.destroy_device(member)
-                 members.remove(member)
--                self.storage.format_device(member.raw_device,
-+                self.storage.format_device(member.slave,
-                                            get_format(self.fstype))
--                members.append(member.raw_device)
-+                members.append(member.slave)
-                 if container:
--                    container.parents.append(member.raw_device)
-+                    container.parents.append(member.slave)
- 
-                 continue
- 
-@@ -1199,10 +1199,10 @@ class PartitionSetFactory(PartitionFactory):
- 
-                 continue
- 
--            if member_encrypted and self.encrypted and self.luks_version != member.raw_device.format.luks_version:
--                member.raw_device.format.luks_version = self.luks_version
--            if member_encrypted and self.encrypted and self.luks_sector_size != member.raw_device.format.luks_sector_size:
--                member.raw_device.format.luks_sector_size = self.luks_sector_size
-+            if member_encrypted and self.encrypted and self.luks_version != member.slave.format.luks_version:
-+                member.slave.format.luks_version = self.luks_version
-+            if member_encrypted and self.encrypted and self.luks_sector_size != member.slave.format.luks_sector_size:
-+                member.slave.format.luks_sector_size = self.luks_sector_size
- 
-         ##
-         # Prepare previously allocated member partitions for reallocation.
-@@ -1262,7 +1262,7 @@ class PartitionSetFactory(PartitionFactory):
- 
-             if isinstance(member, LUKSDevice):
-                 self.storage.destroy_device(member)
--                member = member.raw_device
-+                member = member.slave
- 
-             self.storage.destroy_device(member)
- 
-diff --git a/blivet/devices/dm.py b/blivet/devices/dm.py
-index 3529f61c..508a6f89 100644
---- a/blivet/devices/dm.py
-+++ b/blivet/devices/dm.py
-@@ -154,6 +154,11 @@ class DMDevice(StorageDevice):
-         log_method_call(self, self.name, status=self.status)
-         super(DMDevice, self)._set_name(value)
- 
-+    @property
-+    def slave(self):
-+        """ This device's backing device. """
-+        return self.parents[0]
-+
- 
- class DMLinearDevice(DMDevice):
-     _type = "dm-linear"
-@@ -189,8 +194,8 @@ class DMLinearDevice(DMDevice):
-         """ Open, or set up, a device. """
-         log_method_call(self, self.name, orig=orig, status=self.status,
-                         controllable=self.controllable)
--        parent_length = self.parents[0].current_size / LINUX_SECTOR_SIZE
--        blockdev.dm.create_linear(self.name, self.parents[0].path, parent_length,
-+        slave_length = self.slave.current_size / LINUX_SECTOR_SIZE
-+        blockdev.dm.create_linear(self.name, self.slave.path, slave_length,
-                                   self.dm_uuid)
- 
-     def _post_setup(self):
-diff --git a/blivet/devices/loop.py b/blivet/devices/loop.py
-index 0f4d7775..78f88d7d 100644
---- a/blivet/devices/loop.py
-+++ b/blivet/devices/loop.py
-@@ -73,7 +73,7 @@ class LoopDevice(StorageDevice):
- 
-     def update_name(self):
-         """ Update this device's name. """
--        if not self.parents[0].status:
-+        if not self.slave.status:
-             # if the backing device is inactive, so are we
-             return self.name
- 
-@@ -81,7 +81,7 @@ class LoopDevice(StorageDevice):
-             # if our name is loopN we must already be active
-             return self.name
- 
--        name = blockdev.loop.get_loop_name(self.parents[0].path)
-+        name = blockdev.loop.get_loop_name(self.slave.path)
-         if name.startswith("loop"):
-             self.name = name
- 
-@@ -89,24 +89,24 @@ class LoopDevice(StorageDevice):
- 
-     @property
-     def status(self):
--        return (self.parents[0].status and
-+        return (self.slave.status and
-                 self.name.startswith("loop") and
--                blockdev.loop.get_loop_name(self.parents[0].path) == self.name)
-+                blockdev.loop.get_loop_name(self.slave.path) == self.name)
- 
-     @property
-     def size(self):
--        return self.parents[0].size
-+        return self.slave.size
- 
-     def _pre_setup(self, orig=False):
--        if not os.path.exists(self.parents[0].path):
--            raise errors.DeviceError("specified file (%s) does not exist" % self.parents[0].path)
-+        if not os.path.exists(self.slave.path):
-+            raise errors.DeviceError("specified file (%s) does not exist" % self.slave.path)
-         return StorageDevice._pre_setup(self, orig=orig)
- 
-     def _setup(self, orig=False):
-         """ Open, or set up, a device. """
-         log_method_call(self, self.name, orig=orig, status=self.status,
-                         controllable=self.controllable)
--        blockdev.loop.setup(self.parents[0].path)
-+        blockdev.loop.setup(self.slave.path)
- 
-     def _post_setup(self):
-         StorageDevice._post_setup(self)
-@@ -123,3 +123,7 @@ class LoopDevice(StorageDevice):
-         StorageDevice._post_teardown(self, recursive=recursive)
-         self.name = "tmploop%d" % self.id
-         self.sysfs_path = ''
-+
-+    @property
-+    def slave(self):
-+        return self.parents[0]
-diff --git a/blivet/devices/luks.py b/blivet/devices/luks.py
-index 5d6d6c65..555f1acd 100644
---- a/blivet/devices/luks.py
-+++ b/blivet/devices/luks.py
-@@ -66,13 +66,17 @@ class LUKSDevice(DMCryptDevice):
- 
-     @property
-     def raw_device(self):
-+        return self.slave
-+
-+    @property
-+    def slave(self):
-         if self._has_integrity:
-             return self.parents[0].parents[0]
-         return self.parents[0]
- 
-     def _get_size(self):
-         if not self.exists:
--            size = self.raw_device.size - crypto.LUKS_METADATA_SIZE
-+            size = self.slave.size - crypto.LUKS_METADATA_SIZE
-         elif self.resizable and self.target_size != Size(0):
-             size = self.target_size
-         else:
-@@ -80,8 +84,8 @@ class LUKSDevice(DMCryptDevice):
-         return size
- 
-     def _set_size(self, newsize):
--        if not self.exists and not self.raw_device.exists:
--            self.raw_device.size = newsize + crypto.LUKS_METADATA_SIZE
-+        if not self.exists and not self.slave.exists:
-+            self.slave.size = newsize + crypto.LUKS_METADATA_SIZE
- 
-             # just run the StorageDevice._set_size to make sure we are in the format limits
-             super(LUKSDevice, self)._set_size(newsize - crypto.LUKS_METADATA_SIZE)
-@@ -108,22 +112,22 @@ class LUKSDevice(DMCryptDevice):
-             raise ValueError("size is smaller than the minimum for this device")
- 
-         # don't allow larger luks than size (or target size) of backing device
--        if newsize > (self.raw_device.size - crypto.LUKS_METADATA_SIZE):
-+        if newsize > (self.slave.size - crypto.LUKS_METADATA_SIZE):
-             log.error("requested size %s is larger than size of the backing device %s",
--                      newsize, self.raw_device.size)
-+                      newsize, self.slave.size)
-             raise ValueError("size is larger than the size of the backing device")
- 
-         if self.align_target_size(newsize) != newsize:
-             raise ValueError("new size would violate alignment requirements")
- 
-     def _get_target_size(self):
--        return self.raw_device.format.target_size
-+        return self.slave.format.target_size
- 
-     @property
-     def max_size(self):
-         """ The maximum size this luks device can be. Maximum is based on the
-             maximum size of the backing device. """
--        max_luks = self.raw_device.max_size - crypto.LUKS_METADATA_SIZE
-+        max_luks = self.slave.max_size - crypto.LUKS_METADATA_SIZE
-         max_format = self.format.max_size
-         return min(max_luks, max_format) if max_format else max_luks
- 
-@@ -131,7 +135,7 @@ class LUKSDevice(DMCryptDevice):
-     def resizable(self):
-         """ Can this device be resized? """
-         return (self._resizable and self.exists and self.format.resizable and
--                self.raw_device.resizable and not self._has_integrity)
-+                self.slave.resizable and not self._has_integrity)
- 
-     def resize(self):
-         # size of LUKSDevice depends on size of the LUKS format on backing
-@@ -139,7 +143,7 @@ class LUKSDevice(DMCryptDevice):
-         log_method_call(self, self.name, status=self.status)
- 
-     def _post_create(self):
--        self.name = self.raw_device.format.map_name
-+        self.name = self.slave.format.map_name
-         StorageDevice._post_create(self)
- 
-     def _post_teardown(self, recursive=False):
-@@ -162,10 +166,10 @@ class LUKSDevice(DMCryptDevice):
-             self.name = new_name
- 
-     def dracut_setup_args(self):
--        return set(["rd.luks.uuid=luks-%s" % self.raw_device.format.uuid])
-+        return set(["rd.luks.uuid=luks-%s" % self.slave.format.uuid])
- 
-     def populate_ksdata(self, data):
--        self.raw_device.populate_ksdata(data)
-+        self.slave.populate_ksdata(data)
-         data.encrypted = True
-         super(LUKSDevice, self).populate_ksdata(data)
- 
-diff --git a/blivet/errors.py b/blivet/errors.py
-index fd51283f..f6bf853a 100644
---- a/blivet/errors.py
-+++ b/blivet/errors.py
-@@ -192,7 +192,7 @@ class DeviceTreeError(StorageError):
-     pass
- 
- 
--class NoParentsError(DeviceTreeError):
-+class NoSlavesError(DeviceTreeError):
-     pass
- 
- 
-diff --git a/blivet/partitioning.py b/blivet/partitioning.py
-index 53f9cc3f..ca0a55d1 100644
---- a/blivet/partitioning.py
-+++ b/blivet/partitioning.py
-@@ -32,7 +32,7 @@ import _ped
- 
- from .errors import DeviceError, PartitioningError, AlignmentError
- from .flags import flags
--from .devices import Device, PartitionDevice, device_path_to_name
-+from .devices import Device, PartitionDevice, LUKSDevice, device_path_to_name
- from .size import Size
- from .i18n import _
- from .util import stringize, unicodeize, compare
-@@ -1632,7 +1632,15 @@ class TotalSizeSet(object):
-             :param size: the target combined size
-             :type size: :class:`~.size.Size`
-         """
--        self.devices = [d.raw_device for d in devices]
-+        self.devices = []
-+        for device in devices:
-+            if isinstance(device, LUKSDevice):
-+                partition = device.slave
-+            else:
-+                partition = device
-+
-+            self.devices.append(partition)
-+
-         self.size = size
- 
-         self.requests = []
-@@ -1670,7 +1678,15 @@ class SameSizeSet(object):
-             :keyword max_size: the maximum size for growable devices
-             :type max_size: :class:`~.size.Size`
-         """
--        self.devices = [d.raw_device for d in devices]
-+        self.devices = []
-+        for device in devices:
-+            if isinstance(device, LUKSDevice):
-+                partition = device.slave
-+            else:
-+                partition = device
-+
-+            self.devices.append(partition)
-+
-         self.size = size / len(devices)
-         self.grow = grow
-         self.max_size = max_size
-diff --git a/blivet/populator/helpers/dm.py b/blivet/populator/helpers/dm.py
-index 30e99aa1..770736b0 100644
---- a/blivet/populator/helpers/dm.py
-+++ b/blivet/populator/helpers/dm.py
-@@ -46,13 +46,13 @@ class DMDevicePopulator(DevicePopulator):
-         name = udev.device_get_name(self.data)
-         log_method_call(self, name=name)
-         sysfs_path = udev.device_get_sysfs_path(self.data)
--        parent_devices = self._devicetree._add_parent_devices(self.data)
-+        slave_devices = self._devicetree._add_slave_devices(self.data)
-         device = self._devicetree.get_device_by_name(name)
- 
-         if device is None:
-             device = DMDevice(name, dm_uuid=self.data.get('DM_UUID'),
-                               sysfs_path=sysfs_path, exists=True,
--                              parents=[parent_devices[0]])
-+                              parents=[slave_devices[0]])
-             device.protected = True
-             device.controllable = False
-             self._devicetree._add_device(device)
-diff --git a/blivet/populator/helpers/luks.py b/blivet/populator/helpers/luks.py
-index 52795a98..51488691 100644
---- a/blivet/populator/helpers/luks.py
-+++ b/blivet/populator/helpers/luks.py
-@@ -43,7 +43,7 @@ class LUKSDevicePopulator(DevicePopulator):
-         return udev.device_is_dm_luks(data)
- 
-     def run(self):
--        parents = self._devicetree._add_parent_devices(self.data)
-+        parents = self._devicetree._add_slave_devices(self.data)
-         device = LUKSDevice(udev.device_get_name(self.data),
-                             sysfs_path=udev.device_get_sysfs_path(self.data),
-                             parents=parents,
-@@ -58,7 +58,7 @@ class IntegrityDevicePopulator(DevicePopulator):
-         return udev.device_is_dm_integrity(data)
- 
-     def run(self):
--        parents = self._devicetree._add_parent_devices(self.data)
-+        parents = self._devicetree._add_slave_devices(self.data)
-         device = IntegrityDevice(udev.device_get_name(self.data),
-                                  sysfs_path=udev.device_get_sysfs_path(self.data),
-                                  parents=parents,
-diff --git a/blivet/populator/helpers/lvm.py b/blivet/populator/helpers/lvm.py
-index c7adfa4e..b1626306 100644
---- a/blivet/populator/helpers/lvm.py
-+++ b/blivet/populator/helpers/lvm.py
-@@ -57,7 +57,7 @@ class LVMDevicePopulator(DevicePopulator):
-             log.warning("found non-vg device with name %s", vg_name)
-             device = None
- 
--        self._devicetree._add_parent_devices(self.data)
-+        self._devicetree._add_slave_devices(self.data)
- 
-         # LVM provides no means to resolve conflicts caused by duplicated VG
-         # names, so we're just being optimistic here. Woo!
-diff --git a/blivet/populator/helpers/mdraid.py b/blivet/populator/helpers/mdraid.py
-index 3479e3f7..76aebf25 100644
---- a/blivet/populator/helpers/mdraid.py
-+++ b/blivet/populator/helpers/mdraid.py
-@@ -31,7 +31,7 @@ from ... import udev
- from ...devicelibs import raid
- from ...devices import MDRaidArrayDevice, MDContainerDevice
- from ...devices import device_path_to_name
--from ...errors import DeviceError, NoParentsError
-+from ...errors import DeviceError, NoSlavesError
- from ...flags import flags
- from ...storage_log import log_method_call
- from .devicepopulator import DevicePopulator
-@@ -52,12 +52,12 @@ class MDDevicePopulator(DevicePopulator):
-         log_method_call(self, name=name)
- 
-         try:
--            self._devicetree._add_parent_devices(self.data)
--        except NoParentsError:
--            log.error("no parents found for mdarray %s, skipping", name)
-+            self._devicetree._add_slave_devices(self.data)
-+        except NoSlavesError:
-+            log.error("no slaves found for mdarray %s, skipping", name)
-             return None
- 
--        # try to get the device again now that we've got all the parents
-+        # try to get the device again now that we've got all the slaves
-         device = self._devicetree.get_device_by_name(name, incomplete=flags.allow_imperfect_devices)
- 
-         if device is None:
-@@ -74,8 +74,8 @@ class MDDevicePopulator(DevicePopulator):
-             device.name = name
- 
-         if device is None:
--            # if we get here, we found all of the parent devices and
--            # something must be wrong -- if all of the parents are in
-+            # if we get here, we found all of the slave devices and
-+            # something must be wrong -- if all of the slaves are in
-             # the tree, this device should be as well
-             if name is None:
-                 name = udev.device_get_name(self.data)
-diff --git a/blivet/populator/helpers/multipath.py b/blivet/populator/helpers/multipath.py
-index 96c0a9ad..10c745bf 100644
---- a/blivet/populator/helpers/multipath.py
-+++ b/blivet/populator/helpers/multipath.py
-@@ -40,13 +40,13 @@ class MultipathDevicePopulator(DevicePopulator):
-         name = udev.device_get_name(self.data)
-         log_method_call(self, name=name)
- 
--        parent_devices = self._devicetree._add_parent_devices(self.data)
-+        slave_devices = self._devicetree._add_slave_devices(self.data)
- 
-         device = None
--        if parent_devices:
--            device = MultipathDevice(name, parents=parent_devices,
-+        if slave_devices:
-+            device = MultipathDevice(name, parents=slave_devices,
-                                      sysfs_path=udev.device_get_sysfs_path(self.data),
--                                     wwn=parent_devices[0].wwn)
-+                                     wwn=slave_devices[0].wwn)
-             self._devicetree._add_device(device)
- 
-         return device
-diff --git a/blivet/populator/populator.py b/blivet/populator/populator.py
-index 75bb1741..d252281d 100644
---- a/blivet/populator/populator.py
-+++ b/blivet/populator/populator.py
-@@ -31,7 +31,7 @@ gi.require_version("BlockDev", "2.0")
- 
- from gi.repository import BlockDev as blockdev
- 
--from ..errors import DeviceError, DeviceTreeError, NoParentsError
-+from ..errors import DeviceError, DeviceTreeError, NoSlavesError
- from ..devices import DMLinearDevice, DMRaidArrayDevice
- from ..devices import FileDevice, LoopDevice
- from ..devices import MDRaidArrayDevice
-@@ -92,55 +92,56 @@ class PopulatorMixin(object):
- 
-         self._cleanup = False
- 
--    def _add_parent_devices(self, info):
--        """ Add all parents of a device, raising DeviceTreeError on failure.
-+    def _add_slave_devices(self, info):
-+        """ Add all slaves of a device, raising DeviceTreeError on failure.
- 
-             :param :class:`pyudev.Device` info: the device's udev info
--            :raises: :class:`~.errors.DeviceTreeError if no parents are found or
--                     if we fail to add any parent
--            :returns: a list of parent devices
-+            :raises: :class:`~.errors.DeviceTreeError if no slaves are found or
-+                     if we fail to add any slave
-+            :returns: a list of slave devices
-             :rtype: list of :class:`~.StorageDevice`
-         """
-         name = udev.device_get_name(info)
-         sysfs_path = udev.device_get_sysfs_path(info)
--        parent_dir = os.path.normpath("%s/slaves" % sysfs_path)
--        parent_names = os.listdir(parent_dir)
--        parent_devices = []
--        if not parent_names:
--            log.error("no parents found for %s", name)
--            raise NoParentsError("no parents found for device %s" % name)
--
--        for parent_name in parent_names:
--            path = os.path.normpath("%s/%s" % (parent_dir, parent_name))
--            parent_info = udev.get_device(os.path.realpath(path))
--
--            if not parent_info:
--                msg = "unable to get udev info for %s" % parent_name
-+        slave_dir = os.path.normpath("%s/slaves" % sysfs_path)
-+        slave_names = os.listdir(slave_dir)
-+        slave_devices = []
-+        if not slave_names:
-+            log.error("no slaves found for %s", name)
-+            raise NoSlavesError("no slaves found for device %s" % name)
-+
-+        for slave_name in slave_names:
-+            path = os.path.normpath("%s/%s" % (slave_dir, slave_name))
-+            slave_info = udev.get_device(os.path.realpath(path))
-+
-+            if not slave_info:
-+                msg = "unable to get udev info for %s" % slave_name
-                 raise DeviceTreeError(msg)
- 
-             # cciss in sysfs is "cciss!cXdYpZ" but we need "cciss/cXdYpZ"
--            parent_name = udev.device_get_name(parent_info).replace("!", "/")
--
--            parent_dev = self.get_device_by_name(parent_name)
--            if not parent_dev and parent_info:
--                # we haven't scanned the parent yet, so do it now
--                self.handle_device(parent_info)
--                parent_dev = self.get_device_by_name(parent_name)
--                if parent_dev is None:
-+            slave_name = udev.device_get_name(slave_info).replace("!", "/")
-+
-+            slave_dev = self.get_device_by_name(slave_name)
-+            if not slave_dev and slave_info:
-+                # we haven't scanned the slave yet, so do it now
-+                self.handle_device(slave_info)
-+                slave_dev = self.get_device_by_name(slave_name)
-+                if slave_dev is None:
-                     if udev.device_is_dm_lvm(info):
--                        if parent_name not in lvs_info.cache:
-+                        if slave_name not in lvs_info.cache:
-                             # we do not expect hidden lvs to be in the tree
-                             continue
- 
--                    # if the current parent is still not in
-+                    # if the current slave is still not in
-                     # the tree, something has gone wrong
--                    log.error("failure scanning device %s: could not add parent %s", name, parent_name)
--                    msg = "failed to add parent %s of device %s" % (parent_name, name)
-+                    log.error("failure scanning device %s: could not add slave %s", name, slave_name)
-+                    msg = "failed to add slave %s of device %s" % (slave_name,
-+                                                                   name)
-                     raise DeviceTreeError(msg)
- 
--            parent_devices.append(parent_dev)
-+            slave_devices.append(slave_dev)
- 
--        return parent_devices
-+        return slave_devices
- 
-     def _add_name(self, name):
-         if name not in self.names:
-@@ -317,7 +318,7 @@ class PopulatorMixin(object):
-                 continue
- 
-             # Make sure lvm doesn't get confused by PVs that belong to
--            # incomplete VGs. We will remove the PVs from the reject list when/if
-+            # incomplete VGs. We will remove the PVs from the blacklist when/if
-             # the time comes to remove the incomplete VG and its PVs.
-             for pv in vg.pvs:
-                 lvm.lvm_cc_addFilterRejectRegexp(pv.name)
-diff --git a/blivet/threads.py b/blivet/threads.py
-index 7e6d3105..a70deb69 100644
---- a/blivet/threads.py
-+++ b/blivet/threads.py
-@@ -63,11 +63,12 @@ class SynchronizedMeta(type):
-     """
-     def __new__(cls, name, bases, dct):
-         new_dct = {}
-+        blacklist = dct.get('_unsynchronized_methods', [])
- 
-         for n in dct:
-             obj = dct[n]
-             # Do not decorate class or static methods.
--            if n in dct.get('_unsynchronized_methods', []):
-+            if n in blacklist:
-                 pass
-             elif isinstance(obj, FunctionType):
-                 obj = exclusive(obj)
-diff --git a/blivet/udev.py b/blivet/udev.py
-index a8297f3f..e1b67845 100644
---- a/blivet/udev.py
-+++ b/blivet/udev.py
-@@ -39,7 +39,7 @@ from gi.repository import BlockDev as blockdev
- global_udev = pyudev.Context()
- log = logging.getLogger("blivet")
- 
--ignored_device_names = []
-+device_name_blacklist = []
- """ device name regexes to ignore; this should be empty by default """
- 
- 
-@@ -77,7 +77,7 @@ def get_devices(subsystem="block"):
- 
-     result = []
-     for device in global_udev.list_devices(subsystem=subsystem):
--        if not __is_ignored_blockdev(device.sys_name):
-+        if not __is_blacklisted_blockdev(device.sys_name):
-             dev = device_to_dict(device)
-             result.append(dev)
- 
-@@ -176,13 +176,13 @@ def resolve_glob(glob):
-     return ret
- 
- 
--def __is_ignored_blockdev(dev_name):
-+def __is_blacklisted_blockdev(dev_name):
-     """Is this a blockdev we never want for an install?"""
-     if dev_name.startswith("ram") or dev_name.startswith("fd"):
-         return True
- 
--    if ignored_device_names:
--        if any(re.search(expr, dev_name) for expr in ignored_device_names):
-+    if device_name_blacklist:
-+        if any(re.search(expr, dev_name) for expr in device_name_blacklist):
-             return True
- 
-     dev_path = "/sys/class/block/%s" % dev_name
-@@ -374,7 +374,7 @@ def device_is_disk(info):
-                  device_is_dm_lvm(info) or
-                  device_is_dm_crypt(info) or
-                  (device_is_md(info) and
--                  (not device_get_md_container(info) and not all(device_is_disk(d) for d in device_get_parents(info))))))
-+                  (not device_get_md_container(info) and not all(device_is_disk(d) for d in device_get_slaves(info))))))
- 
- 
- def device_is_partition(info):
-@@ -453,18 +453,18 @@ def device_get_devname(info):
-     return info.get('DEVNAME')
- 
- 
--def device_get_parents(info):
--    """ Return a list of udev device objects representing this device's parents. """
--    parents_dir = device_get_sysfs_path(info) + "/slaves/"
-+def device_get_slaves(info):
-+    """ Return a list of udev device objects representing this device's slaves. """
-+    slaves_dir = device_get_sysfs_path(info) + "/slaves/"
-     names = list()
--    if os.path.isdir(parents_dir):
--        names = os.listdir(parents_dir)
-+    if os.path.isdir(slaves_dir):
-+        names = os.listdir(slaves_dir)
- 
--    parents = list()
-+    slaves = list()
-     for name in names:
--        parents.append(get_device(device_node="/dev/" + name))
-+        slaves.append(get_device(device_node="/dev/" + name))
- 
--    return parents
-+    return slaves
- 
- 
- def device_get_holders(info):
-@@ -736,7 +736,7 @@ def device_get_partition_disk(info):
-     disk = None
-     majorminor = info.get("ID_PART_ENTRY_DISK")
-     sysfs_path = device_get_sysfs_path(info)
--    parents_dir = "%s/slaves" % sysfs_path
-+    slaves_dir = "%s/slaves" % sysfs_path
-     if majorminor:
-         major, minor = majorminor.split(":")
-         for device in get_devices():
-@@ -744,8 +744,8 @@ def device_get_partition_disk(info):
-                 disk = device_get_name(device)
-                 break
-     elif device_is_dm_partition(info):
--        if os.path.isdir(parents_dir):
--            parents = os.listdir(parents_dir)
-+        if os.path.isdir(slaves_dir):
-+            parents = os.listdir(slaves_dir)
-             if len(parents) == 1:
-                 disk = resolve_devspec(parents[0].replace('!', '/'))
-     else:
-diff --git a/tests/devicefactory_test.py b/tests/devicefactory_test.py
-index dc0d6408..dfd78a7a 100644
---- a/tests/devicefactory_test.py
-+++ b/tests/devicefactory_test.py
-@@ -112,9 +112,9 @@ class DeviceFactoryTestCase(unittest.TestCase):
-                          kwargs.get("encrypted", False) or
-                          kwargs.get("container_encrypted", False))
-         if kwargs.get("encrypted", False):
--            self.assertEqual(device.parents[0].format.luks_version,
-+            self.assertEqual(device.slave.format.luks_version,
-                              kwargs.get("luks_version", crypto.DEFAULT_LUKS_VERSION))
--            self.assertEqual(device.raw_device.format.luks_sector_size,
-+            self.assertEqual(device.slave.format.luks_sector_size,
-                              kwargs.get("luks_sector_size", 0))
- 
-         self.assertTrue(set(device.disks).issubset(kwargs["disks"]))
-@@ -354,7 +354,7 @@ class LVMFactoryTestCase(DeviceFactoryTestCase):
-         device = args[0]
- 
-         if kwargs.get("encrypted"):
--            container = device.parents[0].container
-+            container = device.slave.container
-         else:
-             container = device.container
- 
-@@ -373,7 +373,7 @@ class LVMFactoryTestCase(DeviceFactoryTestCase):
-             self.assertIsInstance(pv, member_class)
- 
-             if pv.encrypted:
--                self.assertEqual(pv.parents[0].format.luks_version,
-+                self.assertEqual(pv.slave.format.luks_version,
-                                  kwargs.get("luks_version", crypto.DEFAULT_LUKS_VERSION))
- 
-     @patch("blivet.formats.lvmpv.LVMPhysicalVolume.formattable", return_value=True)
-@@ -589,7 +589,7 @@ class LVMThinPFactoryTestCase(LVMFactoryTestCase):
-         device = args[0]
- 
-         if kwargs.get("encrypted", False):
--            thinlv = device.parents[0]
-+            thinlv = device.slave
-         else:
-             thinlv = device
- 
-diff --git a/tests/devices_test/size_test.py b/tests/devices_test/size_test.py
-index d0c0a3f4..a1efa86d 100644
---- a/tests/devices_test/size_test.py
-+++ b/tests/devices_test/size_test.py
-@@ -107,8 +107,8 @@ class LUKSDeviceSizeTest(StorageDeviceSizeTest):
- 
-     def _get_device(self, *args, **kwargs):
-         exists = kwargs.get("exists", False)
--        parent = StorageDevice(*args, size=kwargs["size"] + crypto.LUKS_METADATA_SIZE, exists=exists)
--        return LUKSDevice(*args, **kwargs, parents=[parent])
-+        slave = StorageDevice(*args, size=kwargs["size"] + crypto.LUKS_METADATA_SIZE, exists=exists)
-+        return LUKSDevice(*args, **kwargs, parents=[slave])
- 
-     def test_size_getter(self):
-         initial_size = Size("10 GiB")
-@@ -116,4 +116,4 @@ class LUKSDeviceSizeTest(StorageDeviceSizeTest):
- 
-         # for LUKS size depends on the backing device size
-         self.assertEqual(dev.size, initial_size)
--        self.assertEqual(dev.raw_device.size, initial_size + crypto.LUKS_METADATA_SIZE)
-+        self.assertEqual(dev.slave.size, initial_size + crypto.LUKS_METADATA_SIZE)
-diff --git a/tests/populator_test.py b/tests/populator_test.py
-index a7748a9d..531ec74b 100644
---- a/tests/populator_test.py
-+++ b/tests/populator_test.py
-@@ -81,7 +81,7 @@ class DMDevicePopulatorTestCase(PopulatorHelperTestCase):
-     @patch.object(DeviceTree, "get_device_by_name")
-     @patch.object(DMDevice, "status", return_value=True)
-     @patch.object(DMDevice, "update_sysfs_path")
--    @patch.object(DeviceTree, "_add_parent_devices")
-+    @patch.object(DeviceTree, "_add_slave_devices")
-     @patch("blivet.udev.device_get_name")
-     @patch("blivet.udev.device_get_sysfs_path", return_value=sentinel.sysfs_path)
-     def test_run(self, *args):
-@@ -90,7 +90,7 @@ class DMDevicePopulatorTestCase(PopulatorHelperTestCase):
- 
-         devicetree = DeviceTree()
- 
--        # The general case for dm devices is that adding the parent devices
-+        # The general case for dm devices is that adding the slave/parent devices
-         # will result in the dm device itself being in the tree.
-         device = Mock()
-         devicetree.get_device_by_name.return_value = device
-@@ -99,7 +99,7 @@ class DMDevicePopulatorTestCase(PopulatorHelperTestCase):
- 
-         parent = Mock()
-         parent.parents = []
--        devicetree._add_parent_devices.return_value = [parent]
-+        devicetree._add_slave_devices.return_value = [parent]
-         devicetree._add_device(parent)
-         devicetree.get_device_by_name.return_value = None
-         device_name = "dmdevice"
-@@ -228,7 +228,7 @@ class LVMDevicePopulatorTestCase(PopulatorHelperTestCase):
-         # could be the first helper class checked.
- 
-     @patch.object(DeviceTree, "get_device_by_name")
--    @patch.object(DeviceTree, "_add_parent_devices")
-+    @patch.object(DeviceTree, "_add_slave_devices")
-     @patch("blivet.udev.device_get_name")
-     @patch("blivet.udev.device_get_lv_vg_name")
-     def test_run(self, *args):
-@@ -240,7 +240,7 @@ class LVMDevicePopulatorTestCase(PopulatorHelperTestCase):
-         devicetree = DeviceTree()
-         data = Mock()
- 
--        # Add parent devices and then look up the device.
-+        # Add slave/parent devices and then look up the device.
-         device_get_name.return_value = sentinel.lv_name
-         devicetree.get_device_by_name.return_value = None
- 
-@@ -260,7 +260,7 @@ class LVMDevicePopulatorTestCase(PopulatorHelperTestCase):
-              call(sentinel.vg_name),
-              call(sentinel.lv_name)])
- 
--        # Add parent devices, but the device is still not in the tree
-+        # Add slave/parent devices, but the device is still not in the tree
-         get_device_by_name.side_effect = None
-         get_device_by_name.return_value = None
-         self.assertEqual(helper.run(), None)
-@@ -625,7 +625,7 @@ class MDDevicePopulatorTestCase(PopulatorHelperTestCase):
-         # could be the first helper class checked.
- 
-     @patch.object(DeviceTree, "get_device_by_name")
--    @patch.object(DeviceTree, "_add_parent_devices")
-+    @patch.object(DeviceTree, "_add_slave_devices")
-     @patch("blivet.udev.device_get_name")
-     @patch("blivet.udev.device_get_md_uuid")
-     @patch("blivet.udev.device_get_md_name")
-@@ -636,7 +636,7 @@ class MDDevicePopulatorTestCase(PopulatorHelperTestCase):
- 
-         devicetree = DeviceTree()
- 
--        # base case: _add_parent_devices gets the array into the tree
-+        # base case: _add_slave_devices gets the array into the tree
-         data = Mock()
-         device = Mock()
-         device.parents = []
-@@ -699,12 +699,12 @@ class MultipathDevicePopulatorTestCase(PopulatorHelperTestCase):
-         # could be the first helper class checked.
- 
-     @patch("blivet.udev.device_get_sysfs_path")
--    @patch.object(DeviceTree, "_add_parent_devices")
-+    @patch.object(DeviceTree, "_add_slave_devices")
-     @patch("blivet.udev.device_get_name")
-     def test_run(self, *args):
-         """Test multipath device populator."""
-         device_get_name = args[0]
--        add_parent_devices = args[1]
-+        add_slave_devices = args[1]
- 
-         devicetree = DeviceTree()
-         # set up some fake udev data to verify handling of specific entries
-@@ -719,13 +719,13 @@ class MultipathDevicePopulatorTestCase(PopulatorHelperTestCase):
- 
-         device_name = "mpathtest"
-         device_get_name.return_value = device_name
--        parent_1 = Mock(tags=set(), wwn=wwn[2:])
--        parent_1.parents = []
--        parent_2 = Mock(tags=set(), wwn=wwn[2:])
--        parent_2.parents = []
--        devicetree._add_device(parent_1)
--        devicetree._add_device(parent_2)
--        add_parent_devices.return_value = [parent_1, parent_2]
-+        slave_1 = Mock(tags=set(), wwn=wwn[2:])
-+        slave_1.parents = []
-+        slave_2 = Mock(tags=set(), wwn=wwn[2:])
-+        slave_2.parents = []
-+        devicetree._add_device(slave_1)
-+        devicetree._add_device(slave_2)
-+        add_slave_devices.return_value = [slave_1, slave_2]
- 
-         helper = self.helper_class(devicetree, data)
- 
-diff --git a/tests/udev_test.py b/tests/udev_test.py
-index f9b10620..d30a647b 100644
---- a/tests/udev_test.py
-+++ b/tests/udev_test.py
-@@ -45,11 +45,11 @@ class UdevTest(unittest.TestCase):
-     @mock.patch('blivet.udev.device_is_dm_crypt', return_value=False)
-     @mock.patch('blivet.udev.device_is_md')
-     @mock.patch('blivet.udev.device_get_md_container')
--    @mock.patch('blivet.udev.device_get_parents')
-+    @mock.patch('blivet.udev.device_get_slaves')
-     def test_udev_device_is_disk_md(self, *args):
-         import blivet.udev
-         info = dict(DEVTYPE='disk', SYS_PATH=mock.sentinel.md_path)
--        (device_get_parents, device_get_md_container, device_is_md) = args[:3]  # pylint: disable=unbalanced-tuple-unpacking
-+        (device_get_slaves, device_get_md_container, device_is_md) = args[:3]  # pylint: disable=unbalanced-tuple-unpacking
- 
-         disk_parents = [dict(DEVTYPE="disk", SYS_PATH='/fake/path/2'),
-                         dict(DEVTYPE="disk", SYS_PATH='/fake/path/3')]
-@@ -64,20 +64,20 @@ class UdevTest(unittest.TestCase):
-         # Intel FW RAID (MD RAID w/ container layer)
-         # device_get_container will return some mock value which will evaluate to True
-         device_get_md_container.return_value = mock.sentinel.md_container
--        device_get_parents.side_effect = lambda info: list()
-+        device_get_slaves.side_effect = lambda info: list()
-         self.assertTrue(blivet.udev.device_is_disk(info))
- 
-         # Normal MD RAID
--        device_get_parents.side_effect = lambda info: partition_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-+        device_get_slaves.side_effect = lambda info: partition_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-         device_get_md_container.return_value = None
-         self.assertFalse(blivet.udev.device_is_disk(info))
- 
-         # Dell FW RAID (MD RAID whose members are all whole disks)
--        device_get_parents.side_effect = lambda info: disk_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-+        device_get_slaves.side_effect = lambda info: disk_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-         self.assertTrue(blivet.udev.device_is_disk(info))
- 
-         # Normal MD RAID (w/ at least one non-disk member)
--        device_get_parents.side_effect = lambda info: mixed_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-+        device_get_slaves.side_effect = lambda info: mixed_parents if info['SYS_PATH'] == mock.sentinel.md_path else list()
-         self.assertFalse(blivet.udev.device_is_disk(info))
- 
- 
-diff --git a/tests/vmtests/vmbackedtestcase.py b/tests/vmtests/vmbackedtestcase.py
-index 797bac85..6255104f 100644
---- a/tests/vmtests/vmbackedtestcase.py
-+++ b/tests/vmtests/vmbackedtestcase.py
-@@ -50,7 +50,7 @@ class VMBackedTestCase(unittest.TestCase):
-             defined in set_up_disks.
-         """
- 
--        udev.ignored_device_names = [r'^zram']
-+        udev.device_name_blacklist = [r'^zram']
- 
-         #
-         # create disk images
--- 
-2.31.1
-
diff --git a/0010-Fix-running-tests-in-gating.patch b/0010-Fix-running-tests-in-gating.patch
new file mode 100644
index 0000000..70bd5f8
--- /dev/null
+++ b/0010-Fix-running-tests-in-gating.patch
@@ -0,0 +1,231 @@
+From 8dbb92d692db9cbfbca0c82a1ed10a0492208534 Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Wed, 4 Aug 2021 13:00:53 +0200
+Subject: [PATCH 1/3] edd_test: Locate the edd_data based on the test file
+ location
+
+We can't use the blivet.edd module location when running tests
+against installed version of blivet.
+---
+ tests/devicelibs_test/edd_test.py | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/tests/devicelibs_test/edd_test.py b/tests/devicelibs_test/edd_test.py
+index 21bbcffc4..0d0824e6b 100644
+--- a/tests/devicelibs_test/edd_test.py
++++ b/tests/devicelibs_test/edd_test.py
+@@ -5,7 +5,6 @@
+ 
+ import unittest
+ import os
+-import inspect
+ import logging
+ import copy
+ 
+@@ -114,9 +113,9 @@ def root(self, name):
+                 name = name[:-1]
+             if name.startswith("/"):
+                 name = name[1:]
+-            dirname = os.path.dirname(inspect.getfile(edd))
++            dirname = os.path.abspath(os.path.dirname(__file__))
+             return os.path.join(dirname,
+-                                "../../tests/devicelibs_test/edd_data/",
++                                "edd_data/",
+                                 name)
+ 
+     def edd_debug(self, *args):
+
+From 924bc805f692b0f050a8a8b8187769f36aea059f Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Wed, 4 Aug 2021 13:02:08 +0200
+Subject: [PATCH 2/3] tests: Allow running tests without the tests directory in
+ PYTHONPATH
+
+When running the tests against installed version of blivet, the
+"tests" directory is not in PYTHONPATH so we need to import all
+helper modules using relative path.
+---
+ tests/action_test.py                           | 2 +-
+ tests/devicelibs_test/edd_test.py              | 2 +-
+ tests/{ => devicelibs_test}/lib.py             | 0
+ tests/formats_test/fs_test.py                  | 2 +-
+ tests/formats_test/fslabeling.py               | 2 +-
+ tests/formats_test/fstesting.py                | 2 +-
+ tests/formats_test/fsuuid.py                   | 2 +-
+ tests/formats_test/labeling_test.py            | 2 +-
+ tests/{ => formats_test}/loopbackedtestcase.py | 0
+ tests/formats_test/luks_test.py                | 2 +-
+ tests/formats_test/lvmpv_test.py               | 2 +-
+ tests/partitioning_test.py                     | 2 +-
+ 12 files changed, 10 insertions(+), 10 deletions(-)
+ rename tests/{ => devicelibs_test}/lib.py (100%)
+ rename tests/{ => formats_test}/loopbackedtestcase.py (100%)
+
+diff --git a/tests/action_test.py b/tests/action_test.py
+index f60cf5d7e..8509ce35a 100644
+--- a/tests/action_test.py
++++ b/tests/action_test.py
+@@ -5,7 +5,7 @@
+ except ImportError:
+     from mock import Mock
+ 
+-from tests.storagetestcase import StorageTestCase
++from storagetestcase import StorageTestCase
+ import blivet
+ from blivet.formats import get_format
+ from blivet.size import Size
+diff --git a/tests/devicelibs_test/edd_test.py b/tests/devicelibs_test/edd_test.py
+index 0d0824e6b..0db1fd16e 100644
+--- a/tests/devicelibs_test/edd_test.py
++++ b/tests/devicelibs_test/edd_test.py
+@@ -10,7 +10,7 @@
+ 
+ from blivet import arch
+ from blivet.devicelibs import edd
+-from tests import lib
++from . import lib
+ 
+ 
+ class FakeDevice(object):
+diff --git a/tests/lib.py b/tests/devicelibs_test/lib.py
+similarity index 100%
+rename from tests/lib.py
+rename to tests/devicelibs_test/lib.py
+diff --git a/tests/formats_test/fs_test.py b/tests/formats_test/fs_test.py
+index ab3499a76..bd6433707 100644
+--- a/tests/formats_test/fs_test.py
++++ b/tests/formats_test/fs_test.py
+@@ -10,7 +10,7 @@
+ from blivet.formats import get_format
+ from blivet.devices import PartitionDevice, DiskDevice
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ 
+ from . import fstesting
+ 
+diff --git a/tests/formats_test/fslabeling.py b/tests/formats_test/fslabeling.py
+index fbb28eee7..0e0dc2612 100644
+--- a/tests/formats_test/fslabeling.py
++++ b/tests/formats_test/fslabeling.py
+@@ -2,7 +2,7 @@
+ import abc
+ import six
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ from blivet.errors import FSError, FSReadLabelError
+ from blivet.size import Size
+ 
+diff --git a/tests/formats_test/fstesting.py b/tests/formats_test/fstesting.py
+index 86b2a1168..e34584d88 100644
+--- a/tests/formats_test/fstesting.py
++++ b/tests/formats_test/fstesting.py
+@@ -5,7 +5,7 @@
+ import os
+ import tempfile
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ from blivet.errors import FSError, FSResizeError, DeviceFormatError
+ from blivet.size import Size, ROUND_DOWN
+ from blivet.formats import fs
+diff --git a/tests/formats_test/fsuuid.py b/tests/formats_test/fsuuid.py
+index c80039457..16aa19a66 100644
+--- a/tests/formats_test/fsuuid.py
++++ b/tests/formats_test/fsuuid.py
+@@ -3,7 +3,7 @@
+ import six
+ from unittest import skipIf
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ from blivet.errors import FSError, FSWriteUUIDError
+ from blivet.size import Size
+ from blivet.util import capture_output
+diff --git a/tests/formats_test/labeling_test.py b/tests/formats_test/labeling_test.py
+index e26cb7df1..d24e66191 100644
+--- a/tests/formats_test/labeling_test.py
++++ b/tests/formats_test/labeling_test.py
+@@ -1,10 +1,10 @@
+ import unittest
+ 
+-from tests import loopbackedtestcase
+ from blivet.formats import device_formats
+ import blivet.formats.fs as fs
+ import blivet.formats.swap as swap
+ 
++from . import loopbackedtestcase
+ from . import fslabeling
+ 
+ 
+diff --git a/tests/loopbackedtestcase.py b/tests/formats_test/loopbackedtestcase.py
+similarity index 100%
+rename from tests/loopbackedtestcase.py
+rename to tests/formats_test/loopbackedtestcase.py
+diff --git a/tests/formats_test/luks_test.py b/tests/formats_test/luks_test.py
+index 1edbdcb28..5f25f0988 100644
+--- a/tests/formats_test/luks_test.py
++++ b/tests/formats_test/luks_test.py
+@@ -9,7 +9,7 @@
+ 
+ from blivet.size import Size
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ 
+ 
+ class LUKSTestCase(loopbackedtestcase.LoopBackedTestCase):
+diff --git a/tests/formats_test/lvmpv_test.py b/tests/formats_test/lvmpv_test.py
+index cbd2c4195..cdc33ec4d 100644
+--- a/tests/formats_test/lvmpv_test.py
++++ b/tests/formats_test/lvmpv_test.py
+@@ -2,7 +2,7 @@
+ 
+ from blivet.size import Size
+ 
+-from tests import loopbackedtestcase
++from . import loopbackedtestcase
+ 
+ 
+ class LVMPVTestCase(loopbackedtestcase.LoopBackedTestCase):
+diff --git a/tests/partitioning_test.py b/tests/partitioning_test.py
+index 9b27f0c0d..e7b7aa375 100644
+--- a/tests/partitioning_test.py
++++ b/tests/partitioning_test.py
+@@ -31,7 +31,7 @@
+ 
+ from blivet.errors import PartitioningError
+ 
+-from tests.imagebackedtestcase import ImageBackedTestCase
++from imagebackedtestcase import ImageBackedTestCase
+ from blivet.blivet import Blivet
+ from blivet.util import sparsetmpfile
+ from blivet.formats import get_format
+
+From 99385bd67ac944c43bc77f4b5465c672203e2679 Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Fri, 6 Aug 2021 14:51:01 +0200
+Subject: [PATCH 3/3] tests: Print version and blivet location when running
+ tests
+
+---
+ tests/run_tests.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/tests/run_tests.py b/tests/run_tests.py
+index 32e3f2d3a..8ad8b61ad 100644
+--- a/tests/run_tests.py
++++ b/tests/run_tests.py
+@@ -32,6 +32,11 @@
+ 
+     testdir = os.path.abspath(os.path.dirname(__file__))
+ 
++    import blivet
++    print("Running tests with Blivet %s from %s" % (blivet.__version__,
++                                                    os.path.abspath(os.path.dirname(blivet.__file__))),
++          file=sys.stderr)
++
+     if args.testname:
+         for n in args.testname:
+             suite.addTests(unittest.TestLoader().loadTestsFromName(n))
diff --git a/0011-Tell-LVM-to-ignore-the-new-devices-file-for-now.patch b/0011-Tell-LVM-to-ignore-the-new-devices-file-for-now.patch
new file mode 100644
index 0000000..89010bd
--- /dev/null
+++ b/0011-Tell-LVM-to-ignore-the-new-devices-file-for-now.patch
@@ -0,0 +1,68 @@
+From a977e8389a09615615dc76dee8aaaea1cc0ac54b Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Thu, 22 Jul 2021 09:26:54 +0200
+Subject: [PATCH 1/2] Tell LVM to ignore the new devices file for now
+
+We currently don't support working with the devices file and it's
+not possible to use lvm.conf filters together with the devices
+file so we need to tell LVM to ignore it until we can support it.
+---
+ blivet/devicelibs/lvm.py     | 4 ++++
+ blivet/tasks/availability.py | 1 +
+ 2 files changed, 5 insertions(+)
+
+diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py
+index d56a76edc..989ecccaf 100644
+--- a/blivet/devicelibs/lvm.py
++++ b/blivet/devicelibs/lvm.py
+@@ -91,6 +91,10 @@ def _set_global_config():
+     if filter_string:
+         devices_string += " %s" % filter_string
+ 
++    # for now ignore the LVM devices file and rely on our filters
++    if availability.LVMDEVICES.available:
++        devices_string += " use_devicesfile=0"
++
+     # devices_string can have (inside the brackets) "dir", "scan",
+     # "preferred_names", "filter", "cache_dir", "write_cache_state",
+     # "types", "sysfs_scan", "md_component_detection".  see man lvm.conf.
+diff --git a/blivet/tasks/availability.py b/blivet/tasks/availability.py
+index 1fd805901..5d3e295da 100644
+--- a/blivet/tasks/availability.py
++++ b/blivet/tasks/availability.py
+@@ -451,6 +451,7 @@ def available_resource(name):
+ HFORMAT_APP = application("hformat")
+ JFSTUNE_APP = application("jfs_tune")
+ KPARTX_APP = application("kpartx")
++LVMDEVICES = application("lvmdevices")
+ MKDOSFS_APP = application("mkdosfs")
+ MKDOSFS_NEW_APP = application_by_version("mkdosfs", DOSFSTOOLS_VERSION)
+ MKE2FS_APP = application_by_version("mke2fs", E2FSPROGS_VERSION)
+
+From 08c137b5c98b24a9ba3df21f04cd20120c61198c Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Thu, 22 Jul 2021 11:33:46 +0200
+Subject: [PATCH 2/2] Make sure LVM config is updated before running pvcreate
+
+Our internal "global" LVM config is set during reset() but we have
+test cases that run pvcreate without running reset() first so we
+need to make sure to update the global config before running it
+because the config string now also controls whether the new LVM
+devices file will be used or not.
+---
+ blivet/formats/lvmpv.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/blivet/formats/lvmpv.py b/blivet/formats/lvmpv.py
+index e4182adb2..ea84e9e4b 100644
+--- a/blivet/formats/lvmpv.py
++++ b/blivet/formats/lvmpv.py
+@@ -125,6 +125,8 @@ def _create(self, **kwargs):
+         log_method_call(self, device=self.device,
+                         type=self.type, status=self.status)
+ 
++        lvm._set_global_config()
++
+         ea_yes = blockdev.ExtraArg.new("-y", "")
+         blockdev.lvm.pvcreate(self.device, data_alignment=self.data_alignment, extra=[ea_yes])
+ 
diff --git a/python-blivet.spec b/python-blivet.spec
index 2300dc0..8f044d8 100644
--- a/python-blivet.spec
+++ b/python-blivet.spec
@@ -23,7 +23,7 @@ Version: 3.4.0
 
 #%%global prerelease .b2
 # prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2
-Release: 5%{?prerelease}%{?dist}
+Release: 6%{?prerelease}%{?dist}
 Epoch: 1
 License: LGPLv2+
 %global realname blivet
@@ -33,12 +33,13 @@ Source1: http://github.com/storaged-project/blivet/archive/%{realname}-%{realver
 Patch0: 0001-force-lvm-cli-plugin.patch
 Patch1: 0002-remove-btrfs-plugin.patch
 Patch2: 0003-Revert-More-consistent-lvm-errors.patch
-Patch3: 0004-Revert-Terminology-cleanups.patch
-Patch4: 0005-Fix-unify-importing-mock-module-in-tests.patch
-Patch5: 0006-Fix-util.virt_detect-on-Xen.patch
-Patch6: 0007-Fix-activating-old-style-LVM-snapshots.patch
-Patch7: 0008-Fix-resolving-devices-with-names-that-look-like-BIOS.patch
-Patch8: 0009-Do-not-set-chunk-size-for-RAID1.patch
+Patch3: 0005-Fix-unify-importing-mock-module-in-tests.patch
+Patch4: 0006-Fix-util.virt_detect-on-Xen.patch
+Patch5: 0007-Fix-activating-old-style-LVM-snapshots.patch
+Patch6: 0008-Fix-resolving-devices-with-names-that-look-like-BIOS.patch
+Patch7: 0009-Do-not-set-chunk-size-for-RAID1.patch
+Patch8: 0010-Fix-running-tests-in-gating.patch
+Patch9: 0011-Tell-LVM-to-ignore-the-new-devices-file-for-now.patch
 
 # Versions of required components (done so we make sure the buildrequires
 # match the requires versions of things).
@@ -201,6 +202,14 @@ configuration.
 %endif
 
 %changelog
+* Wed Aug 11 2021 Vojtech Trefny <vtrefny@redhat.com> - 3.4.0-6
+- Remove "Revert Terminology cleanups" patch
+  Resolves: rhbz#1990982
+- Fix running tests in gating
+  Resolves: rhbz#1990237
+- Opt out from using LVM devices file in 9 Beta
+  Resolves: rhbz#1984851
+
 * Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 1:3.4.0-5
 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
   Related: rhbz#1991688