[PATCH 03/13] Tweak setContainerMembers to work with a defined md array.

David Lehman dlehman at redhat.com
Wed Aug 29 00:00:42 UTC 2012


---
 pyanaconda/storage/__init__.py |   38 +++++++++++++++++++++++---------------
 1 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index 5f94fea..b07bce1 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -1817,7 +1817,7 @@ class Storage(object):
 
         return fstype
 
-    def setContainerMembers(self, container, factory):
+    def setContainerMembers(self, container, factory, members=None):
         """ Set up and return the container's member partitions. """
         if factory.member_list is not None:
             # short-circuit the logic below for partitions
@@ -1829,12 +1829,21 @@ class Storage(object):
         # set up member devices
         container_size = 0
         add_disks = []
+
+        if members is None:
+            members = []
+
+        if container:
+            members = container.parents[:]
+
         if container:
             log.debug("using container %s with %d devices" % (container.name,
                                 len(self.devicetree.getChildren(container))))
             container_size = factory.container_size_func(container)
             log.debug("raw container size reported as %d" % container_size)
-            _disks = list(set([d for m in container.parents for d in m.disks]))
+
+        if members:
+            _disks = list(set([d for m in members for d in m.disks]))
 
             # see if factory.disks contains disks not already in use
             add_disks = [d for d in factory.disks if d not in _disks]
@@ -1847,20 +1856,14 @@ class Storage(object):
 
         # XXX TODO: multiple member devices per disk
 
-        # XXX Never try to reuse member devices. They can be converted by the
-        #     user into free space.
-        members = []
-
         # prepare already-defined member partitions for reallocation
-        if container:
-            members = container.parents[:]
-            for member in members[:]:
-                if isinstance(member, LUKSDevice):
-                    member = member.slave
+        for member in members[:]:
+            if isinstance(member, LUKSDevice):
+                member = member.slave
 
-                member.req_base_size = PartitionDevice.defaultSize
-                member.req_size = member.req_base_size
-                member.req_grow = True
+            member.req_base_size = PartitionDevice.defaultSize
+            member.req_size = member.req_base_size
+            member.req_grow = True
 
         # set up new members as needed to accommodate the device
         for disk in add_disks:
@@ -1991,7 +1994,12 @@ class Storage(object):
 
         # TODO: striping, mirroring, &c
         # TODO: non-partition members (pv-on-md)
-        parents = self.setContainerMembers(container, factory)
+
+        members = []
+        if device and device.type == "mdarray":
+            members = device.parents
+
+        parents = self.setContainerMembers(container, factory, members=members)
 
         # set up container
         if not container and factory.new_container_attr:
-- 
1.7.7.6



More information about the anaconda-patches mailing list