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

[PATCH 3/6] Activate md member



This patch add activation of MD container and add disk to the container.

To make this possible name of devDir was changes to /dev/md. Name of container is created as imsm[number]. Container path can be for example /dev/md/imsm0

Name of the native format array is changed from md[number] to [number] only.
Array path can be for example /dev/md/0

Function mdraid.mdadd_no_degraded is use only for adding first member to the array.
It is needed for isw format. For the next disks function md_array._addDevice is used in
other path.
commit 8a45d537a1f154522de27052a36636bb55e692b0
Author: Jacek Danecki <Jacek Danecki intel com>
Date:   Fri Apr 10 13:45:36 2009 -0400

    activate mdmember

diff --git a/storage/devices.py b/storage/devices.py
index 0d39d12..b801688 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -2031,6 +2031,7 @@ class MDRaidArrayDevice(StorageDevice):
         can be used to represent a partitionable device.
     """
     _type = "mdarray"
+    _devDir = "/dev/md"
 
     def __init__(self, name, level=None, minor=None, size=None,
                  memberDevices=None, totalDevices=None, bitmap=False,
diff --git a/storage/devicetree.py b/storage/devicetree.py
index 3f2ec18..6247042 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -945,6 +945,12 @@ class DeviceTree(object):
 
         return device
 
+    def md_is_container(self, md_level):
+            if md_level == "container":
+                return True
+            else:
+                return False       
+ 
     def addUdevMDDevice(self, info):
         name = udev_device_get_name(info)
         log_method_call(self, name=name)
@@ -1296,13 +1302,17 @@ class DeviceTree(object):
 
             # find the first unused minor
             minor = 0
+            
+            if self.md_is_container(md_level):
+                base = "imsm"
+            else:
+                base = ""
             while True:
-                if self.getDeviceByName("md%d" % minor):
-                    minor += 1
-                else:
-                    break
-
-            md_name = "md%d" % minor
+                  if self.getDeviceByName("%s%d" % (base, minor)):
+                        minor += 1
+                  else:
+                        break
+            md_name = "%s%d" % (base, minor)
             md_array = MDRaidArrayDevice(md_name,
                                          level=md_level,
                                          minor=minor,
@@ -1311,12 +1321,11 @@ class DeviceTree(object):
                                          sysfsPath=sysfs_path,
                                          exists=True,
                                          parents=[device])
-            try:
-                md_array.setup()
-            except (DeviceError, MDRaidError) as e:
-                log.info("setup of md array %s failed: %s"
-                            % (md_array.name, e))
             self._addDevice(md_array)
+            try: 
+                 mdraid.mdadd_no_degraded(device.path)
+            except MDRaidError as e:
+                  log.warning("failed to add member to md array %s" % e)
 
     def handleUdevDMRaidMemberFormat(self, info, device):
         log_method_call(self, name=device.name, type=device.format.type)

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