Skip to content

nvme list-subsys fails to error out if invalid device is passed to it #2830

@martin-gpy

Description

@martin-gpy

nvme list-subsys fails to error out if invalid device is passed to it via the <device> option. For e.g. suppose one has a single subsystem with two namespaces in it:

# nvme list
Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme1n1          /dev/ng1n1            81CYrBSoKGRJAAAAAAAN NetApp ONTAP Controller                  0x2        219.47  MB /  10.74  GB    512   B +  0 B   9.18.1
/dev/nvme1n2          /dev/ng1n2            81CYrBSoKGRJAAAAAAAN NetApp ONTAP Controller                  0x1        330.56  MB /  10.74  GB      4 KiB +  0 B   9.18.1
# nvme list-subsys /dev/nvme1n1
nvme-subsys1 - NQN=nqn.1992-08.com.netapp:sn.48391d66c0a611ecaaa5d039ea165514:subsystem.subsys_CLIENT116_0
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:e6550026-173e-4959-ba74-be367844bd8a
\
 +- nvme1 tcp traddr=192.168.2.116,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live optimized
 +- nvme2 tcp traddr=192.168.1.116,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live optimized
 +- nvme3 tcp traddr=192.168.2.117,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live non-optimized
 +- nvme4 tcp traddr=192.168.1.117,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live non-optimized

But I also see a similar list-subsys output even for an invalid device like say nvme1n3, when ideally it should have errored out with an invalid device output:

# nvme list-subsys /dev/nvme1n3
nvme-subsys1 - NQN=nqn.1992-08.com.netapp:sn.48391d66c0a611ecaaa5d039ea165514:subsystem.subsys_CLIENT116_0
               hostnqn=nqn.2014-08.org.nvmexpress:uuid:e6550026-173e-4959-ba74-be367844bd8a
\
 +- nvme1 tcp traddr=192.168.2.116,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live
 +- nvme2 tcp traddr=192.168.1.116,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live
 +- nvme3 tcp traddr=192.168.2.117,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live
 +- nvme4 tcp traddr=192.168.1.117,trsvcid=4420,host_traddr=192.168.1.6,src_addr=192.168.1.6 live

And one can also see a blank output if a different invalid device with a different subsys number is passed to it. For e.g.

# nvme list-subsys /dev/nvme2n1
# echo $?
0

So obviously list-subsys is broken while handling invalid or non-existent NVMe devices.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions