From: David Lehman <dlehman@xxxxxxxxxx> Reimplements udev_device_is_dmraid_partition and udev_device_is_multipath_partition so they no longer require a DeviceTree instance. Related: rhbz#709653 --- storage/devicetree.py | 8 ++++---- storage/udev.py | 43 ++++++++++--------------------------------- 2 files changed, 14 insertions(+), 37 deletions(-) diff --git a/storage/devicetree.py b/storage/devicetree.py index 3cfab88..773667b 100644 --- a/storage/devicetree.py +++ b/storage/devicetree.py @@ -1027,12 +1027,12 @@ class DeviceTree(object): device = self.getDeviceByName(name) if device is None: - if udev_device_is_multipath_partition(info, self): - diskname = udev_device_get_multipath_partition_disk(info) + if udev_device_is_multipath_partition(info): + diskname = udev_device_get_dm_partition_disk(info) disk = self.getDeviceByName(diskname) return self.addUdevPartitionDevice(info, disk=disk) - elif udev_device_is_dmraid_partition(info, self): - diskname = udev_device_get_dmraid_partition_disk(info) + elif udev_device_is_dmraid_partition(info): + diskname = udev_device_get_dm_partition_disk(info) disk = self.getDeviceByName(diskname) return self.addUdevPartitionDevice(info, disk=disk) diff --git a/storage/udev.py b/storage/udev.py index b1383b5..de91c6d 100644 --- a/storage/udev.py +++ b/storage/udev.py @@ -457,7 +457,7 @@ def udev_device_is_biosraid(info): return False -def udev_device_get_dmraid_partition_disk(info): +def udev_device_get_dm_partition_disk(info): try: p_index = info["DM_NAME"].rindex("p") except (KeyError, AttributeError, ValueError): @@ -468,43 +468,20 @@ def udev_device_get_dmraid_partition_disk(info): return info["DM_NAME"][:p_index] -def udev_device_is_dmraid_partition(info, devicetree): - diskname = udev_device_get_dmraid_partition_disk(info) - dmraid_devices = devicetree.getDevicesByType("dm-raid array") - - for device in dmraid_devices: - if diskname == device.name: - return True - - return False - -def udev_device_is_multipath_partition(info, devicetree): - """ Return True if the device is a partition of a multipath device. """ - if not udev_device_is_dm(info): - return False - if not info["DM_NAME"].startswith("mpath"): +def udev_device_is_dmraid_partition(info): + if not udev_device_is_dm_raid(info): return False - diskname = udev_device_get_dmraid_partition_disk(info) - if diskname is None: - return False - - # this is sort of a lame check, but basically, if diskname gave us "mpath0" - # and we start with "mpath" but we're not "mpath0", then we must be - # "mpath0" plus some non-numeric crap. - if diskname != info["DM_NAME"]: - return True - return False + diskname = udev_device_get_dm_partition_disk(info) + return diskname not in ("", None) -def udev_device_get_multipath_partition_disk(info): +def udev_device_is_multipath_partition(info): """ Return True if the device is a partition of a multipath device. """ - # XXX PJFIX This whole function is crap. - if not udev_device_is_dm(info): - return False - if not info["DM_NAME"].startswith("mpath"): + if not udev_device_is_dm_mpath(info): return False - diskname = udev_device_get_dmraid_partition_disk(info) - return diskname + + diskname = udev_device_get_dm_partition_disk(info) + return diskname not in ("", None) def udev_device_is_multipath_member(info): """ Return True if the device is part of a multipath. """ -- 1.7.5.2 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list