libnvme(9)

πŸ“¦ version 3.2, in arch rolling

πŸ’– NAME πŸ’–

okay so bestie, this is libnvme(9), the API manual, and the main character is enum nvme_status_field πŸ’…. It defines all parts of the nvme status field: status code, status code type, and additional flags. That's the whole vibe, and yes, it ate ✨.

✨ SYNOPSIS ✨

here's the enum in all its glory, copied exactly because code is sacred 🫢:

       enum nvme_status_field {
           NVME_SCT_GENERIC ,
           NVME_SCT_CMD_SPECIFIC ,
           NVME_SCT_MEDIA ,
           NVME_SCT_PATH ,
           NVME_SCT_VS ,
           NVME_SCT_MASK ,
           NVME_SCT_SHIFT ,
           NVME_SC_MASK ,
           NVME_SC_SHIFT ,
           NVME_SC_SUCCESS ,
           NVME_SC_INVALID_OPCODE ,
           NVME_SC_INVALID_FIELD ,
           NVME_SC_CMDID_CONFLICT ,
           NVME_SC_DATA_XFER_ERROR ,
           NVME_SC_POWER_LOSS ,
           NVME_SC_INTERNAL ,
           NVME_SC_ABORT_REQ ,
           NVME_SC_ABORT_QUEUE ,
           NVME_SC_FUSED_FAIL ,
           NVME_SC_FUSED_MISSING ,
           NVME_SC_INVALID_NS ,
           NVME_SC_CMD_SEQ_ERROR ,
           NVME_SC_SGL_INVALID_LAST ,
           NVME_SC_SGL_INVALID_COUNT ,
           NVME_SC_SGL_INVALID_DATA ,
           NVME_SC_SGL_INVALID_METADATA ,
           NVME_SC_SGL_INVALID_TYPE ,
           NVME_SC_CMB_INVALID_USE ,
           NVME_SC_PRP_INVALID_OFFSET ,
           NVME_SC_AWU_EXCEEDED ,
           NVME_SC_OP_DENIED ,
           NVME_SC_SGL_INVALID_OFFSET ,
           NVME_SC_HOSTID_FORMAT ,
           NVME_SC_KAT_EXPIRED ,
           NVME_SC_KAT_INVALID ,
           NVME_SC_CMD_ABORTED_PREMEPT ,
           NVME_SC_SANITIZE_FAILED ,
           NVME_SC_SANITIZE_IN_PROGRESS ,
           NVME_SC_SGL_INVALID_GRANULARITY ,
           NVME_SC_CMD_IN_CMBQ_NOT_SUPP ,
           NVME_SC_NS_WRITE_PROTECTED ,
           NVME_SC_CMD_INTERRUPTED ,
           NVME_SC_TRAN_TPORT_ERROR ,
           NVME_SC_PROHIBITED_BY_CMD_AND_FEAT ,
           NVME_SC_ADMIN_CMD_MEDIA_NOT_READY ,
           NVME_SC_INVALID_KEY_TAG ,
           NVME_SC_HOST_DISPERSED_NS_NOT_ENABLED ,
           NVME_SC_HOST_ID_NOT_INITIALIZED ,
           NVME_SC_INCORRECT_KEY ,
           NVME_SC_FDP_DISABLED ,
           NVME_SC_INVALID_PLACEMENT_HANDLE_LIST ,
           NVME_SC_SANITIZE_NS_FAILED ,
           NVME_SC_SANITIZE_NS_IN_PROGRESS ,
           NVME_SC_FAILED_TO_RESTORE_CONFIG ,
           NVME_SC_LBA_RANGE ,
           NVME_SC_CAP_EXCEEDED ,
           NVME_SC_NS_NOT_READY ,
           NVME_SC_RESERVATION_CONFLICT ,
           NVME_SC_FORMAT_IN_PROGRESS ,
           NVME_SC_INVALID_VALUE_SIZE ,
           NVME_SC_INVALID_KEY_SIZE ,
           NVME_SC_KV_KEY_NOT_EXISTS ,
           NVME_SC_UNRECOVERED_ERROR ,
           NVME_SC_KEY_EXISTS ,
           NVME_SC_CQ_INVALID ,
           NVME_SC_QID_INVALID ,
           NVME_SC_QUEUE_SIZE ,
           NVME_SC_ABORT_LIMIT ,
           NVME_SC_ABORT_MISSING ,
           NVME_SC_ASYNC_LIMIT ,
           NVME_SC_FIRMWARE_SLOT ,
           NVME_SC_FIRMWARE_IMAGE ,
           NVME_SC_INVALID_VECTOR ,
           NVME_SC_INVALID_LOG_PAGE ,
           NVME_SC_INVALID_FORMAT ,
           NVME_SC_FW_NEEDS_CONV_RESET ,
           NVME_SC_INVALID_QUEUE ,
           NVME_SC_FEATURE_NOT_SAVEABLE ,
           NVME_SC_FEATURE_NOT_CHANGEABLE ,
           NVME_SC_FEATURE_NOT_PER_NS ,
           NVME_SC_FW_NEEDS_SUBSYS_RESET ,
           NVME_SC_FW_NEEDS_RESET ,
           NVME_SC_FW_NEEDS_MAX_TIME ,
           NVME_SC_FW_ACTIVATE_PROHIBITED ,
           NVME_SC_OVERLAPPING_RANGE ,
           NVME_SC_NS_INSUFFICIENT_CAP ,
           NVME_SC_NS_ID_UNAVAILABLE ,
           NVME_SC_NS_ALREADY_ATTACHED ,
           NVME_SC_NS_IS_PRIVATE ,
           NVME_SC_NS_NOT_ATTACHED ,
           NVME_SC_THIN_PROV_NOT_SUPP ,
           NVME_SC_CTRL_LIST_INVALID ,
           NVME_SC_SELF_TEST_IN_PROGRESS ,
           NVME_SC_BP_WRITE_PROHIBITED ,
           NVME_SC_INVALID_CTRL_ID ,
           NVME_SC_INVALID_SEC_CTRL_STATE ,
           NVME_SC_INVALID_CTRL_RESOURCES ,
           NVME_SC_INVALID_RESOURCE_ID ,
           NVME_SC_PMR_SAN_PROHIBITED ,
           NVME_SC_ANA_GROUP_ID_INVALID ,
           NVME_SC_ANA_ATTACH_FAILED ,
           NVME_SC_INSUFFICIENT_CAP ,
           NVME_SC_NS_ATTACHMENT_LIMIT_EXCEEDED ,
           NVME_SC_PROHIBIT_CMD_EXEC_NOT_SUPPORTED ,
           NVME_SC_IOCS_NOT_SUPPORTED ,
           NVME_SC_IOCS_NOT_ENABLED ,
           NVME_SC_IOCS_COMBINATION_REJECTED ,
           NVME_SC_INVALID_IOCS ,
           NVME_SC_ID_UNAVAILABLE ,
           NVME_SC_INVALID_DISCOVERY_INFO ,
           NVME_SC_ZONING_DATA_STRUCT_LOCKED ,
           NVME_SC_ZONING_DATA_STRUCT_NOTFND ,
           NVME_SC_INSUFFICIENT_DISC_RES ,
           NVME_SC_REQSTD_FUNCTION_DISABLED ,
           NVME_SC_ZONEGRP_ORIGINATOR_INVLD ,
           NVME_SC_INVALID_HOST ,
           NVME_SC_INVALID_NVM_SUBSYSTEM ,
           NVME_SC_INVALID_CONTROLER_DATA_QUEUE ,
           NVME_SC_NOT_ENOUGH_RESOURCES ,
           NVME_SC_CONTROLLER_SUSPENDED ,
           NVME_SC_CONTROLLER_NOT_SUSPENDED ,
           NVME_SC_CONTROLLER_DATA_QUEUE_FULL ,
           NVME_SC_EXCEEDS_MAX_NS_SANITIZE ,
           NVME_SC_MFG_DEFAULT_PERSONALITY_REQUIRED ,
           NVME_SC_INVALID_POWER_LIMIT ,
           NVME_SC_CROSS_CTRL_RESET_IN_PROGRESS ,
           NVME_SC_CROSS_CTRL_RESET_LOG_FULL ,
           NVME_SC_CROSS_CTRL_RESET_LIMIT_EXCEEDED ,
           NVME_SC_CONTROLLER_ACTIVE ,
           NVME_SC_INVALID_EXPORTED_ASSOCIATION ,
           NVME_SC_INVALID_EXPORTED_CONFIG_STATE ,
           NVME_SC_BAD_ATTRIBUTES ,
           NVME_SC_INVALID_PI ,
           NVME_SC_READ_ONLY ,
           NVME_SC_CMD_SIZE_LIMIT_EXCEEDED ,
           NVME_SC_INVALID_CMD_ID ,
           NVME_SC_INCOMPATIBLE_NS ,
           NVME_SC_FAST_COPY_NOT_POSSIBLE ,
           NVME_SC_OVERLAPPING_IO_RANGE ,
           NVME_SC_INSUFFICIENT_RESOURCES ,
           NVME_SC_CONNECT_FORMAT ,
           NVME_SC_CONNECT_CTRL_BUSY ,
           NVME_SC_CONNECT_INVALID_PARAM ,
           NVME_SC_CONNECT_RESTART_DISC ,
           NVME_SC_CONNECT_INVALID_HOST ,
           NVME_SC_DISCONNECT_INVALID_QTYPE ,
           NVME_SC_DISCOVERY_RESTART ,
           NVME_SC_AUTH_REQUIRED ,
           NVME_SC_ZNS_INVALID_OP_REQUEST ,
           NVME_SC_ZNS_ZRWA_RESOURCES_UNAVAILABLE ,
           NVME_SC_ZNS_BOUNDARY_ERROR ,
           NVME_SC_ZNS_FULL ,
           NVME_SC_ZNS_READ_ONLY ,
           NVME_SC_ZNS_OFFLINE ,
           NVME_SC_ZNS_INVALID_WRITE ,
           NVME_SC_ZNS_TOO_MANY_ACTIVE ,
           NVME_SC_ZNS_TOO_MANY_OPENS ,
           NVME_SC_ZNS_INVAL_TRANSITION ,
           NVME_SC_WRITE_FAULT ,
           NVME_SC_READ_ERROR ,
           NVME_SC_GUARD_CHECK ,
           NVME_SC_APPTAG_CHECK ,
           NVME_SC_REFTAG_CHECK ,
           NVME_SC_COMPARE_FAILED ,
           NVME_SC_ACCESS_DENIED ,
           NVME_SC_UNWRITTEN_BLOCK ,
           NVME_SC_STORAGE_TAG_CHECK ,
           NVME_SC_ANA_INTERNAL_PATH_ERROR ,
           NVME_SC_ANA_PERSISTENT_LOSS ,
           NVME_SC_ANA_INACCESSIBLE ,
           NVME_SC_ANA_TRANSITION ,
           NVME_SC_CTRL_PATH_ERROR ,
           NVME_SC_HOST_PATH_ERROR ,
           NVME_SC_CMD_ABORTED_BY_HOST ,
           NVME_SC_CRD ,
           NVME_SC_MORE ,
           NVME_SC_DNR

       };

