From: Hannes Reinecke <hare@suse.de>
To: Guixin Liu <kanie@linux.alibaba.com>,
Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
Daniel Wagner <dwagner@suse.de>,
John Garry <john.g.garry@oracle.com>,
Nilay Shroff <nilay@linux.ibm.com>
Cc: linux-nvme@lists.infradead.org, xlpang@linux.alibaba.com,
oliver.yang@linux.alibaba.com
Subject: Re: [PATCH 1/3] nvme: add ABI documentation for host sysfs interfaces
Date: Thu, 2 Jul 2026 08:31:41 +0200 [thread overview]
Message-ID: <cd292576-e7f4-4ac3-8964-edb1bef05e78@suse.de> (raw)
In-Reply-To: <20260702034845.3066876-2-kanie@linux.alibaba.com>
On 7/2/26 5:48 AM, Guixin Liu wrote:
> Add Documentation/ABI/testing/sysfs-nvme documenting all NVMe host
> sysfs attributes, covering controller attributes under
> /sys/class/nvme/nvmeX/, namespace attributes under
> /sys/block/nvmeXnY/, and subsystem attributes under
> /sys/class/nvme-subsystem/nvme-subsysX/.
>
> Each entry has been traced to its original introducing commit to
> provide accurate Date, KernelVersion, and Contact information.
>
> Signed-off-by: Guixin Liu <kanie@linux.alibaba.com>
> ---
> Documentation/ABI/testing/sysfs-nvme | 444 ++++++++++++++++++++++++++-
> 1 file changed, 434 insertions(+), 10 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-nvme b/Documentation/ABI/testing/sysfs-nvme
> index 499d5f843cd4..079561601acd 100644
> --- a/Documentation/ABI/testing/sysfs-nvme
> +++ b/Documentation/ABI/testing/sysfs-nvme
> @@ -1,13 +1,437 @@
> -What: /sys/devices/virtual/nvme-fabrics/ctl/.../tls_configured_key
> +What: /sys/class/nvme/nvmeX/model
> +What: /sys/class/nvme/nvmeX/serial
> +What: /sys/class/nvme/nvmeX/firmware_rev
> +Date: January 2016
> +KernelVersion: 4.5
> +Contact: Keith Busch <kbusch@kernel.org>
> +Description:
> + Shows the model, serial number, or firmware revision string
> + of the NVMe controller, as reported in the Identify
> + Controller data structure.
> +
> +What: /sys/class/nvme/nvmeX/reset_controller
> +Date: November 2015
> +KernelVersion: 4.5
> +Contact: Christoph Hellwig <hch@lst.de>
> +Description:
> + Write-only. Writing any value triggers a synchronous
> + controller reset.
> +
> +What: /sys/block/nvmeXnY/uuid
> +What: /sys/block/nvmeXnY/eui
> +What: /sys/block/nvmeXnY/nsid
> +Date: December 2015
> +KernelVersion: 4.5
> +Contact: Keith Busch <kbusch@kernel.org>
> +Description:
> + Namespace identification attributes.
> +
> + uuid: Shows the UUID for this namespace. Falls back to
> + showing the NGUID for backward compatibility. Hidden if
> + both are all zeros.
> +
> + eui: Shows the IEEE Extended Unique Identifier (EUI-64).
> + Hidden if all zeros.
> +
> + nsid: Shows the namespace identifier (NSID).
> +
> +What: /sys/class/nvme/nvmeX/cntlid
> +Date: February 2016
> +KernelVersion: 4.6
> +Contact: Ming Lin <ming.l@ssi.samsung.com>
> +Description:
> + Shows the controller identifier assigned by the NVMe
> + subsystem.
> +
> +What: /sys/block/nvmeXnY/wwid
> +Date: February 2016
> +KernelVersion: 4.6
> +Contact: Keith Busch <kbusch@kernel.org>
> +Description:
> + Shows the World Wide Identifier for this namespace. The
> + format depends on available identifiers (in priority
> + order): "uuid.{UUID}", "eui.{NGUID}", "eui.{EUI64}", or
> + "nvme.{VID}-{SERIAL}-{MODEL}-{NSID}".
> +
> +What: /sys/class/nvme/nvmeX/rescan_controller
> +Date: April 2016
> +KernelVersion: 4.7
> +Contact: Keith Busch <kbusch@kernel.org>
> +Description:
> + Write-only. Writing any value triggers a namespace rescan
> + on this controller.
> +
> +What: /sys/class/nvme/nvmeX/transport
> +What: /sys/class/nvme/nvmeX/subsysnqn
> +What: /sys/class/nvme/nvmeX/address
> +What: /sys/class/nvme/nvmeX/delete_controller
> +What: /sys/class/nvme/nvmeX/reconnect_delay
> +What: /sys/class/nvme/nvmeX/ctrl_loss_tmo
> +Date: June 2016
> +KernelVersion: 4.8
> +Contact: Ming Lin <ming.l@ssi.samsung.com>
> +Description:
> + Fabrics controller attributes added with NVMe-oF support.
> +
> + transport: Shows the transport type string. Possible values:
> + "pcie", "tcp", "rdma", "fc", "loop".
> +
> + subsysnqn: Shows the NVMe Qualified Name (NQN) of the
> + subsystem this controller belongs to.
> +
> + address: Shows the transport-specific address string. Only
> + available for fabrics controllers.
> +
> + delete_controller: Write-only. Triggers deletion of this
> + fabrics controller.
> +
> + reconnect_delay: Shows or sets the reconnect delay in
> + seconds. Reading returns the delay value, or "off" if
> + disabled.
> +
> + ctrl_loss_tmo: Shows or sets the controller loss timeout in
> + seconds. Reading returns the timeout value, or "off" if
> + infinite reconnects are allowed. Writing a negative value
> + disables the timeout.
> +
> +What: /sys/class/nvme/nvmeX/cmb
> +Date: October 2016
> +KernelVersion: 4.9
> +Contact: Stephen Bates <sbates@raithlin.com>
> +Description:
> + Shows the Controller Memory Buffer (CMB) register values
> + in format "cmbloc : 0x%08x\ncmbsz : 0x%08x\n". Only
> + visible when the controller has a CMB (cmbsz != 0).
> + PCI transport only.
> +
> +What: /sys/class/nvme/nvmeX/state
> +Date: November 2016
> +KernelVersion: 4.11
> +Contact: Sagi Grimberg <sagi@grimberg.me>
> +Description:
> + Shows the current state of the controller. Possible values:
> + "new", "live", "resetting", "connecting", "deleting",
> + "deleting (no IO)", "dead".
> +
> +What: /sys/block/nvmeXnY/nguid
> +Date: June 2017
> +KernelVersion: 4.13
> +Contact: Johannes Thumshirn <jthumshirn@suse.de>
> +Description:
> + Shows the Namespace Globally Unique Identifier (NGUID).
> + Hidden if the NGUID is all zeros.
> +
> +What: /sys/class/nvme-subsystem/nvme-subsysX/model
> +What: /sys/class/nvme-subsystem/nvme-subsysX/serial
> +What: /sys/class/nvme-subsystem/nvme-subsysX/firmware_rev
> +What: /sys/class/nvme-subsystem/nvme-subsysX/subsysnqn
> +Date: November 2017
> +KernelVersion: 4.15
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows the model, serial number, firmware revision, or NQN
> + of the NVMe subsystem.
> +
> +What: /sys/block/nvmeXnY/ana_grpid
> +What: /sys/block/nvmeXnY/ana_state
> +Date: May 2018
> +KernelVersion: 4.19
> +Contact: Christoph Hellwig <hch@lst.de>
> +Description:
> + ana_grpid: Shows the ANA Group ID for this per-path
> + namespace device.
> +
> + ana_state: Shows the ANA state. Possible values:
> + "optimized", "non-optimized", "inaccessible",
> + "persistent-loss", "change".
> +
> + Only visible on per-path devices (not multipath head) when
> + the controller supports ANA. Requires CONFIG_NVME_MULTIPATH.
> +
> +What: /sys/class/nvme/nvmeX/numa_node
> +Date: November 2018
> +KernelVersion: 5.0
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows the NUMA node the controller is attached to.
> +
> +What: /sys/class/nvme-subsystem/nvme-subsysX/iopolicy
> +Date: February 2019
> +KernelVersion: 5.1
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows or sets the multipath I/O path selection policy for
> + this subsystem. Accepted values: "numa", "round-robin",
> + "queue-depth". Changing the policy clears all current path
> + selections. Only available when CONFIG_NVME_MULTIPATH is
> + enabled.
> +
> +What: /sys/class/nvme/nvmeX/queue_count
> +What: /sys/class/nvme/nvmeX/sqsize
> +Date: September 2019
> +KernelVersion: 5.4
> +Contact: James Smart <jsmart2021@gmail.com>
> +Description:
> + queue_count: Shows the total number of queues (admin + I/O)
> + for this controller.
> +
> + sqsize: Shows the submission queue size for this controller.
> +
> +What: /sys/class/nvme/nvmeX/hostnqn
> +What: /sys/class/nvme/nvmeX/hostid
> +Date: February 2020
> +KernelVersion: 5.7
> +Contact: Sagi Grimberg <sagi@grimberg.me>
> +Description:
> + hostnqn: Shows the host NQN used by this fabrics controller.
> +
> + hostid: Shows the host identifier (UUID format) used by this
> + fabrics controller.
> +
> + Only available for fabrics controllers.
> +
> +What: /sys/class/nvme/nvmeX/fast_io_fail_tmo
> +Date: November 2020
> +KernelVersion: 5.11
> +Contact: Victor Gladkov <Victor.Gladkov@kioxia.com>
> +Description:
> + Shows or sets the fast I/O fail timeout in seconds. Reading
> + returns the timeout value, or "off" if disabled. Writing a
> + negative value disables the fast I/O fail. Only available
> + for fabrics controllers.
> +
> +What: /sys/class/nvme/nvmeX/kato
> +Date: April 2021
> +KernelVersion: 5.13
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows the Keep Alive Timeout value in milliseconds for
> + this controller.
> +
> +What: /sys/class/nvme/nvmeX/cmbloc
> +What: /sys/class/nvme/nvmeX/cmbsz
> +What: /sys/class/nvme/nvmeX/hmb
> +Date: July 2021
> +KernelVersion: 5.15
> +Contact: Keith Busch <kbusch@kernel.org>
> +Description:
> + cmbloc: Shows the CMBLOC register value.
> +
> + cmbsz: Shows the CMBSZ register value.
> +
> + cmbloc and cmbsz are only visible when the controller has
> + a CMB. PCI transport only.
> +
> + hmb: Shows or sets whether the Host Memory Buffer (HMB) is
> + enabled. Reading returns 1 (enabled) or 0 (disabled).
> + Writing 1 enables HMB; writing 0 disables it. Only
> + visible when the controller supports HMB (hmpre != 0).
> + PCI transport only.
> +
> +What: /sys/class/nvme-subsystem/nvme-subsysX/subsystype
> +Date: September 2021
> +KernelVersion: 5.16
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows the subsystem type. Possible values: "discovery",
> + "nvm", "reserved".
> +
> +What: /sys/class/nvme/nvmeX/cntrltype
> +What: /sys/class/nvme/nvmeX/dctype
> +Date: February 2022
> +KernelVersion: 5.18
> +Contact: Martin Belanger <martin.belanger@dell.com>
> +Description:
> + cntrltype: Shows the controller type. Possible values: "io",
> + "discovery", "admin", "reserved".
> +
> + dctype: Shows the discovery controller type. Possible values:
> + "none", "ddc", "cdc", "reserved".
> +
> +What: /sys/class/nvme/nvmeX/dhchap_secret
> +What: /sys/class/nvme/nvmeX/dhchap_ctrl_secret
> +Date: June 2022
> +KernelVersion: 6.0
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + dhchap_secret: Shows or sets the host DH-HMAC-CHAP secret
> + for this controller. Reading returns "none" if not set.
> + Writing must use the "DHHC-1:" key format and triggers
> + re-authentication.
> +
> + dhchap_ctrl_secret: Shows or sets the controller
> + DH-HMAC-CHAP secret for bidirectional authentication.
> + Same format as dhchap_secret.
> +
> + Only available when CONFIG_NVME_HOST_AUTH is enabled and
> + for fabrics controllers.
> +
> +What: /sys/class/nvme/nvmeX/tls_key
> +Date: August 2023
> +KernelVersion: 6.7
> +Contact: Hannes Reinecke <hare@suse.de>
> +Description:
> + Shows the serial of the currently active TLS PSK as hex.
> + Returns empty if no TLS key is active. Only available for
> + TCP controllers with TLS or secure concatenation enabled
> + (CONFIG_NVME_TCP_TLS).
> +
Can you keep the TLS attributes together?
That way it's easier to figure out which attributes one need to look at
when checking the TLS status.
> +What: /sys/class/nvme/nvmeX/passthru_err_log_enabled
> +What: /sys/block/nvmeXnY/passthru_err_log_enabled
> +Date: January 2024
> +KernelVersion: 6.8
> +Contact: Alan Adamson <alan.adamson@oracle.com>
> +Description:
> + Shows or sets whether passthrough error logging is enabled.
> + Reading returns "on" or "off". Writing accepts a boolean
> + value. The controller-level attribute controls admin
> + passthrough logging; the namespace-level attribute controls
> + I/O passthrough logging.
> +
> +What: /sys/block/nvmeXnY/csi
> +What: /sys/block/nvmeXnY/metadata_bytes
> +What: /sys/block/nvmeXnY/nuse
> +Date: December 2023
> +KernelVersion: 6.8
> +Contact: Daniel Wagner <dwagner@suse.de>
> +Description:
> + csi: Shows the Command Set Identifier for this namespace.
> +
> + metadata_bytes: Shows the metadata size in bytes.
> +
> + nuse: Shows the Namespace Utilization (NUSE) value. Reading
> + triggers an Identify Namespace command to refresh the
> + value (rate-limited to avoid excessive commands).
> +
> +What: /sys/block/nvmeXnY/queue_depth
> +Date: June 2024
> +KernelVersion: 6.11
> +Contact: Thomas Song <tsong@purestorage.com>
> +Description:
> + Shows the current active I/O count on this path's
> + controller. Returns empty if iopolicy is not "queue-depth".
> + Only visible on per-path devices.
> + Requires CONFIG_NVME_MULTIPATH.
> +
> +What: /sys/class/nvme/nvmeX/tls_configured_key
> +Date: July 2024
> +KernelVersion: 6.12
> +Contact: Hannes Reinecke <hare@kernel.org>
> +Description:
> + Shows the serial of the configured TLS key. Writing 0
> + triggers a PSK reauthentication (REPLACETLSPSK) with
> + the target. After reauthentication the returned serial
> + will be the new key. Only available for TCP controllers
> + with secure concatenation enabled (CONFIG_NVME_TCP_TLS).
> +
> +What: /sys/class/nvme/nvmeX/tls_keyring
> +Date: July 2024
> +KernelVersion: 6.12
> +Contact: Hannes Reinecke <hare@kernel.org>
> +Description:
> + Shows the TLS keyring description. Only available for TCP
> + controllers with a keyring configured (CONFIG_NVME_TCP_TLS).
> +
> +What: /sys/block/nvmeXnY/numa_nodes
> +Date: January 2025
> +KernelVersion: 6.15
> +Contact: Nilay Shroff <nilay@linux.ibm.com>
> +Description:
> + Shows the NUMA node mask for which this path is the
> + currently selected path. Returns empty if iopolicy is not
> + "numa". Only visible on per-path devices.
> + Requires CONFIG_NVME_MULTIPATH.
> +
> +What: /sys/block/nvmeXnY/delayed_removal_secs
> +Date: May 2025
> +KernelVersion: 6.16
> +Contact: Nilay Shroff <nilay@linux.ibm.com>
> +Description:
> + Shows or sets the delayed removal timeout in seconds for
> + the multipath head device. When nonzero, I/O is queued
> + instead of failed when all paths are gone, and head removal
> + is deferred. Only visible on multipath head devices.
> + Requires CONFIG_NVME_MULTIPATH.
> +
> +What: /sys/class/nvme/nvmeX/quirks
> Date: November 2025
> -KernelVersion: 6.19
> -Contact: Linux NVMe mailing list <linux-nvme@lists.infradead.org>
> +KernelVersion: 7.0
> +Contact: Maurizio Lombardi <mlombard@redhat.com>
> Description:
> - The file is avaliable when using a secure concatanation
> - connection to a NVMe target. Reading the file will return
> - the serial of the currently negotiated key.
> + Shows the active quirk names for this controller, one per
> + line. Shows "none" if no quirks are active.
> +
> +What: /sys/class/nvme/nvmeX/tls_mode
> +Date: April 2026
> +KernelVersion: 7.1
> +Contact: Daniel Wagner <wagi@kernel.org>
> +Description:
> + Shows the TLS mode: "tls" for direct TLS or "concat" for
> + secure concatenation. Only available for TCP controllers
> + with TLS or secure concatenation enabled
> + (CONFIG_NVME_TCP_TLS).
> +
> +What: /sys/class/nvme/nvmeX/admin_timeout
> +What: /sys/class/nvme/nvmeX/io_timeout
> +Date: May 2026
> +KernelVersion: 7.2
> +Contact: Maurizio Lombardi <mlombard@redhat.com>
> +Description:
> + admin_timeout: Shows or sets the admin command timeout in
> + milliseconds.
> +
> + io_timeout: Shows or sets the I/O command timeout in
> + milliseconds. Changes are propagated to all namespace
> + request queues.
> +
> + The value must be nonzero. Only writable after the
> + controller has been started at least once.
> +
> +What: /sys/class/nvme/nvmeX/diag/command_error_count
> +What: /sys/class/nvme/nvmeX/diag/reset_count
> +What: /sys/class/nvme/nvmeX/diag/reconnect_count
> +Date: May 2026
> +KernelVersion: 7.2
> +Contact: Nilay Shroff <nilay@linux.ibm.com>
> +Description:
> + Controller diagnostic counters.
> +
> + command_error_count: Admin command error counter.
> +
> + reset_count: Controller reset counter.
> +
> + reconnect_count: Accumulated reconnect counter. Only
> + available for fabrics controllers.
> +
> + All counters can be reset by writing a value.
> +
> +What: /sys/block/nvmeXnY/diag/command_retries_count
> +What: /sys/block/nvmeXnY/diag/command_error_count
> +What: /sys/block/nvmeXnY/diag/multipath_failover_count
> +What: /sys/block/nvmeXnY/diag/io_requeue_no_usable_path_count
> +What: /sys/block/nvmeXnY/diag/io_fail_no_available_path_count
> +Date: May 2026
> +KernelVersion: 7.2
> +Contact: Nilay Shroff <nilay@linux.ibm.com>
> +Description:
> + Namespace diagnostic counters.
> +
> + command_retries_count: I/O command retry counter. Only
> + visible on per-path devices.
> +
> + command_error_count: I/O command error counter. Only
> + visible on per-path devices.
> +
> + multipath_failover_count: Multipath failover counter.
> + Only visible on per-path devices. Requires
> + CONFIG_NVME_MULTIPATH.
> +
> + io_requeue_no_usable_path_count: Counter of I/Os requeued
> + because no usable path was available. Only visible on
> + multipath head devices. Requires CONFIG_NVME_MULTIPATH.
> +
> + io_fail_no_available_path_count: Counter of I/Os failed
> + because no available path existed. Only visible on
> + multipath head devices. Requires CONFIG_NVME_MULTIPATH.
>
> - Writing 0 to the file will trigger a PSK reauthentication
> - (REPLACETLSPSK) with the target. After a reauthentication
> - the value returned by tls_configured_key will be the new
> - serial.
> + All counters can be reset by writing a value.
Otherwise looks good.
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
next prev parent reply other threads:[~2026-07-02 6:31 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 3:48 [PATCH 0/3] nvme: add ABI documentation for sysfs and configfs interfaces Guixin Liu
2026-07-02 3:48 ` [PATCH 1/3] nvme: add ABI documentation for host sysfs interfaces Guixin Liu
2026-07-02 6:31 ` Hannes Reinecke [this message]
2026-07-02 6:50 ` Guixin Liu
2026-07-02 3:48 ` [PATCH 2/3] nvmet: add ABI documentation for target configfs interfaces Guixin Liu
2026-07-02 6:35 ` Hannes Reinecke
2026-07-02 6:51 ` Guixin Liu
2026-07-02 13:33 ` Daniel Wagner
2026-07-03 1:51 ` Guixin Liu
2026-07-02 3:48 ` [PATCH 3/3] MAINTAINERS: add missing NVMe documentation files Guixin Liu
2026-07-02 6:36 ` Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cd292576-e7f4-4ac3-8964-edb1bef05e78@suse.de \
--to=hare@suse.de \
--cc=axboe@kernel.dk \
--cc=dwagner@suse.de \
--cc=hch@lst.de \
--cc=john.g.garry@oracle.com \
--cc=kanie@linux.alibaba.com \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=nilay@linux.ibm.com \
--cc=oliver.yang@linux.alibaba.com \
--cc=sagi@grimberg.me \
--cc=xlpang@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.