[PATCH 1/5] Fix detection of multipath. (#955664)

David Lehman dlehman at redhat.com
Thu May 2 17:58:00 UTC 2013


- Get wwid from a valid source
- Use addUdevDMDevice for multipath partitions
- Trim 'p' delimiter when converting dm partition name to dm disk name
---
 blivet/devicetree.py | 10 ++++++++--
 blivet/udev.py       |  2 +-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/blivet/devicetree.py b/blivet/devicetree.py
index eaeff58..691f1b2 100644
--- a/blivet/devicetree.py
+++ b/blivet/devicetree.py
@@ -690,7 +690,12 @@ class DeviceTree(object):
             slave_devs.append(slave_dev)
 
         if slave_devs:
-            serial = info.get("ID_SERIAL_RAW", info.get("ID_SERIAL_SHORT"))
+            try:
+                serial = info["DM_UUID"].split("-", 1)[1]
+            except (IndexError, AttributeError):
+                log.error("multipath device %s has no DM_UUID" % name)
+                raise DeviceTreeError("multipath %s has no DM_UUID" % name)
+
             device = MultipathDevice(name, parents=slave_devs,
                                      serial=serial)
             self._addDevice(device)
@@ -1014,7 +1019,8 @@ class DeviceTree(object):
         elif udev_device_is_loop(info):
             log.info("%s is a loop device" % name)
             device = self.addUdevLoopDevice(info)
-        elif udev_device_is_dm_mpath(info):
+        elif udev_device_is_dm_mpath(info) and \
+             not udev_device_is_dm_partition(info):
             log.info("%s is a multipath device" % name)
             device = self.addUdevMultiPathDevice(info)
         elif udev_device_is_dm_lvm(info):
diff --git a/blivet/udev.py b/blivet/udev.py
index b944cb2..bdb7ffe 100644
--- a/blivet/udev.py
+++ b/blivet/udev.py
@@ -528,7 +528,7 @@ def udev_device_is_biosraid_member(info):
     return False
 
 def udev_device_get_dm_partition_disk(info):
-    return re.sub(r'\d*$', '', udev_device_get_name(info))
+    return re.sub(r'p?\d*$', '', udev_device_get_name(info))
 
 def udev_device_is_dm_partition(info):
     return (udev_device_is_dm(info) and
-- 
1.8.1.4



More information about the anaconda-patches mailing list