1
0
Fork 0

Merging upstream version 1.10.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-16 10:50:54 +01:00
parent 05578a6ab9
commit a02d194ad0
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
946 changed files with 4401 additions and 1290 deletions

View file

@ -98,6 +98,55 @@ Fabrics-specific definitions.
.. c:struct:: nvme_fabrics_uri
Parsed URI structure
**Definition**
::
struct nvme_fabrics_uri {
char *scheme;
char *protocol;
char *userinfo;
char *host;
int port;
char **path_segments;
char *query;
char *fragment;
};
**Members**
``scheme``
Scheme name (typically 'nvme')
``protocol``
Optional protocol/transport (e.g. 'tcp')
``userinfo``
Optional user information component of the URI authority
``host``
Host transport address
``port``
The port subcomponent or 0 if not specified
``path_segments``
NULL-terminated array of path segments
``query``
Optional query string component (separated by '?')
``fragment``
Optional fragment identifier component (separated by '#')
.. c:function:: const char * nvmf_trtype_str (__u8 trtype)
Decode TRTYPE field
@ -434,6 +483,38 @@ An nvm namespace qualified name string based on the machine
identifier, or NULL if not successful.
.. c:function:: char * nvmf_hostnqn_generate_from_hostid (char *hostid)
Generate a host nqn from host identifier
**Parameters**
``char *hostid``
Host identifier
**Description**
If **hostid** is NULL, the function generates it based on the machine
identifier.
**Return**
On success, an NVMe Qualified Name for host identification. This
name is based on the given host identifier. On failure, NULL.
.. c:function:: char * nvmf_hostid_generate ()
Generate a machine specific host identifier
**Parameters**
**Return**
On success, an identifier string based on the machine identifier to
be used as NVMe Host Identifier, or NULL on failure.
.. c:function:: char * nvmf_hostnqn_from_file ()
Reads the host nvm qualified name from the config default location
@ -543,3 +624,39 @@ tasks are supported: register, deregister, and registration update.
0 on success; on failure -1 is returned and errno is set
.. c:function:: struct nvme_fabrics_uri * nvme_parse_uri (const char *str)
Parse the URI string
**Parameters**
``const char *str``
URI string
**Description**
Parse the URI string as defined in the NVM Express Boot Specification.
Supported URI elements looks as follows:
nvme+tcp://user**host**:port/subsys_nqn/nid?query=val#fragment
**Return**
:c:type:`nvme_fabrics_uri` structure on success; NULL on failure with errno
set.
.. c:function:: void nvme_free_uri (struct nvme_fabrics_uri *uri)
Free the URI structure
**Parameters**
``struct nvme_fabrics_uri *uri``
:c:type:`nvme_fabrics_uri` structure
**Description**
Free an :c:type:`nvme_fabrics_uri` structure.

View file