πŸŽ€ Constants πŸŽ€

okay, constant time. These are the constants and their descriptions, no skipping, every detail kept 🫢.

  • NVME_SCT_GENERIC β€” generic errors applicable to multiple opcodes ✨
  • NVME_SCT_CMD_SPECIFIC β€” errors associated to a specific opcode πŸ’…
  • NVME_SCT_MEDIA β€” errors associated with media and data integrity πŸŽ€
  • NVME_SCT_PATH β€” errors associated with the paths connection 🌈
  • NVME_SCT_VS β€” vendor specific errors πŸ‘‘
  • NVME_SCT_MASK β€” mask to get the value of the Status Code Type 🎭
  • NVME_SCT_SHIFT β€” shift value to get the value of the Status Code Type πŸ”€
  • NVME_SC_MASK β€” mask to get the value of the status code 🎭
  • NVME_SC_SHIFT β€” shift value to get the value of the status code πŸ”€
  • NVME_SC_SUCCESS β€” successful completion: the command completed without error ✨
  • NVME_SC_INVALID_OPCODE β€” invalid command opcode: a reserved coded value or an unsupported value in the command opcode field πŸ’€
  • NVME_SC_INVALID_FIELD β€” invalid field in command: a reserved coded value or an unsupported value in a defined field πŸ™ˆ
  • NVME_SC_CMDID_CONFLICT β€” command ID conflict: the command identifier is already in use 😭
  • NVME_SC_DATA_XFER_ERROR β€” data transfer error: transferring the data or metadata associated with a command experienced an error πŸ’”
  • NVME_SC_POWER_LOSS β€” commands aborted due to power loss notification: it indicates that the command was aborted due to a power loss notification ⚑
  • NVME_SC_INTERNAL β€” internal error: the command was not completed successfully due to an internal error 🫠
  • NVME_SC_ABORT_REQ β€” command abort requested: the command was aborted due to an Abort command being received that specified the Submission Queue Identifier and Command Identifier of this command πŸ›‘
  • NVME_SC_ABORT_QUEUE β€” command aborted due to SQ deletion: the command was aborted due to a Delete I/O Submission Queue request received for the Submission Queue to which the command was submitted πŸ—‘οΈ
  • NVME_SC_FUSED_FAIL β€” command aborted due to failed fused command: the command was aborted due to the other command in a fused operation failing πŸ’₯
  • NVME_SC_FUSED_MISSING β€” aborted due to missing fused command: the fused command was aborted due to the adjacent submission queue entry not containing a fused command that is the other command πŸ«₯
  • NVME_SC_INVALID_NS β€” invalid namespace or format: the namespace or the format of that namespace is invalid 🚫
  • NVME_SC_CMD_SEQ_ERROR β€” command sequence error: the command was aborted due to a protocol violation in a multi-command sequence 🧨
  • NVME_SC_SGL_INVALID_LAST β€” invalid SGL segment descriptor: the command includes an invalid SGL Last Segment or SGL Segment descriptor 🧩
  • NVME_SC_SGL_INVALID_COUNT β€” invalid number of SGL descriptors: there is an SGL Last Segment descriptor or an SGL Segment descriptor in a location other than the last descriptor of a segment based on the length indicated πŸ”’
  • NVME_SC_SGL_INVALID_DATA β€” data SGL length invalid: this may occur if the length of a Data SGL is too short. This may occur if the length of a Data SGL is too long and the controller does not support SGL transfers longer than the amount of data to be transferred as indicated in the SGL Support field of the Identify Controller data structure πŸ“
  • NVME_SC_SGL_INVALID_METADATA β€” metadata SGL length invalid: this may occur if the length of a Metadata SGL is too short. This may occur if the length of a Metadata SGL is too long and the controller does not support SGL transfers longer than the amount of data to be transferred as indicated in the SGL Support field of the Identify Controller data structure πŸ“
  • NVME_SC_SGL_INVALID_TYPE β€” SGL descriptor type invalid: the type of an SGL Descriptor is a type that is not supported by the controller 🚷
  • NVME_SC_CMB_INVALID_USE β€” Invalid Use of Controller Memory Buffer πŸ’… the controller is literally saying "bestie, I do not support that use of the Controller Memory Buffer," so the attempted use just isn't a thing it can do.
  • NVME_SC_PRP_INVALID_OFFSET β€” PRP Offset Invalid πŸŽ€ the Offset field for a PRP entry is invalid, no cap.
  • NVME_SC_AWU_EXCEEDED β€” Atomic Write Unit Exceeded ✨ the length you specified exceeds the atomic write unit size β€” too much, babe.
  • NVME_SC_OP_DENIED β€” Operation Denied 🫢 the command got denied due to lack of access rights. check the appropriate security specification, iykyk.
  • NVME_SC_SGL_INVALID_OFFSET β€” SGL Offset Invalid πŸ¦‹ the offset specified in a descriptor is invalid. this one can pop up when using capsules for data transfers in NVMe over Fabrics implementations and an invalid offset in the capsule is specified.
  • NVME_SC_HOSTID_FORMAT β€” Host Identifier Inconsistent Format πŸ’€ the NVM subsystem detected the simultaneous use of 64-bit and 128-bit Host Identifier values on different controllers. messy.
  • NVME_SC_KAT_EXPIRED β€” Keep Alive Timer Expired ⏰ the Keep Alive Timer expired, periodt.
  • NVME_SC_KAT_INVALID β€” Keep Alive Timeout Invalid πŸ™ˆ the Keep Alive Timeout value you specified is invalid.
  • NVME_SC_CMD_ABORTED_PREMEPT β€” Command Aborted due to Preempt and Abort πŸ”₯ the command was aborted due to a Reservation Acquire command.
  • NVME_SC_SANITIZE_FAILED β€” Sanitize Failed 😭 the most recent sanitize operation failed and no recovery action has been successfully completed.
  • NVME_SC_SANITIZE_IN_PROGRESS β€” Sanitize In Progress 🧚 the requested function (e.g., command) is prohibited while a sanitize operation is in progress β€” just wait, bestie.
  • NVME_SC_SGL_INVALID_GRANULARITY β€” SGL Data Block Granularity Invalid πŸŽ€ the Address alignment or Length granularity for an SGL Data Block descriptor is invalid.
  • NVME_SC_CMD_IN_CMBQ_NOT_SUPP β€” Command Not Supported for Queue in CMB πŸ’… the implementation does not support submission of the command to a Submission Queue in the Controller Memory Buffer or command completion to a Completion Queue in the Controller Memory Buffer.
  • NVME_SC_NS_WRITE_PROTECTED β€” Namespace is Write Protected πŸ”’ the command is prohibited while the namespace is write protected as a result of a change in the namespace write protection state as defined by the Namespace Write Protection State Machine.
  • NVME_SC_CMD_INTERRUPTED β€” Command Interrupted 😭 command processing was interrupted and the controller is unable to successfully complete the command. the host should retry the command β€” literally just try again.
  • NVME_SC_TRAN_TPORT_ERROR β€” <orange>Transient Transport Error</orange> πŸ¦‹ a transient transport error was detected. if the command is retried on the same controller, the command is likely to succeed. a command that fails with a transient transport error four or more times should be treated as a persistent transport error that is not likely to succeed if retried on the same controller β€” so like, know when to stop.
  • NVME_SC_PROHIBITED_BY_CMD_AND_FEAT β€” Command Prohibited by Command and Feature Lockdown 🫢 the command was aborted due to command execution being prohibited by the Command and Feature Lockdown.
  • NVME_SC_ADMIN_CMD_MEDIA_NOT_READY β€” Admin Command Media Not Ready ⭐ the Admin command requires access to media and the media is not ready. it's giving "not yet, love."
  • NVME_SC_INVALID_KEY_TAG β€” invalid KEYTAG πŸŽ€ the command was aborted due to an invalid KEYTAG field value.
  • NVME_SC_HOST_DISPERSED_NS_NOT_ENABLED β€” Host Dispersed Namespace Support not enabled πŸ’€ the command is prohibited while the Host Dispersed Namespace Support (HDISNS) field is not set to 1h in the Host Behavior Support feature.
  • NVME_SC_HOST_ID_NOT_INITIALIZED β€” Host Identifier Not Initialized πŸ™ˆ yeah, that's it β€” Host Identifier Not Initialized.
  • NVME_SC_INCORRECT_KEY β€” incorrect key πŸ”‘ the command was aborted due to the key associated with the KEYTAG field being incorrect.
  • NVME_SC_FDP_DISABLED β€” Flexible Data Placement disabled 🧚 command is not allowed when Flexible Data Placement is disabled.
  • NVME_SC_INVALID_PLACEMENT_HANDLE_LIST β€” invalid Placement Handle List πŸ’… the Placement Handle List is invalid due to invalid Reclaim Unit Handle Identifier or valid Reclaim Unit Handle Identifier but restricted, or the Placement Handle List number of entries exceeded the maximum number allowed.
  • NVME_SC_SANITIZE_NS_FAILED β€” Sanitize Namespace Failed 😭 the most recent namespace sanitize operation failed and no recovery action has been successfully completed.
  • NVME_SC_SANITIZE_NS_IN_PROGRESS β€” Sanitize Namespace In Progress ⏳ the requested function (e.g., command) is prohibited while a namespace sanitize operation is in progress.
  • NVME_SC_FAILED_TO_RESTORE_CONFIG β€” Failed to Restore Configuration 🫠 the command was aborted due to the command failing to restore configuration.
  • NVME_SC_LBA_RANGE β€” LBA Out of Range πŸŽ€ the command references an LBA that exceeds the size of the namespace β€” out of bounds, bestie.
  • NVME_SC_CAP_EXCEEDED β€” Capacity Exceeded πŸ”₯ execution of the command has caused the capacity of the namespace to be exceeded.
  • NVME_SC_NS_NOT_READY β€” Namespace Not Ready 🌸 the namespace is not ready to be accessed as a result of a condition other than a condition that is reported as an Asymmetric Namespace Access condition.
  • NVME_SC_RESERVATION_CONFLICT β€” Reservation Conflict πŸ’€ the command was aborted due to a conflict with a reservation held on the accessed namespace.
  • NVME_SC_FORMAT_IN_PROGRESS β€” Format In Progress ⏰ a Format NVM command is in progress on the namespace.
  • NVME_SC_INVALID_VALUE_SIZE β€” invalid value size πŸ™ˆ the value size is not valid.
  • NVME_SC_INVALID_KEY_SIZE β€” invalid KV key size πŸ”‘ the KV key size is not valid.
  • NVME_SC_KV_KEY_NOT_EXISTS β€” KV key does not exist πŸ¦‹ the Store If Key Exists (SIKE) bit is set to exists.
  • NVME_SC_UNRECOVERED_ERROR β€” unrecovered error 😭 there was an unrecovered error when reading from the medium.
  • NVME_SC_KEY_EXISTS β€” KV key exists πŸŽ€ the Store If No Key Exists (SINKE) bit is set to '1' in the Store Option field and the KV key exists.
  • NVME_SC_CQ_INVALID β€” Completion Queue Invalid πŸ’… the Completion Queue identifier specified in the command does not exist.
  • NVME_SC_QID_INVALID β€” Invalid Queue Identifier 🧚 the creation of the I/O Completion Queue failed due to an invalid queue identifier specified as part of the command. an invalid queue identifier is one that is currently in use or one that is outside the range supported by the controller.
  • NVME_SC_QUEUE_SIZE β€” Invalid Queue Size πŸŽ€ the host attempted to create an I/O Completion Queue with an invalid number of entries.
  • NVME_SC_ABORT_LIMIT β€” Abort Command Limit Exceeded πŸ”₯ the number of concurrently outstanding Abort commands has exceeded the limit indicated in the Identify Controller data structure.
  • NVME_SC_ABORT_MISSING β€” Abort Command is missing πŸ™ˆ the abort command is missing. where is she.
  • NVME_SC_ASYNC_LIMIT β€” Asynchronous Event Request Limit Exceeded ⭐ the number of concurrently outstanding Asynchronous Event Request commands has been exceeded.
  • NVME_SC_FIRMWARE_SLOT β€” Invalid Firmware Slot πŸ¦‹ the firmware slot indicated is invalid or read only. this error is indicated if the firmware slot exceeds the number supported.
  • NVME_SC_FIRMWARE_IMAGE β€” Invalid Firmware Image πŸŽ€ the firmware image specified for activation is invalid and not loaded by the controller.
  • NVME_SC_INVALID_VECTOR β€” Invalid Interrupt Vector πŸ’… the creation of the I/O Completion Queue failed due to an invalid interrupt vector specified as part of the command.
  • NVME_SC_INVALID_LOG_PAGE β€” Invalid Log Page πŸ“„ the log page indicated is invalid. this error condition is also returned if a reserved log page is requested.
  • NVME_SC_INVALID_FORMAT β€” Invalid Format 😭 the LBA Format specified is not supported.
  • NVME_SC_FW_NEEDS_CONV_RESET β€” Firmware Activation Requires Conventional Reset πŸ”„ the firmware commit was successful, however, activation of the firmware image requires a conventional reset.
  • NVME_SC_INVALID_QUEUE β€” Invalid Queue Deletion πŸ’€ invalid I/O Completion Queue specified to delete.
  • NVME_SC_FEATURE_NOT_SAVEABLE β€” Feature Identifier Not Saveable 🫢 the Feature Identifier specified does not support a saveable value.
  • NVME_SC_FEATURE_NOT_CHANGEABLE β€” Feature Not Changeable πŸŽ€ the Feature Identifier is not able to be changed.
  • NVME_SC_FEATURE_NOT_PER_NS β€” Feature Not Namespace Specific 🌸 the Feature Identifier specified is not namespace specific. the Feature Identifier settings apply across all namespaces.
  • NVME_SC_FW_NEEDS_SUBSYS_RESET β€” Firmware Activation Requires NVM Subsystem Reset πŸ”„ the firmware commit was successful, however, activation of the firmware image requires an NVM Subsystem.
  • NVME_SC_FW_NEEDS_RESET β€” Firmware Activation Requires Controller Level Reset πŸ’… the firmware commit was successful; however, the image specified does not support being activated without a reset.
  • NVME_SC_FW_NEEDS_MAX_TIME β€” Firmware Activation Requires Maximum Time Violation ⏰ the image specified if activated immediately would exceed the Maximum Time for Firmware Activation (MTFA) value reported in Identify Controller.
  • NVME_SC_FW_ACTIVATE_PROHIBITED β€” Firmware Activation Prohibited 🚫 the image specified is being prohibited from activation by the controller for vendor specific reasons.
  • NVME_SC_OVERLAPPING_RANGE β€” Overlapping Range πŸ¦‹ the downloaded firmware image has overlapping ranges β€” messy, but make it firmware.

