]> git.proxmox.com Git - pve-storage.git/commitdiff
Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX"
authorFiona Ebner <f.ebner@proxmox.com>
Mon, 28 Nov 2022 11:29:49 +0000 (12:29 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 30 Nov 2022 15:33:09 +0000 (16:33 +0100)
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 <f.ebner@proxmox.com>
Tested-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>

PVE/Diskmanage.pm
test/disk_tests/nvme_smart/nvme0/model [deleted file]
test/disk_tests/nvme_smart/nvme0n1/device [deleted symlink]
test/disk_tests/nvme_smart/nvme0n1/device/model [new file with mode: 0644]

index 7012f3edd368f8228c1225fdd56ae5d7545622b5..f682e59d65a460b32175548e396c8d9ec373b01b 100644 (file)
@@ -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/nvme0/model b/test/disk_tests/nvme_smart/nvme0/model
deleted file mode 100644 (file)
index 9bd6eba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-NVME MODEL 1
diff --git a/test/disk_tests/nvme_smart/nvme0n1/device b/test/disk_tests/nvme_smart/nvme0n1/device
deleted file mode 120000 (symlink)
index e890f3e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../nvme0
\ No newline at end of file
diff --git a/test/disk_tests/nvme_smart/nvme0n1/device/model b/test/disk_tests/nvme_smart/nvme0n1/device/model
new file mode 100644 (file)
index 0000000..9bd6eba
--- /dev/null
@@ -0,0 +1 @@
+NVME MODEL 1