public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX"
@ 2022-11-28 11:29 Fiona Ebner
  2022-11-28 16:16 ` Stefan Hrdlicka
  2022-11-30 15:35 ` [pve-devel] applied: " Thomas Lamprecht
  0 siblings, 2 replies; 3+ messages in thread
From: Fiona Ebner @ 2022-11-28 11:29 UTC (permalink / raw)
  To: pve-devel

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>
---

Changes from v1:
    * Rebase on current master.
    * Squash in style change putting post-if on the same line.

Alternatively, we might want to switch to passing the namespaced
device name directly to smartctl. According to 'man smartcl', it's
supported and it works for me and the user in the forum. However,
AFAICT, the stated support was already present in smartmontools 6.5,
but c9bd3d2 ("fix #1123: modify NVME device path for SMART support")
references that version and mentions that it's necessary to drop the
namespace, so really not sure.

 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
-- 
2.30.2





^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [pve-devel] [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX"
  2022-11-28 11:29 [pve-devel] [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX" Fiona Ebner
@ 2022-11-28 16:16 ` Stefan Hrdlicka
  2022-11-30 15:35 ` [pve-devel] applied: " Thomas Lamprecht
  1 sibling, 0 replies; 3+ messages in thread
From: Stefan Hrdlicka @ 2022-11-28 16:16 UTC (permalink / raw)
  To: pve-devel

Tried this change locally. Didn't break smart output for me :).

Tested-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>

On 11/28/22 12:29, Fiona Ebner wrote:
> 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>
> ---




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] applied: [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX"
  2022-11-28 11:29 [pve-devel] [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX" Fiona Ebner
  2022-11-28 16:16 ` Stefan Hrdlicka
@ 2022-11-30 15:35 ` Thomas Lamprecht
  1 sibling, 0 replies; 3+ messages in thread
From: Thomas Lamprecht @ 2022-11-30 15:35 UTC (permalink / raw)
  To: Proxmox VE development discussion, Fiona Ebner

Am 28/11/2022 um 12:29 schrieb Fiona Ebner:
> 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>
> ---
> 
> Changes from v1:
>     * Rebase on current master.
>     * Squash in style change putting post-if on the same line.
> 
> Alternatively, we might want to switch to passing the namespaced
> device name directly to smartctl. According to 'man smartcl', it's
> supported and it works for me and the user in the forum. However,
> AFAICT, the stated support was already present in smartmontools 6.5,
> but c9bd3d2 ("fix #1123: modify NVME device path for SMART support")
> references that version and mentions that it's necessary to drop the
> namespace, so really not sure.

might want to try that then, we hopefully have a NVMe device with namespace
support, if not we can always get one.

> 
>  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%)
> 
>

applied for now as stop-gap, thanks!




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-11-30 15:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-28 11:29 [pve-devel] [RFC v2 storage] Revert "Fix #2020: use /sys to map nvmeXnY to nvmeX" Fiona Ebner
2022-11-28 16:16 ` Stefan Hrdlicka
2022-11-30 15:35 ` [pve-devel] applied: " Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal