diff --git a/base/systemd/debian/patches/0015-Port-udev-old-sas-paths-creation-from-RHEL.patch b/base/systemd/debian/patches/0015-Port-udev-old-sas-paths-creation-from-RHEL.patch new file mode 100644 index 000000000..094e69f36 --- /dev/null +++ b/base/systemd/debian/patches/0015-Port-udev-old-sas-paths-creation-from-RHEL.patch @@ -0,0 +1,187 @@ +From a2403bcd26c154325871b8e99e809c47fe9f52b8 Mon Sep 17 00:00:00 2001 +From: Dan Voiculeasa +Date: Wed, 19 Oct 2022 18:41:18 +0300 +Subject: [PATCH 15/15] Port udev old sas paths creation from RHEL + +This ports the following patch file from RHEL: +0186-udev-also-create-old-sas-paths.patch [1] + +On CentOS in systemd-219-78.el7_9.3.src.rpm the above mentioned patch +allows old naming scheme before upstream commit [2] merged. + +With current implementation we see a mix of disks linked to the same +partitions, when multiple SAS disks are used, which is wrong. +ls -la /dev/disk/by-path/ +pci-0000:04:00.0-sas-phy0-lun-0 -> ../../sda +pci-0000:04:00.0-sas-phy0-lun-0-part1 -> ../../sde1 +pci-0000:04:00.0-sas-phy0-lun-0-part2 -> ../../sda2 +pci-0000:04:00.0-sas-phy0-lun-0-part3 -> ../../sda3 +pci-0000:04:00.0-sas-phy0-lun-0-part4 -> ../../sda4 +pci-0000:04:00.0-sas-phy0-lun-0-part5 -> ../../sda5 +pci-0000:04:00.0-sas-phy0-lun-0-part6 -> ../../sde6 +pci-0000:04:00.0-sas-phy1-lun-0 -> ../../sdf +pci-0000:04:00.0-sas-phy1-lun-0-part1 -> ../../sdb1 +pci-0000:04:00.0-sas-phy2-lun-0 -> ../../sdg +pci-0000:04:00.0-sas-phy3-lun-0 -> ../../sdd + +With patch applied we see the disk links unfolded as expected. +ls -la /dev/disk/by-path/ +pci-0000:04:00.0-sas-0x5000c5006c3d93ad-lun-0 -> ../../sde +pci-0000:04:00.0-sas-0x5000c5006c3d93ad-lun-0-part1 -> ../../sde1 +pci-0000:04:00.0-sas-0x5000c5006c3f97ad-lun-0 -> ../../sdf +pci-0000:04:00.0-sas-0x5000c5006c3f97ad-lun-0-part1 -> ../../sdf1 +pci-0000:04:00.0-sas-0x5000c5006c3fa189-lun-0 -> ../../sdd +pci-0000:04:00.0-sas-0x5000c5006c3fa189-lun-0-part1 -> ../../sdd1 +pci-0000:04:00.0-sas-0x5000c5006c3fa1fd-lun-0 -> ../../sdc +pci-0000:04:00.0-sas-0x5000c5006c3fa1fd-lun-0-part1 -> ../../sdc1 +pci-0000:04:00.0-sas-0x5000c5006c4033fd-lun-0 -> ../../sdb +pci-0000:04:00.0-sas-0x5000c5006c4033fd-lun-0-part1 -> ../../sdb1 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0 -> ../../sdg +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part1 -> ../../sdg1 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part2 -> ../../sdg2 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part3 -> ../../sdg3 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part4 -> ../../sdg4 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part5 -> ../../sdg5 +pci-0000:04:00.0-sas-0x5000c50071886b25-lun-0-part6 -> ../../sdg6 +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0 -> ../../sda +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0-part1 -> ../../sda1 +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0-part2 -> ../../sda2 +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0-part3 -> ../../sda3 +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0-part4 -> ../../sda4 +pci-0000:04:00.0-sas-0x5001e67680f0d000-lun-0-part5 -> ../../sda5 + +Upside is we get to keep the same naming as on CentOS, making a +smoother upgrade experience. +Downside is we need to carry this patch until the upstream issue +is fixed and we decide to swtich to the new naming scheme. + +Note: the code here was not redesigned to keep up with latest coding +trends (for example between upsteam v247 and v219 labels were dropped +in the modified functions, but the port introduces the 'restart' +label). + +Don't port the changes in udev rules related to ID_SAS_PATH, since +we have not been using them. If needed later, we can update the repo +responsible for providing configuration files for systemd [3]. + +[1]: https://git.centos.org/rpms/systemd/blob/ +c62b8ee391509d79d67dbdbbcc555ab3d4721409/f/SOURCES/ +0186-udev-also-create-old-sas-paths.patch +[2]: https://github.com/systemd/systemd/commit/ +66bba0e701b95dc42ed53e8f0799a7e2b944c147 +[3]: https://opendev.org/starlingx/config-files/src/ +branch/master/systemd-config + +Signed-off-by: Dan Voiculeasa +--- + src/udev/udev-builtin-path_id.c | 35 +++++++++++++++++++++++++-------- + 1 file changed, 27 insertions(+), 8 deletions(-) + +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index 0da59e2c75..eea6d7e798 100644 +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -148,7 +148,7 @@ static sd_device *handle_scsi_sas_wide_port(sd_device *parent, char **path) { + return parent; + } + +-static sd_device *handle_scsi_sas(sd_device *parent, char **path) { ++static sd_device *handle_scsi_sas(sd_device *parent, char **path, bool enable_new_sas_path, bool *new_sas_path) { + sd_device *targetdev, *target_parent, *port, *expander; + _cleanup_(sd_device_unrefp) sd_device *target_sasdev = NULL, *expander_sasdev = NULL, *port_sasdev = NULL; + const char *sas_address = NULL; +@@ -159,6 +159,8 @@ static sd_device *handle_scsi_sas(sd_device *parent, char **path) { + assert(parent); + assert(path); + ++ *new_sas_path = false; ++ + if (sd_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target", &targetdev) < 0) + return NULL; + if (sd_device_get_parent(targetdev, &target_parent) < 0) +@@ -180,7 +182,7 @@ static sd_device *handle_scsi_sas(sd_device *parent, char **path) { + return NULL; + + /* Check if we are simple disk */ +- if (strncmp(phy_count, "1", 2) != 0) ++ if (strncmp(phy_count, "1", 2) != 0 || !enable_new_sas_path) + return handle_scsi_sas_wide_port(parent, path); + + /* Get connected phy */ +@@ -206,6 +208,8 @@ static sd_device *handle_scsi_sas(sd_device *parent, char **path) { + else + path_prepend(path, "sas-phy%s-%s", phy_id, lun); + ++ *new_sas_path = true; ++ + return parent; + } + +@@ -408,7 +412,7 @@ static sd_device *handle_scsi_hyperv(sd_device *parent, char **path, size_t guid + return parent; + } + +-static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path, bool *supported_parent) { ++static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path, bool *supported_parent, bool enable_new_sas_path, bool *new_sas_path) { + const char *devtype, *id, *name; + + if (sd_device_get_devtype(parent, &devtype) < 0 || +@@ -433,7 +437,7 @@ static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path + + if (strstr(name, "/end_device-")) { + *supported_parent = true; +- return handle_scsi_sas(parent, path); ++ return handle_scsi_sas(parent, path, enable_new_sas_path, new_sas_path); + } + + if (strstr(name, "/session")) { +@@ -540,9 +544,13 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) { + bool supported_transport = false; + bool supported_parent = false; + const char *subsystem; ++ bool enable_new_sas_path = true; ++ bool new_sas_path = false; + + assert(dev); + ++restart: ++ ; + /* walk up the chain of devices and compose path */ + parent = dev; + while (parent) { +@@ -554,7 +562,7 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) { + } else if (streq(subsys, "scsi_tape")) { + handle_scsi_tape(parent, &path); + } else if (streq(subsys, "scsi")) { +- parent = handle_scsi(parent, &path, &compat_path, &supported_parent); ++ parent = handle_scsi(parent, &path, &compat_path, &supported_parent, enable_new_sas_path, &new_sas_path); + supported_transport = true; + } else if (streq(subsys, "cciss")) { + parent = handle_cciss(parent, &path); +@@ -709,9 +717,20 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) { + i--; + tag[i] = '\0'; + +- udev_builtin_add_property(dev, test, "ID_PATH", path); +- udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); +- } ++ if (new_sas_path) { ++ udev_builtin_add_property(dev, test, "ID_SAS_PATH", path); ++ } else { ++ udev_builtin_add_property(dev, test, "ID_PATH", path); ++ udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); ++ } ++ ++ if (new_sas_path) { ++ free(path); ++ path = NULL; ++ enable_new_sas_path = false; ++ goto restart; ++ } ++ } + + /* + * Compatible link generation for ATA devices +-- +2.34.1 + diff --git a/base/systemd/debian/patches/series b/base/systemd/debian/patches/series index b143c1691..eb19fd66d 100644 --- a/base/systemd/debian/patches/series +++ b/base/systemd/debian/patches/series @@ -28,3 +28,6 @@ skip-some-testcases.patch # Keep NIC naming in sync with CentOS 0014-Introduce-and-use-custom-NIC-naming-scheme.patch + +# Fix SAS paths for multiple disks +0015-Port-udev-old-sas-paths-creation-from-RHEL.patch