@ -2022,7 +2022,7 @@ This log consists of a header describing the log and descriptors containing
the asymmetric namespace access information for ANA Groups that contain
namespaces that are attached to the controller processing the command.
See :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@ -2030,7 +2030,7 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
.. c:function:: int nvme_get_log_ana_groups (int fd, bool rae, __u32 len, struct nvme_ana_group_desc *log)
.. c:function:: int nvme_get_log_ana_groups (int fd, bool rae, __u32 len, struct nvme_ana_log *log)
Retrieve Asymmetric Namespace Access groups only log page
@ -2045,12 +2045,12 @@ The nvme command status if a response was received (see
``__u32 len``
The allocated length of the log page
``struct nvme_ana_group_desc *log``
``struct nvme_ana_log *log``
User address to store the ana group log
**Description**
See :c:type:`struct nvme_ana_group_desc <nvme_ana_group_desc>` for the definition of the returned structure.
See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@ -2058,6 +2058,46 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
.. c:function:: int nvme_get_ana_log_atomic (int fd, bool rgo, bool rae, unsigned int retries, struct nvme_ana_log *log, __u32 *len)
Retrieve Asymmetric Namespace Access log page atomically
**Parameters**
``int fd``
File descriptor of nvme device
``bool rgo``
Whether to retrieve ANA groups only (no NSIDs)
``bool rae``
Whether to retain asynchronous events
``unsigned int retries``
The maximum number of times to retry on log page changes
``struct nvme_ana_log *log``
Pointer to a buffer to receive the ANA log page
``__u32 *len``
Input: the length of the log page buffer.
Output: the actual length of the ANA log page.
**Description**
See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
If successful, returns 0 and sets *len to the actual log page length.
If unsuccessful, returns the nvme command status if a response was received
(see :c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
Sets errno = EINVAL if retries == 0.
Sets errno = EAGAIN if unable to read the log page atomically
because chgcnt changed during each of the retries attempts.
Sets errno = ENOSPC if the full log page does not fit in the provided buffer.
.. c:function:: int nvme_get_log_lba_status (int fd, bool rae, __u64 offset, __u32 len, void *log)
Retrieve LBA Status

View file

@ -205,6 +205,23 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
.. c:function:: size_t nvme_get_ana_log_len_from_id_ctrl (const struct nvme_id_ctrl *id_ctrl, bool rgo)
Retrieve maximum possible ANA log size
**Parameters**
``const struct nvme_id_ctrl *id_ctrl``
Controller identify data
``bool rgo``
If true, return maximum log page size without NSIDs
**Return**
A byte limit on the size of the controller's ANA log page
.. c:function:: int nvme_get_ana_log_len (int fd, size_t *analen)
Retrieve size of the current ANA log
@ -699,6 +716,26 @@ The string containing the TLS identity. It is the responsibility
of the caller to free the returned string.
.. c:function:: long nvme_revoke_tls_key (const char *keyring, const char *key_type, const char *identity)
Revoke TLS key from keyring
**Parameters**
``const char *keyring``
Keyring to use
``const char *key_type``
Type of the key to revoke
``const char *identity``
Key identity string
**Return**
0 on success or on failure -1 with errno set.
.. c:function:: char * nvme_export_tls_key (const unsigned char *key_data, int key_len)
Export a TLS key

View file

@ -28,6 +28,30 @@ logging functions
Sets the default logging variables for the library.
.. c:function:: void nvme_init_default_logging (FILE *fp, int lvl, bool log_pid, bool log_tstamp)
Initialize default (fallback) logging
**Parameters**
``FILE *fp``
File descriptor for logging messages
``int lvl``
Logging level to set
``bool log_pid``
Boolean to enable logging of the PID
``bool log_tstamp``
Boolean to enable logging of the timestamp
**Description**
Sets the default logging settings for the library in case the root object
is absent.
.. c:function:: int nvme_get_logging_level (nvme_root_t r, bool *log_pid, bool *log_tstamp)
Get current logging level
@ -72,6 +96,9 @@ will be set as well. This means the global root object is always pointing to
the latest created root object. Note the first **nvme_free_tree** call will reset
the global root object.
This function is deprecated. Use nvme_init_default_logging or/and
nvme_init_logging instead.
.. c:function:: void nvme_set_debug (bool debug)
@ -84,7 +111,7 @@ the global root object.
**Description**
Don't use it, it's debricated.
This function is deprecated. Use nvme_init_default_logging instead.
.. c:function:: bool nvme_get_debug (void)
@ -99,7 +126,7 @@ Don't use it, it's debricated.
**Description**
Don't use it, it's debricated.
This function is deprecated. Use nvme_get_logging_level instead.
**Return**

View file

@ -8,8 +8,8 @@ if want_docs != 'false'
if want_docs_build
kernel_doc = find_program(top_source_dir + 'scripts/kernel-doc')
conf = configuration_data()
conf.set('SYSCONFDIR', sysconfdir)
rst_conf = configuration_data()
rst_conf.set('SYSCONFDIR', sysconfdir)
if want_docs == 'all' or want_docs == 'rst' or want_docs == 'html'
foreach apif : api_files
@ -17,7 +17,7 @@ if want_docs != 'false'
subst = configure_file(
input: afile,
output: '@BASENAME@.subst',
configuration: conf)
configuration: rst_conf)
rst = custom_target(
apif.underscorify() + '_rst',
input: subst,

View file

@ -2459,7 +2459,7 @@ This log consists of a header describing the log and descriptors containing
the asymmetric namespace access information for ANA Groups that contain
namespaces that are attached to the controller processing the command.
See :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@ -2495,6 +2495,46 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
.. c:function:: int nvme_mi_admin_get_ana_log_atomic (nvme_mi_ctrl_t ctrl, bool rgo, bool rae, unsigned int retries, struct nvme_ana_log *log, __u32 *len)
Retrieve Asymmetric Namespace Access log page atomically
**Parameters**
``nvme_mi_ctrl_t ctrl``
Controller to query
``bool rgo``
Whether to retrieve ANA groups only (no NSIDs)
``bool rae``
Whether to retain asynchronous events
``unsigned int retries``
The maximum number of times to retry on log page changes
``struct nvme_ana_log *log``
Pointer to a buffer to receive the ANA log page
``__u32 *len``
Input: the length of the log page buffer.
Output: the actual length of the ANA log page.
**Description**
See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
If successful, returns 0 and sets *len to the actual log page length.
If unsuccessful, returns the nvme command status if a response was received
(see :c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
Sets errno = EINVAL if retries == 0.
Sets errno = EAGAIN if unable to read the log page atomically
because chgcnt changed during each of the retries attempts.
Sets errno = ENOSPC if the full log page does not fit in the provided buffer.
.. c:function:: int nvme_mi_admin_get_log_lba_status (nvme_mi_ctrl_t ctrl, bool rae, __u64 offset, __u32 len, void *log)
Retrieve LBA Status

View file

@ -53,6 +53,20 @@ Sets the managing application string for **r**.
Returns the managing application string for **r** or NULL if not set.
.. c:function:: void nvme_root_skip_namespaces (nvme_root_t r)
Skip namespace scanning
**Parameters**
``nvme_root_t r``
:c:type:`nvme_root_t` object
**Description**
Sets a flag to skip namespaces during scanning.
.. c:function:: void nvme_root_release_fds (nvme_root_t r)
Close all opened file descriptors in the tree
@ -229,14 +243,62 @@ true if PDC is enabled for **h**, else false
**Description**
Initializes the default host object based on the values in
/etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to **r**.
Initializes the default host object based on the hostnqn/hostid
values returned by nvme_host_get_ids() and attaches it to **r**.
**Return**
:c:type:`nvme_host_t` object
.. c:function:: int nvme_host_get_ids (nvme_root_t r, char *hostnqn_arg, char *hostid_arg, char **hostnqn, char **hostid)
Retrieve host ids from various sources
**Parameters**
``nvme_root_t r``
:c:type:`nvme_root_t` object
``char *hostnqn_arg``
Input hostnqn (command line) argument
``char *hostid_arg``
Input hostid (command line) argument
``char **hostnqn``
Output hostnqn
``char **hostid``
Output hostid
**Description**
nvme_host_get_ids figures out which hostnqn/hostid is to be used.
There are several sources where this information can be retrieved.
The order is:
- Start with informartion from DMI or device-tree
- Override hostnqn and hostid from /etc/nvme files
- Override hostnqn or hostid with values from JSON
configuration file. The first host entry in the file is
considered the default host.
- Override hostnqn or hostid with values from the command line
(**hostnqn_arg**, **hostid_arg**).
If the IDs are still NULL after the lookup algorithm, the function
will generate random IDs.
The function also verifies that hostnqn and hostid matches. The Linux
NVMe implementation expects a 1:1 matching between the IDs.
**Return**
0 on success (**hostnqn** and **hostid** contain valid strings
which the caller needs to free), -1 otherwise and errno is set.
.. c:function:: nvme_subsystem_t nvme_first_subsystem (nvme_host_t h)
Start subsystem iterator

View file

@ -2148,6 +2148,12 @@ power scale value
``NVME_CTRL_CTRATT_ELBAS``
Extended LBA Formats supported
``NVME_CTRL_CTRATT_MEM``
MDTS and Size Limits Exclude Metadata supported
``NVME_CTRL_CTRATT_HMBR``
HMB Restrict Non-Operational Power State Access
``NVME_CTRL_CTRATT_FDPS``
Flexible Data Placement supported
@ -3162,6 +3168,34 @@ power scale value
Mask to get the protection information format for
the extended LBA format.
``NVME_NVM_ELBAF_QPIF_MASK``
Mask to get the Qualified Protection Information
Format.
.. c:enum:: nvme_nvm_id_ns_pif
This field indicates the type of the Protection Information Format
**Constants**
``NVME_NVM_PIF_16B_GUARD``
16-bit Guard Protection Information Format
``NVME_NVM_PIF_32B_GUARD``
32-bit Guard Protection Information Format
``NVME_NVM_PIF_64B_GUARD``
64-bit Guard Protection Information Format
``NVME_NVM_PIF_QTYPE``
If Qualified Protection Information Format Supports
and Protection Information Format is set to 3, then
protection information format is taken from Qualified
Protection Information Format field.
@ -3759,7 +3793,9 @@ power scale value
__u8 dmrl;
__le32 dmrsl;
__le64 dmsl;
__u8 rsvd16[4080];
__u8 rsvd16[2];
__le16 aocs;
__u8 rsvd20[4076];
};
**Members**
@ -3783,7 +3819,13 @@ power scale value
Dataset Management Size Limit
``rsvd16``
reserved
Reserved
``aocs``
Admin Optional Command Support
``rsvd20``
Reserved
@ -3800,9 +3842,13 @@ power scale value
struct nvme_nvm_id_ns {
__le64 lbstm;
__u8 pic;
__u8 rsvd9[3];
__u8 pifa;
__u8 rsvd10[2];
__le32 elbaf[64];
__u8 rsvd268[3828];
__le32 npdgl;
__u8 rsvd272[20];
__le32 tlbaag;
__u8 rsvd296[3800];
};
**Members**
@ -3813,13 +3859,25 @@ power scale value
``pic``
Protection Information Capabilities
``rsvd9``
``pifa``
Protection Information Format Attribute
``rsvd10``
Reserved
``elbaf``
List of Extended LBA Format Support
``rsvd268``
``npdgl``
Namespace Preferred Deallocate Granularity Large
``rsvd272``
Reserved
``tlbaag``
Tracked LBA Allocation Granularity
``rsvd296``
Reserved
@ -5821,6 +5879,12 @@ bytes, in size. This log captures the controllers internal state.
``NVME_PEL_THERMAL_EXCURSION_EVENT``
Thermal Excursion Event
``NVME_PEL_VENDOR_SPECIFIC_EVENT``
Vendor Specific Event
``NVME_PEL_TCG_DEFINED_EVENT``
TCG Defined Event
@ -6395,16 +6459,21 @@ bytes, in size. This log captures the controllers internal state.
.. c:enum:: nvme_lba_status_atype
Potentially Unrecoverable LBAs
Action type the controller uses to return LBA status
**Constants**
``NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED``
Potentially Unrecoverable LBAs
``NVME_LBA_STATUS_ATYPE_ALLOCATED``
Return tracked allocated LBAs status
``NVME_LBA_STATUS_ATYPE_SCAN_TRACKED``
Potentially Unrecoverable LBAs
associated with physical storage
``NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED``
Perform scan and return Untracked and
Tracked Potentially Unrecoverable LBAs
status
``NVME_LBA_STATUS_ATYPE_TRACKED``
Return Tracked Potentially Unrecoverable
LBAs associated with physical storage
@ -13061,6 +13130,9 @@ true if **status** is of the specified type and value
``nvme_cmd_resv_release``
Reservation Release
``nvme_cmd_cancel``
Cancel
``nvme_cmd_copy``
Copy