---
blivet/devicefactory.py | 7 ++++---
blivet/devicelibs/raid.py | 15 ++++++++++-----
blivet/devices.py | 4 ++--
3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
index bd98d72..dbeb975 100644
--- a/blivet/devicefactory.py
+++ b/blivet/devicefactory.py
@@ -1510,18 +1510,19 @@ class MDFactory(DeviceFactory):
size_set_class = SameSizeSet
def _get_device_space(self):
+ member_count = len(self._get_member_devices())
size_per_member = mdraid.getRaidLevel(self.raid_level).get_base_member_size(
self.size,
- len(self._get_member_devices()))
+ member_count)
size_per_member += mdraid.get_raid_superblock_size(self.size)
- return size_per_member * self._get_member_devices()
+ return size_per_member * member_count
def _get_total_space(self):
return self._get_device_space()
def _set_raid_level(self):
# set the new level
- self.device.level = mdraid.getRaidLevel(self.raid_level)
+ self.device.level = self.raid_level
# adjust the bitmap setting
diff --git a/blivet/devicelibs/raid.py b/blivet/devicelibs/raid.py
index b55804c..d6b4959 100644
--- a/blivet/devicelibs/raid.py
+++ b/blivet/devicelibs/raid.py
@@ -266,7 +266,8 @@ class RAID0(RAIDLevel):
return div_up(size, member_count)
def _get_raw_array_size(self, member_count, smallest_member_size):
- return member_count * smallest_member_size
+ # smallest_member_size dictates the return type
+ return smallest_member_size * member_count
def _get_size(self, size, chunk_size):
return size - size % chunk_size
@@ -312,7 +313,8 @@ class RAID4(RAIDLevel):
return div_up(size, member_count - 1)
def _get_raw_array_size(self, member_count, smallest_member_size):
- return (member_count - 1) * smallest_member_size
+ # smallest_member_size dictates the return type
+ return smaller_member_size * (member_count - 1)
def _get_size(self, size, chunk_size):
return size - size % chunk_size
@@ -335,7 +337,8 @@ class RAID5(RAIDLevel):
return div_up(size, (member_count - 1))
def _get_raw_array_size(self, member_count, smallest_member_size):
- return (member_count - 1) * smallest_member_size
+ # smallest_member_size dictates the return type
+ return smallest_member_size * (member_count - 1)
def _get_size(self, size, chunk_size):
return size - size % chunk_size
@@ -358,7 +361,8 @@ class RAID6(RAIDLevel):
return div_up(size, member_count - 2)
def _get_raw_array_size(self, member_count, smallest_member_size):
- return (member_count - 2) * smallest_member_size
+ # smallest_member_size dictates the return type
+ return smallest_member_size * (member_count - 2)
def _get_size(self, size, chunk_size):
return size - size % chunk_size
@@ -381,7 +385,8 @@ class RAID10(RAIDLevel):
return div_up(size, (member_count // 2))
def _get_raw_array_size(self, member_count, smallest_member_size):
- return (member_count // 2) * smallest_member_size
+ # smallest_member_size dictates the return type
+ return smallest_member_size * (member_count // 2)
def _get_size(self, size, chunk_size):
return size
diff --git a/blivet/devices.py b/blivet/devices.py
index d4e5d5b..24f3423 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -3140,7 +3140,7 @@ class MDRaidArrayDevice(StorageDevice):
@property
def dict(self):
d = super(MDRaidArrayDevice, self).dict
- d.update({"level": self.level,
+ d.update({"level": str(self.level),
"spares": self.spares, "memberDevices":
self.memberDevices,
"totalDevices": self.totalDevices,
"metadataVersion": self.metadataVersion})
@@ -3175,7 +3175,7 @@ class MDRaidArrayDevice(StorageDevice):
if not isinstance(number, int):
raise ValueError("memberDevices is an integer")
- if number > self.totalDevices:
+ if not self.exists and number > self.totalDevices:
raise ValueError("memberDevices cannot be greater than
totalDevices")
self._memberDevices = number
--
1.8.1.4