From 77d8f15262247514b3cecf640666742229d1511c Mon Sep 17 00:00:00 2001 From: Bryan Gurney Date: Wed, 18 Sep 2024 15:03:59 -0400 Subject: [PATCH 1/3] Pin obsolete NVMe symlinks to namespace 1 In order to preserve backwards compatibility with legacy NVMe devices, create the obsolete symlinks, but only if they are associated with namespace ID 1. Signed-off-by: Bryan Gurney --- rules.d/60-persistent-storage.rules.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules.d/60-persistent-storage.rules.in b/rules.d/60-persistent-storage.rules.in index 76cab7fbc7..37f562c9e8 100644 --- a/rules.d/60-persistent-storage.rules.in +++ b/rules.d/60-persistent-storage.rules.in @@ -45,9 +45,9 @@ ENV{ID_WWN}=="?*", SYMLINK+="disk/by-id/nvme-$env{ID_WWN}$env{.PART_SUFFIX}" # obsolete symlink with non-escaped characters, kept for backward compatibility ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_MODEL}!="*/*", ENV{ID_SERIAL_SHORT}!="*/*", \ - ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}$env{.PART_SUFFIX}" + ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", ENV{ID_NSID}=="1", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}$env{.PART_SUFFIX}" # obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility -ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", OPTIONS="string_escape=replace", \ +ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="1", OPTIONS="string_escape=replace", \ ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}$env{.PART_SUFFIX}" ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="?*", OPTIONS="string_escape=replace", \ ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}$env{.PART_SUFFIX}" From 8c009371cdefacf49d67d36b981009d957b0b2fd Mon Sep 17 00:00:00 2001 From: Bryan Gurney Date: Wed, 18 Sep 2024 16:59:56 -0400 Subject: [PATCH 2/3] TEST-64-UDEV-STORAGE: remove obsolete NVMe symlink for nvme_subsystem In the nvme_subsystem test, there are only namespace IDs 16 and 17, so there would no longer be an "obsolete" symlink created, since this test scenaro does not create a namespace with ID 1. Signed-off-by: Bryan Gurney --- test/units/TEST-64-UDEV-STORAGE.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/test/units/TEST-64-UDEV-STORAGE.sh b/test/units/TEST-64-UDEV-STORAGE.sh index 431b5305e4..5d6ed95e2d 100755 --- a/test/units/TEST-64-UDEV-STORAGE.sh +++ b/test/units/TEST-64-UDEV-STORAGE.sh @@ -227,7 +227,6 @@ testcase_nvme_basic() { testcase_nvme_subsystem() { local expected_symlinks=( # Controller(s) - /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef_16 /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef_17 # Shared namespaces From 21ba71f89bada667849a461faadaf1db54bc7799 Mon Sep 17 00:00:00 2001 From: Bryan Gurney Date: Tue, 15 Oct 2024 10:22:07 -0400 Subject: [PATCH 3/3] TEST-64-UDEV-STORAGE: test for absence of obsolete NVMe symlink Signed-off-by: Bryan Gurney --- test/units/TEST-64-UDEV-STORAGE.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/test/units/TEST-64-UDEV-STORAGE.sh b/test/units/TEST-64-UDEV-STORAGE.sh index 5d6ed95e2d..318e98ce47 100755 --- a/test/units/TEST-64-UDEV-STORAGE.sh +++ b/test/units/TEST-64-UDEV-STORAGE.sh @@ -219,6 +219,7 @@ testcase_nvme_basic() { for i in "${expected_symlinks[@]}"; do udevadm wait --settle --timeout=30 "$i" done + test ! -e /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef lsblk --noheadings | grep "^nvme" [[ "$(lsblk --noheadings | grep -c "^nvme")" -ge 20 ]]