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
Sagi Grimberg [Thu, 22 Aug 2019 21:31:32 +0000 (14:31 -0700)]
nvme: fix compilation error
gcc 7.4.0.
nvme.c: In function ‘print_relatives’:
nvme.c:3505:3: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
asprintf(&path, "/sys/class/nvme/%s", devicename);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nvme.c:3509:3: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
asprintf(&path, "/sys/block/%s/device", devicename);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
Makefile:57: recipe for target 'nvme' failed
make: *** [nvme] Error 1
Keith Busch [Thu, 22 Aug 2019 16:20:18 +0000 (10:20 -0600)]
nvme-cli: Enhance format FNA detection
Always check the format attributes to verify if the controller will
apply the format to all namespaces, or if they can be individually
formatted. This is used to properly warn of the implications from sending
this command.
Signed-off-by: Keith Busch <keith.busch@intel.com>
Keith Busch [Wed, 21 Aug 2019 22:28:19 +0000 (16:28 -0600)]
nvme-cli: Warn and delay before formatting
By popular demand, have format print a warning that shows the relatives of
the device the format was sent to.
If this command was issued to a block device, its relative are the
parent controllers.
If this command was issued to a controller device, its relative children
are namespace block devices.
This provides a visual clue that /dev/nvme0 may or may not be the parent
controller to namespace /dev/nvme0n1, and provides ample time for the
user to abort the operation if they didn't mean to do this.
Here are some examples of what this change provides sending this command
to a controller first, then to a multipathed namespace:
# nvme format /dev/nvme0 -n 1
You are about to format nvme0, namespace 0x1.
Controller nvme0 has child namespace(s):nvme2n1
# nvme format /dev/nvme4n1
You are about to format nvme4n1, namespace 0x1.
Namespace nvme4n1 has parent controller(s):nvme4, nvme5
Keith Busch [Thu, 15 Aug 2019 19:14:59 +0000 (13:14 -0600)]
Tag release: v1.9
Thank you to everyone who contributed to this release. Many updates for
the new 1.4 spec are rolling out, fabrics control enhancments, vendor
plugins/extentions, and the usual miscellaneous improvements to output
and options all included.
Shortlog:
Akinobu Mita (4):
nvme-cli: add missing endianness conversions for telemetry log page
nvme-cli: cleanup comments for telemetry log structure
nvme-cli: add kernel-doc comment for struct telemetry_log_page_hdr
nvme-cli: remove unused NVME_AER_NOTICE_*
Alexander Larin (1):
Use 0x prefix for all hex values of id-ctrl output
Andy Lutomirski (1):
Fix passing CFLAGS on the make command line.
Bart Van Assche (16):
Remove superfluous casts
Use NULL instead of 0 where a pointer is expected
huawei: Declare local functions static
seagate: Declare local functions static
virtium: Declare local symbols static
lightnvm: Fix an endianness issue
virtium: Fix an endianness issue
wdc: Fix endianness bugs
Avoid using arrays with a variable length
nvme-cli: Rework the code for getting and setting NVMf properties
nvme-cli: Skip properties that are not supported
Introduce NVMe 1.4 Identify Namespace fields in struct nvme_id_ns
nvme-cli: Report the NVMe 1.4 NPWG, NPWA, NPDG, NPDA and NOWS fields
nvme-cli: Restore support for older gcc versions
nvme-cli: Restore RHEL 7 compatibility
nvme-cli: Fix more endianness issues
Chaitanya Kulkarni (6):
nvme-cli: cmbloc code cleanup
nvme-cli: code cleanup adjust if statement
nvme-cli: remove trailing space
nvme-cli: use uniform if .. else format
nvme-cli: use uniform if .. else format
nvme-cli: use uniform if .. else format
Dominique Leuenberger (1):
DOC: Move to DocBook 5 when using asciidoctor
Hannes Reinecke (3):
nvme-cli: do not use 'queue_size' and 'nr_io_queues' for discovery controller
nvme-cli: mask out invalid options during discovery
nvme-cli: Update manpages to reflect discovery particulars
Haochen Tong (2):
Fix code block style in the first section
Update packaging state in Arch Linux
James Smart (8):
nvme-cli: ignore arguments that pass in "none"
nvme-cli: allow discover to address discovery controller by persistent name
nvme-cli: Refactor to create a get_nvme_ctrl_info routine
nvme-cli: extend ctrl_list_item for connect attributes
nvme-cli: Add routine to compare ctrl_list_item to connect args
nvme-cli: Add routine to search for controller with specific attributes
nvme-cli: Expand --device argument processing
nvme-cli: nvmf auto-connect scripts
Jeff Lien (4):
[NVMe-CLI] WDC: Add support for 64 bit data addresses in Get DUI Data functions
Add verbose capability to get DUI function to improve debug
[NVMe-CLI] Add support for SN730 to WDC plugin commmands
[NVMe-CLI] Add support for larger data sizes needed to get DUI data.
Jeffrey Lien (2):
Fix Failure to read 0xCA Log Page on SN200 Device [NVMe-CLI] Fix Incorrect Data Formats with the 0xCA and 0xD0 Log Pages
Add Disable IO flag to wdc_dump_dui_data function
Keith Busch (10):
Revert "plugin: Return EINVAL instead of ENOTTY"
Regen docs
Reorder primary commands
remove non-portable compile-time check
Add a note to format on device naming conventions
respin documentation
doc: fixup 3rd party man page
Spin documentation
Fix sprintf truncate
Regen docs
Kenneth Heitke (12):
nvme: fix minor type in id-ctrl human readable output
nvme-cli: add identify secondary controller list
nvme-print: update self-test log to include 'aborted due to sanitize'
nvme-print: remove Virtual Management support from ONCS
nvme-print: add pretty print for estimated sanitize time
nvme-print: add JSON for NVMe 1.4 NPWG, NPWA, NPDG, NPDA and NOWS fields
nvme-print: Show value for Transport SGL Data Block Descriptor support
nvme: add Verify command
nvme: Enhanced Command Retry
nvme: sanitize enhancements
nvme: add support for Namespace Granularity
nvme-print: show new CMBLOC bit fields added in NVMe 1.4
Max Gurtovoy (5):
nvme: update list-ns nsid option
nvme: update description for "nvme list" command
fabrics: Fix memory leak of subsys list
nvme-print: fix json object memory leak
nvme: fix coding style issue
Minwoo Im (37):
nvme: Close a fd leaked
plugin: Return EINVAL instead of ENOTTY
ioctl: Fix double-free in a loop of get_property
ioctl: Fix wrong return case of get_property
print: Introduce show_nvme_status to print nvme status
print: Add const to return type of string
get-telemtry-log: Print nvme status in case err > 0
sanitize: Print nvme status in case ret > 0
format: Do not return directly without freeing fd
create-ns: Do not return directly without freeing fd
list-ctrl: Do not return directly without freeing fd
property: Introduce inline function to check 64bit reg
property: Remove unnecessary wrapper function
property: Fit print size for a property
nvme.h: Fix typos in status code values
nvme-cli: don't try to disconnect for ctrl with pcie transport
nvme-cli: remove unnecessary initialize of local var
nvme: Do not return in the middle of the subcommand
fabrics: Do not return in the middle of the subcommand
nvme: Return negative error value for internal errors
nvme-status: Introduce nvme status module to map errno
nvme: Return errno mapped for nvme error status
fabrics: return error when discovery retry exhausted
fabrics: Return errno mapped for fabrics error status
format: check BLKRRPART failure
nvme: clean up goto labels without whitespace
lnvm: remove redundant whitespace in lnvm_init()
lnvm: do not print 0 when the arg is not given
lnvm: cast identity structure to (void *) directly
doc: make description not only for PCIe
doc: add extension plugins' command format
lnvm: make data_len to sizeof() instead of magic number
lnvm: introduce chunk-log command for chunk info
lnvm: introduce alias geometry for id-ns for lnvm
id-ctrl: add an indicator for get lba status capability
id-ctrl: add 1.4 features to OAES
get-lba-status: add Get LBA Status command
Revanth Rajashekar (2):
nvme: add Persistent Memory Region (PMR) registers
nvme: UUIDs for Vendor-Specific Information
Sagi Grimberg (4):
spec, Makefile: add /etc/nvme files to package files
spec, make: Add discovery.conf to the package files list
nvme-cli: support persistent connections to a discovery controller
nvme-cli: add --quiet option
Shun Sakai (1):
Added openSUSE Leap to README.md
Simon Schricker (3):
nvme-cli: fix typo, removing the duplicate 'are'
nvme-cli: Increase size of ONTAP namespace path variable
nvme-vendor: fix c99 declarations in vendor plugins
Yair Elharrar (1):
nvme: change format default namespace id
Yoav Cohen (4):
fix json print for list-subsys command
add newline for command show-regs
add free call for json object for commands show-regs
add namespace to json output of nvme list
yongxing (1):
NVMe-Cli Shannon Plugin-add support for shannon systems.
丁剑 (1):
[Log] Memblaze add more log infomation for S.M.A.R.T.
Signed-off-by: Keith Busch <keith.busch@intel.com>
Revanth Rajashekar [Wed, 14 Aug 2019 18:51:00 +0000 (12:51 -0600)]
nvme: UUIDs for Vendor-Specific Information
1. Add 'id-uuid' command to show the available UUID list
2. Update the get-log, get-feature, and set-feature commands
to include a uuid-index parameter
a. If set, the index will be passed as part of DW14 to
the controller
3. Update show_nvme_id_ctrl_ctratt() to show bit 9 of the CTRATT
(UUID List Supported)
4. Update show_effects_log_human() to show the UUID selection bit
of the effects log
Revanth Rajashekar [Tue, 6 Aug 2019 21:36:45 +0000 (15:36 -0600)]
nvme: add Persistent Memory Region (PMR) registers
*update 'show-regs' to display the new PMR registers (PMRCAP, PMRCTL, PMRSTS)
*update 'show-regs' to display the PMRS bit of the Controller Capabilities Register
*add support for error status NVME_SC_SANITIZE_PROHIBITED_PMR
James Smart [Thu, 1 Aug 2019 23:13:48 +0000 (16:13 -0700)]
nvme-cli: nvmf auto-connect scripts
This set of scripts is a combination of those sent by Hannes, Sagi,
and I in earlier patches and RFC's.
Auto-connect operates by the nvme core layer or nvme-fc transport
generating a udev event with directory-controller addressing
information. The nvme core layer generates an event when a
persistent discovery controller generates a Discovery Log Change
Notification AEN. The nvme-fc transport generates an event when
an FC rport that has a NVME Discovery controller is detected or
when a FC state change event occurs for for an FC rport that has
a NVME Discovery controller
The udev event is handled by a script that extracts the Discovery
controller addressing information and initiates a systemd service
to perform a "nvme connect-all" to the Discovery controller.
The "nvme connect-all" request is not called directly from the udev
handler itself as the request may take some time or stall altogether,
which would block other udev event handling. By transitioning to
a sytemd service, the call can take as much time as needed to
complete.
The scripts consist of:
- A udev script that handles nvme core and nvme-fc udev events.
The udev handler starts a nvmf-connect systemd service.
- A nvmf-connect systemd service. The service, in its instance
name, is passed the connect arguments for the discovery
controller. The service performs a "nvme connect-all" to the
discovery controller.
- A nvmefc-boot-connections systemd service. This is a run-once
service run after udev is enabled, which will replay events
generated by NVME-FC devices detected during boot while udev
is not yet running.
- To stop autoconnect an additional nvmefc-connect.target has
been added, which will instruct systemd to cancel all
outstanding autoconnect services.
Note: Although the nvme-fc subsystem is converting to use the
same nvme core layer event mechanism, the nvme-fc-specific
udev event that has been in existence for a while is contained
in in the script so that the utilities may run against older
kernels.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Hannes Reinecke <hare@suse.com> CC: Simon Schricker <sschricker@suse.com>
Sagi Grimberg [Thu, 1 Aug 2019 23:13:47 +0000 (16:13 -0700)]
nvme-cli: add --quiet option
Now we are going to have discovery log change events, so
instead of trying to figure out which NVM subsystem ports
are already connected, we let the driver do that and
only suppress the failure messages.
Example:
nvme connect-all ... --quiet
This option will be used by the discovery log change corresponding
udev rule.
Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
James Smart [Thu, 1 Aug 2019 23:13:46 +0000 (16:13 -0700)]
nvme-cli: Expand --device argument processing
The connect-all --device argument was used to specify a specific device
to be used as the discovery controller. The device is typically a
long-lived discovery controller that posted a discovery event.
No attempt was made to ensure the device is who it is supposed to be
before using it.
Revised the code to use the other arguments in the connect-all request
to validate that the device is the entity that was expected. If the
device doesn't match, the cli will look for an existing matching device
in the system (should be a discovery controller due to nqn) with the
same connect parameters and use it. If one is not found on the system,
a new discovery controller will be created for the connect-all request.
The revision uses new routines to parse the connect arguments given
in the argstr parameter. As a couple of new fieldnames are needed, the
parse routine constants were expanded for them.
The revision uses the new routines to match the specified device vs
it's attributes as well as the search routine that looks for a device
with the connect arguments.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
James Smart [Thu, 1 Aug 2019 23:13:45 +0000 (16:13 -0700)]
nvme-cli: Add routine to search for controller with specific attributes
In preparation for searching controllers to match with connect args:
Create a new routine find_ctrl_with_connectargs() that will search the
controllers that exist in the system to find one that has attributes
that match the connect arguments specified. If found, the routine
returns the controller name ("nvme?"). If not found, a NULL is returned.
Routine is defined as a global as a subsequent patch will use it
from the fabrics routines.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Hannes Reinecke <hare@suse.com>
James Smart [Thu, 1 Aug 2019 23:13:44 +0000 (16:13 -0700)]
nvme-cli: Add routine to compare ctrl_list_item to connect args
In preparation for searching controllers to match with connect args:
Create a new routine that receives a structure containing connect
arguments and a device name. The routine will build and fill in a
ctrl_list_item for the device and compare its attributes with the
connect arguments. The routine returns true/false on whether they
match.
Routine is defined as a global as a subsequent patch will use it
from the fabrics routines.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
James Smart [Thu, 1 Aug 2019 23:13:43 +0000 (16:13 -0700)]
nvme-cli: extend ctrl_list_item for connect attributes
In preparation for searching controllers to match with connect args:
Extend the ctrl_list_item with elements that can be compared against
connect arguments. Extend the get_nvme_ctrl_info() routine to set
the fields.
subsysnqn was added as the ctrl_list_item may now be used outside of
a subsystem listing.
traddr, trsvid, and host_traddr are added. Their values come from
the address attribute. A new parsing routine was added that extracts
the values from the address string.
The new parsing routine and supporting field names strings are
declared as a global interface as a subsequent patch will call it
from the fabrics routines.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Hannes Reinecke <hare@suse.com>
James Smart [Thu, 1 Aug 2019 23:13:42 +0000 (16:13 -0700)]
nvme-cli: Refactor to create a get_nvme_ctrl_info routine
In preparation for searching controllers to match with connect args:
Refactor the get_nvme_subsystem_info() routine to take the portion
that creates a ctrl_list_item and sets its values and put it in a
separate get_nvme_ctrl_info() routine.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
James Smart [Thu, 1 Aug 2019 23:13:41 +0000 (16:13 -0700)]
nvme-cli: allow discover to address discovery controller by persistent name
To support discovery (connect/connect-all) to operate against a
persistent discovery controller, let the discovery controller to
be specified by its device node name rather than new connection
attributes.
Example:
nvme connect-all ... --device=nvme5
Also centralize extraction of controller instance from the controller
name to a common helper.
Signed-off-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Sagi Grimberg [Thu, 1 Aug 2019 23:13:40 +0000 (16:13 -0700)]
nvme-cli: support persistent connections to a discovery controller
Simply don't destroy the discovery controller after getting the
log pages. Note that persistent connection to a discovery subsystem
require to pass in a non-zero kato value, so if not provided we
simply use a default of 30 seconds kato.
Example:
nvme connect-all ... --persistent
Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: James Smart <jsmart2021@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
James Smart [Thu, 1 Aug 2019 23:13:39 +0000 (16:13 -0700)]
nvme-cli: ignore arguments that pass in "none"
As we want to support discovery uevents over different
transports, we want to allow the kernel to provide missing
information in the form of none and have nvme-cli properly
ignore it.
One example is the host_traddr. If it is not set (which means
that the default route determined the host address) we will
want to do the same for newly discovered controllers.
nvme-print: show new CMBLOC bit fields added in NVMe 1.4
* Bit 8 - CMB Queue Dword Alignment (CQDA)
* Bit 7 - CMB Data Metadata Mixed Memory Support (CDMMMS)
* Bit 6 - CMB Data Pointer and Command Independent Locations Support (CDPCILS)
* Bit 5 - CMB Data Pointer Mixed Locations Support (CDPMLS)
* Bit 4 - CMB Queue Physically Discontiguous Support (CQPDS)
* Bit 3 - CMB Queue Mixed Memory Support (CQMMS)
Reviewed-by: Edmund Nadolski <edmund.nadolski@intel.com> Signed-off-by: Kenneth Heitke <kenneth.heitke@intel.com>
Kenneth Heitke [Wed, 29 May 2019 22:29:49 +0000 (16:29 -0600)]
nvme: sanitize enhancements
Added display of new SANICAP fields of the Identify Controller data structure
* No-Deallocate Inhibited
* No-Deallocate Modifies Media After Sanitize
Updated Sanitize Status Log Page to include new fields
* Sanitize Status (SSTAT) field value (100b - completed successfully with deallocation)
* Estimated Time For Overwrite With No-Deallocate Media Modification (bytes 23:20)
* Estimated Time For Block Erase With No-Deallocate Media Modification (bytes 27:24)
* Estimated Time For Crypto Erase With No-Deallocate Media Modification (bytes 31:28)
Added Get/Set Feature - Sanitize Configuration
Reviewed-by: Edmund Nadolski <edmund.nadolski@intel.com> Signed-off-by: Kenneth Heitke <kenneth.heitke@intel.com>
Hannes Reinecke [Thu, 1 Aug 2019 08:47:41 +0000 (10:47 +0200)]
nvme-cli: mask out invalid options during discovery
When compiling the option string in build_options() we should ensure
to not add invalid options when doing a discovery. So add an additional
option 'discovery' to build_options() to identify these cases.
Kenneth Heitke [Thu, 27 Jun 2019 19:01:07 +0000 (13:01 -0600)]
nvme: Enhanced Command Retry
* Show CRDT fields of Identify Controller data structure
* Show Host Behavior Supported state for Get Feature 16h
* Add support for error status NVME_SC_CMD_INTERRUPTED
Reviewed-by: Edmund Nadolski <edmund.nadolski@intel.com> Signed-off-by: Kenneth Heitke <kenneth.heitke@intel.com>
Minwoo Im [Wed, 31 Jul 2019 09:25:48 +0000 (18:25 +0900)]
id-ctrl: add an indicator for get lba status capability
NVMe 1.4 supports for the Get LBA Status Capability which can be
referred to 8.22. The Identify Controller is now able to indicate
whether or not the Get LBA Status Capability is supported.
Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
Minwoo Im [Tue, 23 Jul 2019 17:30:57 +0000 (02:30 +0900)]
lnvm: introduce alias geometry for id-ns for lnvm
Now we have 2.0 OCSSD spec which introudces Geometry command instead of
Identity or something else. This patch just adds an alias for this
command for the given NVMe namespace with backward compatibility.
Cc: Keith Busch <kbusch@kernel.org> Cc: Matias Bjorling <mb@lightnvm.io> Cc: Javier González <javier@javigon.com> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Minwoo Im [Tue, 23 Jul 2019 17:26:04 +0000 (02:26 +0900)]
lnvm: introduce chunk-log command for chunk info
To retrieve the chunk information from the nvme namespae for the given
OCSSD, we can just do like:
nvme lnvm chunk-log /dev/nvme0n1 --output-format=normal
This will calculate the data length from the geometry data structure
which might be retrieved by a Geometry command(Identity for 1.2 spec.).
Then it will request get log page API for 1.3 NVMe spec to get the
entries which indicate chunk information.
Cc: Keith Busch <kbusch@kernel.org> Cc: Matias Bjorling <mb@lightnvm.io> Cc: Javier González <javier@javigon.com> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
Minwoo Im [Sat, 20 Jul 2019 08:50:54 +0000 (17:50 +0900)]
lnvm: cast identity structure to (void *) directly
If we use "tmp" or something like this, we can expect that it just
stores the previous pointer and do something else with the previous
pointer. But, in this function, it just to cast it out.
Cc: Keith Busch <kbusch@kernel.org> Cc: Matias Bjorling <mb@lightnvm.io> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Javier González <javier@javigon.com>
Kenneth Heitke [Thu, 27 Jun 2019 16:56:03 +0000 (10:56 -0600)]
nvme-print: Show value for Transport SGL Data Block Descriptor support
The Transport SGL Data Block Descriptor is a new SGL Descriptor Type added in
NVMe 1.4. Support for this descriptor type is added to the SGL Support (SGLS)
field of the Identify Controller data structure.
Bart Van Assche [Mon, 24 Jun 2019 15:47:27 +0000 (08:47 -0700)]
nvme-cli: Fix more endianness issues
Declare little endian variables as __le*. Use the proper le*_to_cpu()
conversion functions for little endian integers. Do not use le*_to_cpu()
for variables of type uint8_t.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Bart Van Assche [Mon, 24 Jun 2019 13:55:21 +0000 (06:55 -0700)]
nvme-cli: Restore RHEL 7 compatibility
With glibc version 2.24 and before the endianness conversion macros
return a value with an incorrect type. Avoid that this causes the
nvme-cli build to fail on e.g. RHEL 7. A side effect of this patch
is that it allows sparse to verify the type of the endianness
conversion functions.
See also https://sourceware.org/bugzilla/show_bug.cgi?id=16458
Bart Van Assche [Mon, 24 Jun 2019 17:41:37 +0000 (10:41 -0700)]
nvme-cli: Restore support for older gcc versions
Older versions of gcc do not support initializing another than the first
member of a union in an initializer. Rewrite some code such that support
for older gcc versions is restored.
Fixes: 301e263c34e8 ("nvme-cli: Rework the code for getting and setting NVMf properties") Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Minwoo Im [Thu, 23 May 2019 14:33:48 +0000 (23:33 +0900)]
fabrics: Return errno mapped for fabrics error status
If discover has been failed due to a nvme status, it will be returned to
main() with mapped value for fabrics get log page command.
Now connect command related status cannot be added in this patch because
kernel is not currently returning the nvme status, it's instead
returning -EIO if fails. errno for connect command can be added once
kernel is ready to return the proper value for nvme status.
Minwoo Im [Tue, 18 Jun 2019 12:53:38 +0000 (21:53 +0900)]
fabrics: return error when discovery retry exhausted
If the discovery page is not updated to the latest one over the 10
times, it's currently returning DISC_OK if the numrec has no problem.
If so, the caller might think that the discovery has been successfully
done without any errors even there is.
This patch makes it return an error -EAGAIN if retry(10 times) has been
exhausted.
Minwoo Im [Thu, 23 May 2019 14:28:11 +0000 (23:28 +0900)]
nvme: Return errno mapped for nvme error status
If ioctl module has returned a nvme error status, it will be returned
by being converted to a mapped errno value which has been provided by
previous commits.
Cc: Keith Busch <kbusch@kernel.org> Cc: Chaitanya Kulkarni <chaitanya.Kulkarni@wdc.com> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Minwoo Im [Tue, 21 May 2019 16:36:57 +0000 (01:36 +0900)]
nvme-status: Introduce nvme status module to map errno
Background:
It's not enough to return the nvme status value in main() because it's
allowed to be in 8bits, but nvme status is indicated in 16bits. So we
has not been able to figure out what kind of nvme status has been
returned by return value.
This patch introduces nvme-status module that manages mapping between
nvme status and errno. It's not possible to make 1:1 mapping relations,
but we can map it as a groups.
All the internal errors which has been returned in a negative value will
be returned with ECOMM that indicates communication errors. In this
case, we can see what happened via stderr.
Cc: Keith Busch <kbusch@kernel.org> Cc: Chaitanya Kulkarni <chaitanya.Kulkarni@wdc.com> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Minwoo Im [Thu, 23 May 2019 14:09:09 +0000 (23:09 +0900)]
nvme: Return negative error value for internal errors
To support the mapping of error values which will be introduced in the
next patches, All the internal errors caused in the middle of the
subcommands preparation or teardown should be returned as a negative
value to make it distinguished from nvme error status which is positive.
This patch makes all the internal error values which used to be returned
as a positive value to be returned as a negative value.
Cc: Keith Busch <kbusch@kernel.org> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Minwoo Im [Thu, 23 May 2019 14:16:54 +0000 (23:16 +0900)]
fabrics: Do not return in the middle of the subcommand
This patch also makes fabrics module to not return the internal error
status in the middle of the subcommands to support uniformed mapped
error value which will be introduced in the next patches.
Minwoo Im [Thu, 23 May 2019 14:02:48 +0000 (23:02 +0900)]
nvme: Do not return in the middle of the subcommand
To make nvme-cli subcommand return a mapped errno value to main(), it
should return the error status in a single place because it would be
great if the return statements and free operations are in an one shot
place.
This patch makes all the subcommands in nvme module return the error
which means internal error which should be in negative and nvme error
status which is in positive at the end of the subcommand.
Most of the changed parts are file descriptors which is returned from
parse_and_open() function. The "fd" could be in a negative value so
that it needs to be mapped to a uniformed errno value which will be
applied by the next patches.
Cc: Keith Busch <kbusch@kernel.org> Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>