--- 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: