From 668c15043f933e3025d955f7e0ae9962c13a942c Mon Sep 17 00:00:00 2001 From: Fiona Ebner Date: Mon, 28 Nov 2022 12:29:49 +0100 Subject: [PATCH] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c3442aa5546b029a524928d10c7ecabe0024c137. Nowadays, relying on 'readlink /sys/block/nvmeXnY/device' won't always lead to the correct device, as reported in the community forum[0], where it results in '../../nvme-subsys0' and there's no matching entry under '/dev/'. Since Linux kernel 5.4, in particular commit 733e4b69d508 ("nvme: Assign subsys instance from first ctrl"), the problematic situation from bug #2020 shouldn't happen anymore. Stated more clearly by the commit's author here[1]: > Indeed, that commit will make the naming a bit more sane and will > definitely prevent mistaken identity. It is still possible to > observe controllers with instances that don't match their > namespaces, but it is impossible to get a namespace instance that > matches a non-owning controller. The only other user of get_sysdir_info() doesn't use the 'device' entry, so reverting that part is fine too. [0] https://forum.proxmox.com/threads/113962/ [1] https://github.com/linux-nvme/nvme-cli/issues/510#issuecomment-552508647 Signed-off-by: Fiona Ebner Tested-by: Stefan Hrdlicka  --- PVE/Diskmanage.pm | 10 +--------- test/disk_tests/nvme_smart/nvme0n1/device | 1 - .../nvme_smart/{nvme0 => nvme0n1/device}/model | 0 3 files changed, 1 insertion(+), 10 deletions(-) delete mode 120000 test/disk_tests/nvme_smart/nvme0n1/device rename test/disk_tests/nvme_smart/{nvme0 => nvme0n1/device}/model (100%) diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index 7012f3e..f682e59 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -93,11 +93,7 @@ sub get_smart_data { my $smartdata = {}; my $type; - if ($disk =~ m!^/dev/(nvme\d+n\d+)$!) { - my $info = get_sysdir_info("/sys/block/$1"); - $disk = "/dev/".($info->{device} - or die "failed to get nvme controller device for $disk\n"); - } + $disk =~ s/n\d+$// if $disk =~ m!^/dev/nvme\d+n\d+$!; my $cmd = [$SMARTCTL, '-H']; push @$cmd, '-A', '-f', 'brief' if !$healthonly; @@ -377,10 +373,6 @@ sub get_sysdir_info { $data->{vendor} = file_read_firstline("$sysdir/device/vendor") || 'unknown'; $data->{model} = file_read_firstline("$sysdir/device/model") || 'unknown'; - if (defined(my $device = readlink("$sysdir/device"))) { - ($data->{device}) = $device =~ m!([^/]+)$!; # strip directory and untaint - } - return $data; } diff --git a/test/disk_tests/nvme_smart/nvme0n1/device b/test/disk_tests/nvme_smart/nvme0n1/device deleted file mode 120000 index e890f3e..0000000 --- a/test/disk_tests/nvme_smart/nvme0n1/device +++ /dev/null @@ -1 +0,0 @@ -../nvme0 \ No newline at end of file diff --git a/test/disk_tests/nvme_smart/nvme0/model b/test/disk_tests/nvme_smart/nvme0n1/device/model similarity index 100% rename from test/disk_tests/nvme_smart/nvme0/model rename to test/disk_tests/nvme_smart/nvme0n1/device/model