From 4bf7ef1f6b63d025dd047fe5f1c6dea4ef6c3b40 Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Wed, 12 Aug 2020 10:57:19 +0200 Subject: [PATCH] Fix name resolution for MD devices and partitions on them UDev data for both member disks/partitions and partitions on arrays contain the MD_* properties we must be extra careful when deciding what name we'll use for the device. Resolves: rhbz#1862904 --- blivet/udev.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/blivet/udev.py b/blivet/udev.py index 66af9a98..32d6369a 100644 --- a/blivet/udev.py +++ b/blivet/udev.py @@ -203,9 +203,16 @@ def device_get_name(udev_info): """ Return the best name for a device based on the udev db data. """ if "DM_NAME" in udev_info: name = udev_info["DM_NAME"] - elif "MD_DEVNAME" in udev_info and os.path.exists(device_get_sysfs_path(udev_info) + "/md"): + elif "MD_DEVNAME" in udev_info: mdname = udev_info["MD_DEVNAME"] - if device_is_partition(udev_info): + if device_is_md(udev_info): + # MD RAID array -> use MD_DEVNAME + name = mdname + elif device_get_format(udev_info) == "linux_raid_member": + # MD RAID member -> use SYS_NAME + name = udev_info["SYS_NAME"] + elif device_is_partition(udev_info): + # partition on RAID -> construct name from MD_DEVNAME + partition number # for partitions on named RAID we want to use the raid name, not # the node, e.g. "raid1" instead of "md127p1" partnum = udev_info["ID_PART_ENTRY_NUMBER"] @@ -214,6 +221,7 @@ def device_get_name(udev_info): else: name = mdname + partnum else: + # something else -> default to MD_DEVNAME name = mdname else: name = udev_info["SYS_NAME"] -- 2.20.1.windows.1