Revanth Rajashekar [Tue, 29 Oct 2019 00:02:30 +0000 (18:02 -0600)]
nvme-cli: Update PMR Capability and PMR Status
1. Adding Controller Memory Space Supported(CMSS) in PMRCAP
2. Adding Persistent Memory Region Status(CBAI) in PMRSTS
Revanth Rajashekar [Mon, 28 Oct 2019 23:20:29 +0000 (17:20 -0600)]
nvme-cli: Update NVMe Registers
1. Add Controller Memory Buffer Memory Space Control (CMBMSC)
2. Add Controller Memory Buffer Status (CMBSTS)
3. Add Persistent Memory Region Memory Space Control (PMRMSC)
Keith Busch [Thu, 10 Oct 2019 19:35:56 +0000 (04:35 +0900)]
fix namespace checks for legacy list
First ensure the controller we're comparing with has been initialized, and then
compare the correct fields with each other. Previously had been comparing a
model number against the serial.
Ben Reese [Tue, 8 Oct 2019 19:24:34 +0000 (12:24 -0700)]
Intel plugin: Adding fields to id-ctrl VU region
Per https://github.com/linux-nvme/nvme-cli/pull/584/commits/f33510efbf5192116e5757d13a02463d446a1dc5#r332178975 removing pack pragma on vu_id_ctrl_field struct.
Signed-off-by: Ben Reese <5884008+benreese0@users.noreply.github.com>
Sagi Grimberg [Mon, 7 Oct 2019 18:22:21 +0000 (11:22 -0700)]
udev: convert the discovery event handler to the kernel support
The kernel will not send us a specific event for discovery but
rather the AEN result code. So expect NVME_AEN=0x70f002 for
discovery log change events.
Also, we don't get the NVME_CTRL_NAME env var anymore as this is
available from the device $kernel.
Andy Lutomirski [Thu, 3 Oct 2019 18:47:02 +0000 (11:47 -0700)]
Use a systemd app-specific machine ID for hostnqn
If /etc/nvme/hostnqn is not present, the fabric commands will ask
systemd for an app-specific machine ID as a fallback. This should
improve functionality if /etc/nvme/hostnqn is not present and should
allow packagers to avoid creating /etc/nvme/hostnqn.
Heavily based on an earlier patch from Tomasz Torcz.
Signed-off-by: Tomasz Torcz <tomek@pipebreaker.pl> Signed-off-by: Andy Lutomirski <luto@kernel.org>
On error, scandir returns -1 and does not allocate memory
for namelist array. In some places in the code return value
of scandir call is not checked. This causes nvme-cli to
attempt to free() an uninitialized pointer, which subsequently
leads to segmentation fault.
To address this issue, check return value of scandir calls
throughout the code.
Changes determination of Device Self-Test in progress to be based on the
Current Device Self-Test Operation field as opposed to the Current
Device Self-Test Completion field.
Current implementation assumes that the Current Device Self-Test
Completion field will be 100% when no Device Self-Test operation is in
progress. This is an unsafe assumption as the NVMe Specification
explicitly specifies that the Current Device Self-Test Completion field
is invalid when no Device Self-Test operation in progress as indicated
by a value of 0 in the Current Device Self-Test Operation field.
A safe assumption is to use the Current Device Self-Test Operation field
which will be 0 when no Device Self-Test operation is in progress.
Minwoo Im [Tue, 3 Sep 2019 01:25:37 +0000 (10:25 +0900)]
remove LIBUUID things from nvme.h
We have this structure in linux/nvme.h already.
cc -D_GNU_SOURCE -D__CHECK_ENDIAN__ -O2 -g -Wall -Werror -std=gnu99 -I. -DNVME_VERSION='"1.9.22.g6936.dirty"' -Iutil -o nvme-print.o -c nvme-print.c
In file included from nvme.h:35:0,
from nvme-print.h:4,
from nvme-print.c:7:
linux/nvme.h:24:3: error: conflicting types for ‘uuid_t’
} uuid_t;
^~~~~~
In file included from nvme-print.h:4:0,
from nvme-print.c:7:
nvme.h:32:3: note: previous declaration of ‘uuid_t’ was here
} uuid_t;
^~~~~~
Makefile:70: recipe for target 'nvme-print.o' failed
nvme-print.c: In function ‘show_relatives’:
nvme-print.c:3964:3: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
asprintf(&path, "/sys/class/nvme/%s", name);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nvme-print.c:3968:3: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
asprintf(&path, "/sys/block/%s/device", name);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Minwoo Im [Sun, 25 Aug 2019 13:28:50 +0000 (22:28 +0900)]
id-ctrl: show Flush command behavior in VWC
Volatile Write Cache(VWC) is now indicating the Flush command behavior
in VWC point-of-view. If 2h, Flush command does not support for the
NSID set to FFFFFFFFh. But in case of 3h, it will support.
Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
Keith Busch [Thu, 29 Aug 2019 19:38:14 +0000 (13:38 -0600)]
nvme-cli: Macro'ify argument defines
Defining arguments by field type is too repetive and creates excessively
long lines. Simplify this with some macros that handle the more tedious
parts.
Keith Busch [Mon, 26 Aug 2019 22:17:41 +0000 (16:17 -0600)]
nvme-cli: Make 'list' more useful
The original 'list' subcommand was a bit of an ad-hoc development. Not
a whole lot of forethought was made toward subsystems, multipathing,
multi-namespace capabilities.
Those more complicated topologies we see today have become difficult
for users to visualize and understand the relationships among many
devices co-existing in the same, and 'list' has not kept up with these
complications.
As newer kernels provide more information for user space to discover,
provide a more verbose option to list this information while maintaining
backward compatibility for kernels that do not provide nvme subsystem
suppport.
The following examples are using the column format, however I find the
json output more satisfying.
The old way (no verbose options):
# nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 PHLE7200015N6P4BGN-1 7335943:ICDPC5ED2ORA6.4T 1 3.20 TB / 3.20 TB 512 B + 0 B QDV1RD07
/dev/nvme1n1 PHLE7200015N6P4BGN-2 7335943:ICDPC5ED2ORA6.4T 1 3.20 TB / 3.20 TB 512 B + 0 B QDV1RD03
/dev/nvme2n1 CVFT50850022400GGN INTEL SSDPE2MD400G4 1 400.09 GB / 400.09 GB 4 KiB + 0 B 8DV101J0
/dev/nvme3n1 CVMD4215002W1P6DGN INTEL SSDPEDME012T4 1 1.20 TB / 1.20 TB 4 KiB + 0 B 8DV101B0
/dev/nvme4n1 e559e5e004175109 Linux 1 3.20 TB / 3.20 TB 512 B + 0 B 5.3.0-rc
/dev/nvme4n2 e559e5e004175109 Linux 2 3.20 TB / 3.20 TB 512 B + 0 B 5.3.0-rc
/dev/nvme5n1 FUMB5256000J280A INTEL SSDPED1D140GA 1 140.04 GB / 140.04 GB 512 B + 0 B E40A0208
Sagi Grimberg [Thu, 22 Aug 2019 22:09:37 +0000 (15:09 -0700)]
systemd: fix echo call with absolute path
Without placing the absolute path when formatting the
nvme connect-all args we can get the following error:
--
connect-all: unrecognized option '-e'
Discover NVMeoF subsystems and connect to them [ --transport=<LIST>, -t <LIST> ] --- transport type
[ --traddr=<LIST>, -a <LIST> ] --- transport address
[ --trsvcid=<LIST>, -s <LIST> ] --- transport service id (e.g. IP
port)
[ --host-traddr=<LIST>, -w <LIST> ] --- host traddr (e.g. FC WWN's)
[ --hostnqn=<LIST>, -q <LIST> ] --- user-defined hostnqn (if default
not used)
[ --hostid=<LIST>, -I <LIST> ] --- user-defined hostid (if default
not used)
[ --raw=<LIST>, -r <LIST> ] --- raw output file
[ --device=<LIST>, -d <LIST> ] --- use existing discovery controller
device
[ --keep-alive-tmo=<LIST>, -k <LIST> ] --- keep alive timeout period in
seconds
[ --reconnect-delay=<LIST>, -c <LIST> ] --- reconnect timeout period in
seconds
[ --ctrl-loss-tmo=<LIST>, -l <LIST> ] --- controller loss timeout period in
seconds
[ --hdr_digest, -g ] --- enable transport protocol header
digest (TCP transport)
[ --data_digest, -G ] --- enable transport protocol data
digest (TCP transport)
[ --nr-io-queues=<LIST>, -i <LIST> ] --- number of io queues to use
(default is core count)
[ --nr-write-queues=<LIST>, -W <LIST> ] --- number of write queues to use
(default 0)
[ --nr-poll-queues=<LIST>, -P <LIST> ] --- number of poll queues to use
(default 0)
[ --queue-size=<LIST>, -Q <LIST> ] --- number of io queue elements to
use (default 128)
[ --persistent, -p ] --- persistent discovery connection
[ --quiet, -Q ] --- suppress already connected errors
Usage: nvme connect-all <device> [OPTIONS]
Options:
: nvmf-connect@--device\x3dnvme0\t--transport\x3dtcp\t--traddr\x3d192.168.123.1\t--trsvcid\x3d8009\t--host-traddr\x3dnone.service: Main process exited, code=exited, status=70/n/a
: nvmf-connect@--device\x3dnvme0\t--transport\x3dtcp\t--traddr\x3d192.168.123.1\t--trsvcid\x3d8009\t--host-traddr\x3dnone.service: Failed with result 'exit-code'.
Sagi Grimberg [Thu, 22 Aug 2019 22:09:36 +0000 (15:09 -0700)]
nvmf-autoconnect: fix absolute path for systemctl
Without the absolute path udev gets the error:
failed to execute '/lib/udev/systemctl' 'systemctl --no-block start nvmf-connect@[...].service': No such file or directory
rgirasegit [Fri, 23 Aug 2019 10:05:46 +0000 (15:35 +0530)]
Add an example for attach-ns
Add an example to man page of attach-ns command showing syntax and information to use hexadecimal value for Namespace identifier and controller identifier.