okay bestie we are still in the error-code zone and this list is LONG, but every single one matters so buckle up πŸ’…

  • NVME_SC_NS_INSUFFICIENT_CAP β€” Namespace Insufficient Capacity: creating the namespace needs more free space than is currently available. sorry babe, no room πŸ’€
  • NVME_SC_NS_ID_UNAVAILABLE β€” Namespace Identifier Unavailable: you've exceeded the number of namespaces supported. the limit said no πŸŽ€
  • NVME_SC_NS_ALREADY_ATTACHED β€” Namespace Already Attached: the controller is already attached to the namespace you specified. it's giving committed πŸ’…
  • NVME_SC_NS_IS_PRIVATE β€” Namespace Is Private: the namespace is private and already attached to one controller. exclusive, no plus-ones πŸ”’
  • NVME_SC_NS_NOT_ATTACHED β€” Namespace Not Attached: your detach request could not be completed because the controller is not attached to the namespace. can't break up a relationship that doesn't exist 😭
  • NVME_SC_THIN_PROV_NOT_SUPP β€” Thin Provisioning Not Supported: the controller simply does not support thin provisioning. periodt ✨
  • NVME_SC_CTRL_LIST_INVALID β€” Controller List Invalid: the controller list provided contains invalid controller ids.
  • NVME_SC_SELF_TEST_IN_PROGRESS β€” Device Self-test In Progress: the controller or NVM subsystem already has a device self-test operation in process. one self-test at a time, queen πŸ‘‘
  • NVME_SC_BP_WRITE_PROHIBITED β€” Boot Partition Write Prohibited: the command is trying to modify a locked Boot Partition. not today πŸŽ€
  • NVME_SC_INVALID_CTRL_ID β€” Invalid Controller Identifier: that's the whole note, no extra lore, iykyk.
  • NVME_SC_INVALID_SEC_CTRL_STATE β€” Invalid Secondary Controller State: same deal, label only.
  • NVME_SC_INVALID_CTRL_RESOURCES β€” Invalid Number of Controller Resources: again, just the label, nothing more in the source.
  • NVME_SC_INVALID_RESOURCE_ID β€” Invalid Resource Identifier: yep, label only πŸ’€
  • NVME_SC_PMR_SAN_PROHIBITED β€” Sanitize Prohibited While Persistent Memory Region is Enabled: literally what it says, bestie.
  • NVME_SC_ANA_GROUP_ID_INVALID β€” ANA Group Identifier Invalid: the ANA Group Identifier (ANAGRPID) you specified is not supported in the submitted command.
  • NVME_SC_ANA_ATTACH_FAILED β€” ANA Attach Failed: the controller is not attached to the namespace as a result of an ANA condition.
  • NVME_SC_INSUFFICIENT_CAP β€” Insufficient Capacity: the requested operation requires more free space than is currently available.
  • NVME_SC_NS_ATTACHMENT_LIMIT_EXCEEDED β€” Namespace Attachment Limit Exceeded: attaching the ns to a controller causes the max number of ns attachments allowed to be exceeded. greedy behaviour πŸ™ˆ
  • NVME_SC_PROHIBIT_CMD_EXEC_NOT_SUPPORTED β€” Prohibition of Command Execution Not Supported.
  • NVME_SC_IOCS_NOT_SUPPORTED β€” I/O Command Set Not Supported.
  • NVME_SC_IOCS_NOT_ENABLED β€” I/O Command Set Not Enabled.
  • NVME_SC_IOCS_COMBINATION_REJECTED β€” I/O Command Set Combination Rejected.
  • NVME_SC_INVALID_IOCS β€” Invalid I/O Command Set.
  • NVME_SC_ID_UNAVAILABLE β€” Identifier Unavailable.
  • NVME_SC_INVALID_DISCOVERY_INFO β€” the discovery information provided in one or more extended discovery information entries is not applicable for the type of entity selected in the Entity Type (ETYPE) field of the Discovery Information Management command data portion's header. mismatch vibes 😭
  • NVME_SC_ZONING_DATA_STRUCT_LOCKED β€” the requested Zoning data structure is locked on the CDC.
  • NVME_SC_ZONING_DATA_STRUCT_NOTFND β€” the requested Zoning data structure does not exist on the CDC. (yes, NOTFND is spelled like that, it's canon, don't come for me)
  • NVME_SC_INSUFFICIENT_DISC_RES β€” the number of discover information entries provided in the data portion of the Discovery Information Management command for a registration task (i.e., TAS field cleared to 0h) exceeds the available capacity for new discovery information entries on the CDC or DDC. this may be a transient condition πŸ‘€
  • NVME_SC_REQSTD_FUNCTION_DISABLED β€” Fabric Zoning is not enabled on the CDC.
  • NVME_SC_ZONEGRP_ORIGINATOR_INVLD β€” the NQN contained in the ZoneGroup Originator field does not match the Host NQN used by the DDC to connect to the CDC.
  • NVME_SC_INVALID_HOST β€” Invalid Host: the Manage Exported NVM Subsystem Send Grant/Revoke Host Access operation specified a host entry that could not be processed.
  • NVME_SC_INVALID_NVM_SUBSYSTEM β€” Invalid NVM Subsystem: the Manage Exported NVM Subsystem Send Grant/Revoke Host Access operation specified an Exported NVM Subsystem entry that could not be processed.
  • NVME_SC_INVALID_CONTROLER_DATA_QUEUE β€” (yup, CONTROLER, keeping the spelling exactly as-is 🫢) this error indicates that the specified Controller Data Queue Identifier is invalid for the controller processing the command.
  • NVME_SC_NOT_ENOUGH_RESOURCES β€” this error indicates that there are not enough resources in the controller to process the command. broke behaviour πŸ’€
  • NVME_SC_CONTROLLER_SUSPENDED β€” the operation requested is not allowed if the specified controller is suspended.
  • NVME_SC_CONTROLLER_NOT_SUSPENDED β€” the operation requested is not allowed if the specified controller is not suspended. opposite gatekeeping, love that for us ✨
  • NVME_SC_CONTROLLER_DATA_QUEUE_FULL β€” the controller detected that a Controller Data Queue became full.
  • NVME_SC_EXCEEDS_MAX_NS_SANITIZE β€” Request Exceeds Maximum Namespace Sanitize Operations In Progress (Sanitize Namespace command specific status). 🚨 numerically identical to NVME_SC_FW_NEEDS_MAX_TIME (Firmware Commit) β€” command specific status is scoped per opcode, so this collision is expected; use only when decoding the completion of a Sanitize Namespace command.
  • NVME_SC_MFG_DEFAULT_PERSONALITY_REQUIRED β€” Manufacturing Default Personality Required: the Firmware Commit command was aborted due to the firmware image being incompatible with the current personality settings; the settings of each affected personality are required to be compatible with the current personality settings for the firmware image to be committed. it's giving "we need to talk about your personality settings" 😭
  • NVME_SC_INVALID_POWER_LIMIT β€” Invalid Power Limit: the power limit specified for the Power Limit feature is invalid because that power limit prohibits all operational power states.
  • NVME_SC_CROSS_CTRL_RESET_IN_PROGRESS β€” Cross-Controller Reset in Progress: there is already an in-progress Cross-Controller Reset operation that this controller caused to be initiated for the Impacted Controller.
  • NVME_SC_CROSS_CTRL_RESET_LOG_FULL β€” Cross-Controller Reset Log Page Full: the Cross-Controller Reset log page already contains the maximum number of entries. no more entries, the log said what it said πŸ’…
  • NVME_SC_CROSS_CTRL_RESET_LIMIT_EXCEEDED β€” Cross-Controller Reset Limit Exceeded: the number of simultaneous in-progress Cross-Controller Reset operations this controller caused to be initiated is greater than or equal to the Cross-Controller Reset Limit field in the Identify Controller data structure.
  • NVME_SC_CONTROLLER_ACTIVE β€” Controller Active: for a Manage Exported NVM Subsystem Send Delete operation, an Underlying Controller in the specified Exported NVM Subsystem is able to process commands. For an Associate Controllers operation, an Underlying Controller being associated with an Exported NVM Subsystem was in a state that could process commands.
  • NVME_SC_INVALID_EXPORTED_ASSOCIATION β€” Invalid Exported Association: an Underlying Controller being associated with an Exported NVM Subsystem has Underlying Namespaces attached that are not associated with that Exported NVM Subsystem, or the association otherwise conflicts with an existing one.
  • NVME_SC_INVALID_EXPORTED_CONFIG_STATE β€” Invalid Exported Configuration State: invalid data was found in the Exported Configuration State provided with the Set Exported Configuration State management operation.
  • NVME_SC_BAD_ATTRIBUTES β€” Conflicting Dataset Management Attributes.
  • NVME_SC_INVALID_PI β€” Invalid Protection Information.
  • NVME_SC_READ_ONLY β€” Attempted Write to Read Only Range. read only means read only bestie 🌸
  • NVME_SC_CMD_SIZE_LIMIT_EXCEEDED β€” Command Size Limit Exceeded.
  • NVME_SC_INVALID_CMD_ID β€” Invalid Command ID: for the Cancel command, the specified Command Identifier (CID) matched the CID of the Cancel command itself. iconic self-own 🫠
  • NVME_SC_INCOMPATIBLE_NS β€” Incompatible Namespace or Format: at least one source namespace and the destination namespace have incompatible formats.
  • NVME_SC_FAST_COPY_NOT_POSSIBLE β€” Fast Copy Not Possible: the Fast Copy Only (FCO) bit was set to β€˜1’ in a Source Range entry and the controller was not able to use fast copy operations to copy the specified data.
  • NVME_SC_OVERLAPPING_IO_RANGE β€” Overlapping I/O Range: a source logical block range overlaps the destination logical block range.
  • NVME_SC_INSUFFICIENT_RESOURCES β€” Insufficient Resources: a resource shortage prevented the controller from performing the requested copy.
  • NVME_SC_CONNECT_FORMAT β€” Incompatible Format: the NVM subsystem does not support the record format specified by the host.
  • NVME_SC_CONNECT_CTRL_BUSY β€” Controller Busy: the controller is already associated with a host. taken πŸ’€
  • NVME_SC_CONNECT_INVALID_PARAM β€” Connect Invalid Parameters: one or more of the command parameters. (the source note literally trails off right there β€” not me, i'm just the messenger πŸ™ˆ)
  • NVME_SC_CONNECT_RESTART_DISC β€” Connect Restart Discovery: the NVM subsystem requested is not available.
  • NVME_SC_CONNECT_INVALID_HOST β€” Connect Invalid Host: the host is either not allowed to establish an association to any controller in the NVM subsystem, or the host is not allowed to establish an association to the specified controller.
  • NVME_SC_DISCONNECT_INVALID_QTYPE β€” Invalid Queue Type: the command was sent on the wrong queue type. wrong chat, bestie 🫢
  • NVME_SC_DISCOVERY_RESTART β€” Discover Restart: bestie, the snapshot of the records is now invalid or out of date. it's giving expired story πŸ’€
  • NVME_SC_AUTH_REQUIRED β€” Authentication Required: NVMe in-band authentication is required and the queue has not yet been authenticated. no ID, no entry, periodt πŸͺͺ
  • NVME_SC_ZNS_INVALID_OP_REQUEST β€” Invalid Zone Operation Request: the operation requested is invalid. this can happen for a bunch of reasons, like: trying to allocate a ZRWA when a zone is not in the ZSE:Empty state; or an invalid Flush Explicit ZRWA Range Send Zone Action operation. literally wrong place, wrong time 😭
  • NVME_SC_ZNS_ZRWA_RESOURCES_UNAVAILABLE β€” ZRWA Resources Unavailable: there are simply no ZRWAs available. empty shelves, sold out, come back later 🫢
  • NVME_SC_ZNS_BOUNDARY_ERROR β€” Zone Boundary Error: the command specifies logical blocks in more than one zone. pick a zone and commit, bestie πŸ’…
  • NVME_SC_ZNS_FULL β€” Zone Is Full: the accessed zone is sitting in the ZSF:Full state. no room, no cap 🈡
  • NVME_SC_ZNS_READ_ONLY β€” Zone Is Read Only: the accessed zone is in the ZSRO:Read Only state. look, don't touch ✨
  • NVME_SC_ZNS_OFFLINE β€” Zone Is Offline: the accessed zone is in the ZSO:Offline state. she's not taking visitors rn πŸŒ™
  • NVME_SC_ZNS_INVALID_WRITE β€” Zone Invalid Write: the write to a zone was not at the write pointer. missed the spot entirely πŸ™ˆ
  • NVME_SC_ZNS_TOO_MANY_ACTIVE β€” Too Many Active Zones: the controller does not allow additional active zones. the group chat is full πŸ’€
  • NVME_SC_ZNS_TOO_MANY_OPENS β€” Too Many Open Zones: the controller does not allow additional open zones. too many tabs open, close some 😭
  • NVME_SC_ZNS_INVAL_TRANSITION β€” Invalid Zone State Transition: the request is not a valid zone state transition. that glow-up pipeline does not exist, sorry πŸ¦‹
  • NVME_SC_WRITE_FAULT β€” Write Fault: the write data could not be committed to the media. she tried and she failed πŸ˜”
  • NVME_SC_READ_ERROR β€” Unrecovered Read Error: the read data could not be recovered from the media. gone, and not in a cute way πŸ’€
  • NVME_SC_GUARD_CHECK β€” End-to-end Guard Check Error: the command was aborted due to an end-to-end guard check failure. the vibes did not check out 🚩
  • NVME_SC_APPTAG_CHECK β€” End-to-end Application Tag Check Error: the command was aborted due to an end-to-end application tag check failure. wrong tag, wrong girl 🏷️
  • NVME_SC_REFTAG_CHECK β€” End-to-end Reference Tag Check Error: the command was aborted due to an end-to-end reference tag check failure. the reference didn't match, blocked 🚫
  • NVME_SC_COMPARE_FAILED β€” Compare Failure: the command failed due to a miscompare during a Compare command. they were NOT the same picture, bestie 😭
  • NVME_SC_ACCESS_DENIED β€” Access Denied: access to the namespace and/or LBA range is denied due to lack of access rights. you're not on the list, respectfully πŸšͺ
  • NVME_SC_UNWRITTEN_BLOCK β€” Deallocated or Unwritten Logical Block: the command failed because something tried to read from or verify an LBA range that contains a deallocated or unwritten logical block. reading a blank page fr fr πŸ“„
  • NVME_SC_STORAGE_TAG_CHECK β€” End-to-End Storage Tag Check Error: the command was aborted due to an end-to-end storage tag check failure. tag said no πŸ’…
  • NVME_SC_ANA_INTERNAL_PATH_ERROR β€” Internal Path Error: the command was not completed as the result of a controller internal error that's specific to the controller processing the command. it's a her problem, not a you problem 🫠
  • NVME_SC_ANA_PERSISTENT_LOSS β€” Asymmetric Access Persistent Loss: the requested function (e.g., command) can't be performed because of the relationship between the controller and the namespace being in the ANA Persistent Loss state. it's not working out between them πŸ’”
  • NVME_SC_ANA_INACCESSIBLE β€” Asymmetric Access Inaccessible: the requested function (e.g., command) can't be performed because of the relationship between the controller and the namespace being in the ANA Inaccessible state. left on read πŸ“΅
  • NVME_SC_ANA_TRANSITION β€” Asymmetric Access Transition: the requested function (e.g., command) can't be performed because of the relationship between the controller and the namespace transitioning between Asymmetric Namespace Access states. she's going through a phase, give her a sec πŸŒ€
  • NVME_SC_CTRL_PATH_ERROR β€” Controller Pathing Error: a pathing error was detected by the controller. the controller noticed the wrong turn πŸ‘€
  • NVME_SC_HOST_PATH_ERROR β€” Host Pathing Error: a pathing error was detected by the host. this time the host caught it πŸ™ƒ
  • NVME_SC_CMD_ABORTED_BY_HOST β€” Command Aborted By Host: the command was aborted as a result of host action. host said "nvm" and meant it βœ‹
  • NVME_SC_CRD β€” a mask to get the value of the Command Retry Delay index. it's giving "which one is it" energy, use it to extract that value πŸ”
  • NVME_SC_MORE β€” More bit. if it's set, there's more status information for this command as part of the Error Information log, and you can retrieve it with the Get Log Page command. there's always more tea β˜•
  • NVME_SC_DNR β€” Do Not Retry bit. if it's set, and if the same command gets re-submitted to any controller in the NVM subsystem, then that re-submitted command is expected to fail. so like… don't bother, bestie, it's not gonna happen πŸ›‘

okay that's genuinely the whole thing, you made it to the end, so proud of you πŸ₯ΉπŸ’– this was enum nvme_status_field from libnvme(9), dated October 2026. go forth and read your status codes with confidence, you absolute icon πŸ‘‘βœ¨πŸŽ€

πŸ“¦ where this page comes from