[rhel6-branch 1/5] Use dm subsystem functions to identify dmraid, mpath partitions.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux