neil / rpms / python-blivet

Forked from rpms/python-blivet a year ago
Clone
ee28bf
From 898178047ac4bc97ddccb193cb0e11f7fdf18196 Mon Sep 17 00:00:00 2001
ee28bf
From: Vojtech Trefny <vtrefny@redhat.com>
ee28bf
Date: Wed, 17 Aug 2022 14:24:21 +0200
ee28bf
Subject: [PATCH 1/3] Use MD populator instead of DM to handle DDF RAID format
ee28bf
ee28bf
---
ee28bf
 blivet/formats/dmraid.py | 2 +-
ee28bf
 blivet/formats/mdraid.py | 2 +-
ee28bf
 2 files changed, 2 insertions(+), 2 deletions(-)
ee28bf
ee28bf
diff --git a/blivet/formats/dmraid.py b/blivet/formats/dmraid.py
ee28bf
index 2ba9dcfe5..ce15905dc 100644
ee28bf
--- a/blivet/formats/dmraid.py
ee28bf
+++ b/blivet/formats/dmraid.py
ee28bf
@@ -43,7 +43,7 @@ class DMRaidMember(DeviceFormat):
ee28bf
     #
ee28bf
     #     One problem that presents is the possibility of someone passing
ee28bf
     #     a dmraid member to the MDRaidArrayDevice constructor.
ee28bf
-    _udev_types = ["adaptec_raid_member", "ddf_raid_member",
ee28bf
+    _udev_types = ["adaptec_raid_member",
ee28bf
                    "hpt37x_raid_member", "hpt45x_raid_member",
ee28bf
                    "isw_raid_member",
ee28bf
                    "jmicron_raid_member", "lsi_mega_raid_member",
ee28bf
diff --git a/blivet/formats/mdraid.py b/blivet/formats/mdraid.py
ee28bf
index 41ddef810..4aa3f3b07 100644
ee28bf
--- a/blivet/formats/mdraid.py
ee28bf
+++ b/blivet/formats/mdraid.py
ee28bf
@@ -41,7 +41,7 @@ class MDRaidMember(DeviceFormat):
ee28bf
     """ An mdraid member disk. """
ee28bf
     _type = "mdmember"
ee28bf
     _name = N_("software RAID")
ee28bf
-    _udev_types = ["linux_raid_member"]
ee28bf
+    _udev_types = ["linux_raid_member", "ddf_raid_member"]
ee28bf
     parted_flag = PARTITION_RAID
ee28bf
     _formattable = True                 # can be formatted
ee28bf
     _supported = True                   # is supported
ee28bf
ee28bf
From c487c6178ee9859163379946c1bdc3b2df1857b1 Mon Sep 17 00:00:00 2001
ee28bf
From: Vojtech Trefny <vtrefny@redhat.com>
ee28bf
Date: Wed, 17 Aug 2022 14:24:58 +0200
ee28bf
Subject: [PATCH 2/3] Do not read DDF RAID UUID from udev
ee28bf
ee28bf
The UUID we get from udev isn't the array UUID, we need to get
ee28bf
that using libblockdev.
ee28bf
---
ee28bf
 blivet/populator/helpers/mdraid.py | 16 ++++++++++------
ee28bf
 1 file changed, 10 insertions(+), 6 deletions(-)
ee28bf
ee28bf
diff --git a/blivet/populator/helpers/mdraid.py b/blivet/populator/helpers/mdraid.py
ee28bf
index 76aebf250..9bec11efb 100644
ee28bf
--- a/blivet/populator/helpers/mdraid.py
ee28bf
+++ b/blivet/populator/helpers/mdraid.py
ee28bf
@@ -98,17 +98,21 @@ class MDFormatPopulator(FormatPopulator):
ee28bf
 
ee28bf
     def _get_kwargs(self):
ee28bf
         kwargs = super(MDFormatPopulator, self)._get_kwargs()
ee28bf
-        try:
ee28bf
-            # ID_FS_UUID contains the array UUID
ee28bf
-            kwargs["md_uuid"] = udev.device_get_uuid(self.data)
ee28bf
-        except KeyError:
ee28bf
-            log.warning("mdraid member %s has no md uuid", udev.device_get_name(self.data))
ee28bf
+        kwargs["biosraid"] = udev.device_is_biosraid_member(self.data)
ee28bf
+        if not kwargs["biosraid"]:
ee28bf
+            try:
ee28bf
+                # ID_FS_UUID contains the array UUID
ee28bf
+                kwargs["md_uuid"] = udev.device_get_uuid(self.data)
ee28bf
+            except KeyError:
ee28bf
+                log.warning("mdraid member %s has no md uuid", udev.device_get_name(self.data))
ee28bf
+        else:
ee28bf
+            # for BIOS RAIDs we can't get the UUID from udev, we'll get it from mdadm in `run` below
ee28bf
+            kwargs["md_uuid"] = None
ee28bf
 
ee28bf
         # reset the uuid to the member-specific value
ee28bf
         # this will be None for members of v0 metadata arrays
ee28bf
         kwargs["uuid"] = udev.device_get_md_device_uuid(self.data)
ee28bf
 
ee28bf
-        kwargs["biosraid"] = udev.device_is_biosraid_member(self.data)
ee28bf
         return kwargs
ee28bf
 
ee28bf
     def run(self):
ee28bf
ee28bf
From 325681bcd40fc4f0e13a4d23c889e1f7cc043cc1 Mon Sep 17 00:00:00 2001
ee28bf
From: Vojtech Trefny <vtrefny@redhat.com>
ee28bf
Date: Thu, 17 Mar 2022 15:48:25 +0100
ee28bf
Subject: [PATCH 3/3] Do not crash when a disk populator doesn't return kwargs
ee28bf
ee28bf
This happens when trying to use Blivet on a system with a BIOS
ee28bf
RAID without dmraid installed. Because we don't fully support
ee28bf
BIOS RAIDs using MD the MDBiosRaidDevicePopulator helper fails
ee28bf
to get kwargs for the BIOS RAID "disk" and populate fails.
ee28bf
---
ee28bf
 blivet/populator/helpers/disk.py | 2 ++
ee28bf
 1 file changed, 2 insertions(+)
ee28bf
ee28bf
diff --git a/blivet/populator/helpers/disk.py b/blivet/populator/helpers/disk.py
ee28bf
index 2e5026f7e..9db7b810d 100644
ee28bf
--- a/blivet/populator/helpers/disk.py
ee28bf
+++ b/blivet/populator/helpers/disk.py
ee28bf
@@ -68,6 +68,8 @@ def run(self):
ee28bf
         log_method_call(self, name=name)
ee28bf
 
ee28bf
         kwargs = self._get_kwargs()
ee28bf
+        if not kwargs:
ee28bf
+            return
ee28bf
         device = self._device_class(name, **kwargs)
ee28bf
         self._devicetree._add_device(device)
ee28bf
         return device