libnvme(2)

hey bestie πŸ’– welcome to libnvme(2) β€” aka the API Manual. today we're decoding enum nvme_status_field, which is literally every part of the NVMe status field: the status code, the status code type, and any extra flags. no cap.

πŸŽ€ NAME πŸŽ€

enum nvme_status_field β€” this enum defines all the pieces of the nvme status field: the status code, the status code type, and additional flags. πŸ¦‹

✨ SYNOPSIS ✨

       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_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_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_BAD_ATTRIBUTES ,
           NVME_SC_INVALID_PI ,
           NVME_SC_READ_ONLY ,
           NVME_SC_CMD_SIZE_LIMIT_EXCEEDED ,
           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 πŸ’…

  • NVME_SCT_GENERIC β€” generic errors that apply to multiple opcodes, not just one. 🌈
  • NVME_SCT_CMD_SPECIFIC β€” errors associated to one 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 β€” your hardware brand's own lil' special sauce. 🏷️
  • NVME_SCT_MASK β€” the mask to get the value of the Status Code Type. 🎭
  • NVME_SCT_SHIFT β€” the shift value to get the value of the Status Code Type. ✨
  • NVME_SC_MASK β€” the mask to get the value of the status code. πŸ•΅οΈβ€β™€οΈ
  • NVME_SC_SHIFT β€” the shift value to get the value of the status code. πŸ”’
  • NVME_SC_SUCCESS β€” Successful Completion: the command completed without error. periodt. βœ…
  • 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: 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 attempted use of the Controller Memory Buffer is not supported by the controller. 🧠
  • NVME_SC_PRP_INVALID_OFFSET β€” PRP Offset Invalid: the Offset field for a PRP entry is invalid. πŸ“
  • NVME_SC_AWU_EXCEEDED β€” Atomic Write Unit Exceeded: the length specified exceeds the atomic write unit size. πŸ“
  • NVME_SC_OP_DENIED β€” Operation Denied: the command was denied due to lack of access rights. Refer to the appropriate security specification. πŸ”’
  • NVME_SC_SGL_INVALID_OFFSET β€” SGL Offset Invalid: that offset you put in a descriptor? not valid bestie πŸ’€. happens when you're doing capsule data transfers in NVMe over Fabrics implementations and you slide an invalid offset into the capsule.
  • NVME_SC_HOSTID_FORMAT β€” Host Identifier Inconsistent Format: the NVM subsystem caught you using 64-bit and 128-bit Host Identifier values at the same time on different controllers. pick a lane βœ‹.
  • NVME_SC_KAT_EXPIRED β€” Keep Alive Timer Expired: the Keep Alive Timer ran out. she's gone, she expired 🌸.
  • NVME_SC_KAT_INVALID β€” Keep Alive Timeout Invalid: the Keep Alive Timeout value you specified is simply not it.
  • NVME_SC_CMD_ABORTED_PREMEPT β€” Command Aborted due to Preempt and Abort: the command got aborted because of a Reservation Acquire command. rip.
  • NVME_SC_SANITIZE_FAILED β€” Sanitize Failed: the most recent sanitize operation flopped and no recovery action has been successfully completed yet 😭.
  • NVME_SC_SANITIZE_IN_PROGRESS β€” Sanitize In Progress: whatever function you're asking for (like, a command) is prohibited while a sanitize operation is in progress. just wait babes ⏳.
  • NVME_SC_SGL_INVALID_GRANULARITY β€” SGL Data Block Granularity Invalid: the Address alignment or the Length granularity for an SGL Data Block descriptor is invalid. off-grid, not slaying.
  • NVME_SC_CMD_IN_CMBQ_NOT_SUPP β€” Command Not Supported for Queue in CMB: this implementation doesn't support submitting the command to a Submission Queue in the Controller Memory Buffer, and it doesn't support command completion to a Completion Queue in the Controller Memory Buffer either. both, no πŸ’….
  • NVME_SC_NS_WRITE_PROTECTED β€” Namespace is Write Protected: command is prohibited while the namespace is write protected, which happens as a result of a change in the namespace write protection state as defined by the Namespace Write Protection State Machine. she said no 🚫.
  • NVME_SC_CMD_INTERRUPTED β€” Command Interrupted: command processing got interrupted and the controller can't successfully complete the command. the host should retry the command, fr fr πŸ”.
  • NVME_SC_TRAN_TPORT_ERROR β€” Transient Transport Error: a transient transport error was detected. if you retry on the same controller the command is likely to succeed. but listen β€” a command that fails with a transient transport error four or more times should be treated as a persistent transport error, which is not likely to succeed if retried on the same controller. so. know when to stop 😀.
  • NVME_SC_PROHIBITED_BY_CMD_AND_FEAT β€” Command Prohibited by Command and Feature Lockdown: the command was aborted because command execution is prohibited by the Command and Feature Lockdown. lockdown era πŸ”’.
  • NVME_SC_ADMIN_CMD_MEDIA_NOT_READY β€” Admin Command Media Not Ready: the Admin command needs access to media and the media is not ready. she's not up yet πŸ™ˆ.
  • NVME_SC_INVALID_KEY_TAG β€” the command was aborted because of an invalid KEYTAG field value. wrong tag, no entry πŸŽ€.
  • NVME_SC_HOST_DISPERSED_NS_NOT_ENABLED β€” the command is prohibited while the Host Disperesed Namespace Support (HDISNS) field is not set to 1h in the Host Behavior Support feature. (yes, "Disperesed" β€” we keep the original spelling, character for character, we don't fix it πŸ’–.)
  • NVME_SC_HOST_ID_NOT_INITIALIZED β€” Host Identifier Not Initialized. that's it, that's the whole thing. go initialize her ✨.
  • NVME_SC_INCORRECT_KEY β€” the command was aborted because the key associated with the KEYTAG field is incorrect. wrong key bestie πŸ”‘.
  • NVME_SC_FDP_DISABLED β€” the command is not allowed when Flexible Data Placement is disabled. fdp off = command off πŸ™…β€β™€οΈ.
  • NVME_SC_INVALID_PLACEMENT_HANDLE_LIST β€” the Placement Handle List is invalid, and hear me out, this happens because of an invalid Reclaim Unit Handle Identifier or because you gave a valid Reclaim Unit Handle Identifier but it's restricted β€” or the Placement Handle List number of entries exceeded the maximum number allowed. three ways to be wrong, iconic 😭.
  • NVME_SC_LBA_RANGE β€” LBA Out of Range: the command references an LBA that exceeds the size of the namespace. out of bounds, out of pocket πŸ“.
  • NVME_SC_CAP_EXCEEDED β€” Capacity Exceeded: executing the command has caused the capacity of the namespace to be exceeded. too much, too full πŸ«ƒ.
  • NVME_SC_NS_NOT_READY β€” Namespace Not Ready: the namespace is not ready to be accessed, and specifically because of a condition other than a condition that is reported as an Asymmetric Namespace Access condition. very specific about that ✍️.
  • NVME_SC_RESERVATION_CONFLICT β€” Reservation Conflict: the command was aborted due to a conflict with a reservation held on the accessed namespace. she's taken πŸ’….
  • NVME_SC_FORMAT_IN_PROGRESS β€” Format In Progress: a Format NVM command is in progress on the namespace. currently busy formatting, do not perceive her.
  • NVME_SC_INVALID_VALUE_SIZE β€” the value size is not valid. that one's pretty self-explanatory bestie.
  • NVME_SC_INVALID_KEY_SIZE β€” the KV key size is not valid. key too small, key too big, key just wrong πŸ“.
  • NVME_SC_KV_KEY_NOT_EXISTS β€” the Store If Key Exists (SIKE) bit is set to exists. yeah, that's what the original says. if you needed it to exist and it doesn't β€” this is your girl 😭.
  • NVME_SC_UNRECOVERED_ERROR β€” there was an unrecovered error when reading from the meidum. (original spelling, "meidum", we're keeping it, no cap πŸŽ€.) genuinely not a good time.
  • NVME_SC_KEY_EXISTS β€” the Store If No Key Exists (SINKE) bit is set to '1' in the Store Option field and the KV key exists. you wanted it to not exist. it exists. awkward πŸ’€.
  • NVME_SC_CQ_INVALID β€” Completion Queue Invalid: the Completion Queue identifier specified in the command does not exist. there is no such queue babes.
  • NVME_SC_QID_INVALID β€” Invalid Queue Identifier: creating the I/O Completion Queue failed because the queue identifier specified as part of the command was invalid. an invalid queue identifier is one that's currently in use, or one that's outside the range supported by the controller. two flavors of nope 🚫.
  • NVME_SC_QUEUE_SIZE β€” Invalid Queue Size: the host tried to create an I/O Completion Queue with an invalid number of entries. wrong amount, babe.
  • NVME_SC_ABORT_LIMIT β€” Abort Command Limit Exceeded: the number of concurrently outstanding Abort commands has blown past the limit indicated in the Identify Controller data structure. too many aborts at once πŸ”₯.
  • NVME_SC_ABORT_MISSING β€” Abort Command is missing: the abort command is missing. where is she. she's not here 😭.
  • NVME_SC_ASYNC_LIMIT β€” Asynchronous Event Request Limit Exceeded: the number of concurrently outstanding Asynchronous Event Request commands has been exceeded. again: too many, too at once βœ‹.
  • 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. also she cannot be written to, mind you.
  • NVME_SC_FIRMWARE_IMAGE β€” Invalid Firmware Image: the firmware image specified for activation is invalid and was not loaded by the controller. not loaded, not welcome πŸšͺ.
  • NVME_SC_INVALID_VECTOR β€” Invalid Interrupt Vector: creating the I/O Completion Queue failed because of an invalid interrupt vector specified as part of the command. vector said no πŸ’….
  • 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. so like, double trouble πŸ“„.
  • NVME_SC_INVALID_FORMAT β€” Invalid Format: the LBA Format specified is not supported. pick a supported one bestie πŸ’–.
  • NVME_SC_FW_NEEDS_CONV_RESET β€” Firmware Activation Requires Conventional Reset: the firmware commit was successful β€” slay β€” however, activation of the firmware image requires a conventional reset. congrats, now go reset πŸŽ‰.
  • NVME_SC_INVALID_QUEUE β€” Invalid Queue Deletion: invalid I/O Completion Queue specified to delete. can't delete what isn't right πŸ—‘οΈ.
  • NVME_SC_FEATURE_NOT_SAVEABLE β€” Feature Identifier Not Saveable: the Feature Identifier specified does not support a saveable value. no saving for you πŸ’ΎβŒ.
  • NVME_SC_FEATURE_NOT_CHANGEABLE β€” Feature Not Changeable: the Feature Identifier is not able to be changed. she's immutable babes πŸ”’.
  • 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. global girl 🌍.
  • 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. (yes, the original sentence just ends there β€” we keep it exactly, character for character, no embellishing πŸ’–.) you still need that reset though.
  • 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. no reset, no activation, periodt ✨.
  • NVME_SC_FW_NEEDS_MAX_TIME β€” Firmware Activation Requires Maximum Time Violation: the image specified, if it were activated immediately, would exceed the Maximum Time for Firmware Activation (MTFA) value reported in Identify Controller. too slow to be allowed right now ⏰.
  • NVME_SC_FW_ACTIVATE_PROHIBITED β€” Firmware Activation Prohibited: the image specified is being prohibited from activation by the controller for vendor specific reasons. vendor said no, and that's all we know πŸ€·β€β™€οΈ.
  • NVME_SC_OVERLAPPING_RANGE β€” Overlapping Range: the downloaded firmware image has overlapping ranges. she's stepping on her own toes 🦢.
  • NVME_SC_NS_INSUFFICIENT_CAP β€” Namespace Insufficient Capacity: creating the namespace requires more free space than is currently available. you're broke, capacity-wise πŸ’Έ.
  • NVME_SC_NS_ID_UNAVAILABLE β€” Namespace Identifier Unavailable: the number of namespaces supported has been exceeded. you ran out of namespace ids babe πŸŽ€.
  • NVME_SC_NS_ALREADY_ATTACHED β€” Namespace Already Attached: the controller is already attached to the namespace specified. she's already yours πŸ’….
  • NVME_SC_NS_IS_PRIVATE β€” Namespace Is Private: the namespace is private and is already attached to one controller. one controller only, that's the whole vibe πŸ”.
  • NVME_SC_NS_NOT_ATTACHED β€” Namespace Not Attached: the request to detach the controller could not be completed because the controller is not attached to the namespace. can't detach what was never attached bestie 😭.
  • NVME_SC_THIN_PROV_NOT_SUPP β€” Thin Provisioning Not Supported: thin provisioning is not supported by the controller. not supported, not happening 🚫.
  • NVME_SC_CTRL_LIST_INVALID β€” Controller List Invalid: the controller list provided contains invalid controller ids. bad ids, bad list πŸ“.
  • 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. she's doing her little tests, leave her be πŸ§ͺ.
  • NVME_SC_BP_WRITE_PROHIBITED β€” Boot Partition Write Prohibited: bestie the command is literally trying to modify a Boot Partition that's locked. Rude. Denied. πŸ’€
  • NVME_SC_INVALID_CTRL_ID β€” Invalid Controller Identifier 🫠
  • NVME_SC_INVALID_SEC_CTRL_STATE β€” Invalid Secondary Controller State
  • NVME_SC_INVALID_CTRL_RESOURCES β€” Invalid Number of Controller Resources
  • NVME_SC_INVALID_RESOURCE_ID β€” Invalid Resource Identifier
  • NVME_SC_PMR_SAN_PROHIBITED β€” Sanitize Prohibited While Persistent Memory Region is Enabled
  • NVME_SC_ANA_GROUP_ID_INVALID β€” ANA Group Identifier Invalid: the ANA Group Identifier (ANAGRPID) you specified is not supported in the command you just submitted. ✨
  • NVME_SC_ANA_ATTACH_FAILED β€” ANA Attach Failed: the controller is not attached to the namespace because of an ANA condition. It's giving uninvited πŸ₯²
  • NVME_SC_INSUFFICIENT_CAP β€” Insufficient Capacity: the operation you asked for needs more free space than is available rn. No room bestie, the closet is full πŸŽ€
  • NVME_SC_NS_ATTACHMENT_LIMIT_EXCEEDED β€” Namespace Attachment Limit Exceeded: attaching the ns to a controller pushes the max number of ns attachments allowed over the limit. Overflow era, but make it forbidden πŸ’…
  • 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 info you put in one or more extended discovery information entries just doesn't apply to the type of entity selected in the Entity Type (ETYPE) field of the Discovery Information Management command data portion's header. Mismatch, babes πŸ¦‹
  • NVME_SC_ZONING_DATA_STRUCT_LOCKED β€” the Zoning data structure you requested is locked on the CDC. πŸ”’
  • NVME_SC_ZONING_DATA_STRUCT_NOTFND β€” the Zoning data structure you requested does not exist on the CDC. Nowhere to be found, not even in the group chat πŸ™ˆ
  • NVME_SC_INSUFFICIENT_DISC_RES β€” the number of discover information entries you provided in the data portion of the Discovery Information Management command for a registration task (that's the TAS field cleared to 0h) exceeds the available capacity for new discovery information entries on the CDC or DDC. Heads up: this may be a transient condition, so don't spiral πŸŒ€
  • NVME_SC_REQSTD_FUNCTION_DISABLED β€” Fabric Zoning is not enabled on the CDC βœ‹
  • NVME_SC_ZONEGRP_ORIGINATOR_INVLD β€” the NQN in the ZoneGroup Originator field does not match the Host NQN the DDC used to connect to the CDC. Identity crisis, but make it an error 😭
  • NVME_SC_INVALID_CONTROLER_DATA_QUEUE β€” this error means the Controller Data Queue Identifier you specified is invalid for the controller processing the command. (Yes, the spelling CONTROLER is exactly as written. We don't fix it. We respect it. πŸ‘‘)
  • NVME_SC_NOT_ENOUGH_RESOURCES β€” this error means there are not enough resources in the controller to process the command. Low battery energy πŸͺ«
  • NVME_SC_CONTROLLER_SUSPENDED β€” the operation you asked for is not allowed if the specified controller is suspended 😴
  • NVME_SC_CONTROLLER_NOT_SUSPENDED β€” the operation you asked for is not allowed if the specified controller is not suspended. Yes, the opposite one. Both exist. Periodt πŸ’…
  • NVME_SC_CONTROLLER_DATA_QUEUE_FULL β€” the controller detected that a Controller Data Queue became full. Packed house πŸŽ€
  • 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. It's read only, bestie, reading is the whole vibe πŸ“–
  • NVME_SC_CMD_SIZE_LIMIT_EXCEEDED β€” Command Size Limit Exceeded
  • NVME_SC_INCOMPATIBLE_NS β€” Incompatible Namespace or Format: at least one source namespace and the destination namespace have incompatible formats. They're not compatible, it's not gonna work out πŸ˜”
  • 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. The fast lane was closed 🚧
  • NVME_SC_OVERLAPPING_IO_RANGE β€” Overlapping I/O Range: a source logical block range overlaps the destination logical block range. Personal space, please 🫢
  • 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 the host specified. 🌸
  • 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. (That's the whole sentence in the original, bestie, we keep it exactly as it is. Iconic minimalism ✨)
  • NVME_SC_CONNECT_RESTART_DISC β€” Connect Restart Discovery: the NVM subsystem you requested is not available. 🚫
  • NVME_SC_CONNECT_INVALID_HOST β€” Connect Invalid Host: either the host is 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. Either way, no entry 🎟️
  • NVME_SC_DISCONNECT_INVALID_QTYPE β€” Invalid Queue Type: the command was sent on the wrong queue type. Wrong group chat πŸ™ˆ
  • NVME_SC_DISCOVERY_RESTART β€” Discover Restart: the snapshot of the records is now invalid or out of date. Refresh the feed 🌈
  • NVME_SC_AUTH_REQUIRED β€” Authentication Required: NVMe in-band authentication is required and the queue has not yet been authenticated. Show your ID bestie πŸͺͺ
  • NVME_SC_ZNS_INVALID_OP_REQUEST β€” Invalid Zone Operation Request: the operation you requested is invalid. This may be because of various conditions, including: attempting 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. Several ways to fail, all valid πŸ’…
  • NVME_SC_ZNS_ZRWA_RESOURCES_UNAVAILABLE β€” ZRWA Resources Unavailable: no ZRWAs are available. Zero. None. πŸ“
  • NVME_SC_ZNS_BOUNDARY_ERROR β€” Zone Boundary Error: the command specifies logical blocks in more than one zone. Stay in your lane πŸ›£οΈ
  • NVME_SC_ZNS_FULL β€” Zone Is Full: the accessed zone is in the ZSF:Full state. 🈡
  • NVME_SC_ZNS_READ_ONLY β€” Zone Is Read Only: the accessed zone is in the ZSRO:Read Only state. πŸ“–
  • NVME_SC_ZNS_OFFLINE β€” Zone Is Offline: the accessed zone is in the ZSO:Offline state. πŸ’€
  • NVME_SC_ZNS_INVALID_WRITE β€” Zone Invalid Write: the write to a zone was not at the write pointer. πŸ“
  • NVME_SC_ZNS_TOO_MANY_ACTIVE β€” Too Many Active Zones: the controller does not allow additional active zones. πŸ”₯
  • NVME_SC_ZNS_TOO_MANY_OPENS β€” Too Many Open Zones: the controller does not allow additional open zones. πŸšͺ
  • NVME_SC_ZNS_INVAL_TRANSITION β€” Invalid Zone State Transition: the request is not a valid zone state transition. Glow-up denied πŸ¦‹
  • NVME_SC_WRITE_FAULT β€” Write Fault: the write data could not be committed to the media. 😭
  • NVME_SC_READ_ERROR β€” Unrecovered Read Error: the read data could not be recovered from the media. Gone gone πŸ’€
  • NVME_SC_GUARD_CHECK β€” End-to-end Guard Check Error: the command was aborted due to an end-to-end guard check failure. πŸ›‘οΈ
  • 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. 🏷️
  • 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. πŸ”–
  • NVME_SC_COMPARE_FAILED β€” Compare Failure: the command failed because of a miscompare during a Compare command. 😬
  • NVME_SC_ACCESS_DENIED β€” Access Denied: access to the namespace and/or LBA range is denied due to lack of access rights. 🚫
  • NVME_SC_UNWRITTEN_BLOCK β€” Deallocated or Unwritten Logical Block: the command failed because of an attempt to read from or verify an LBA range containing a deallocated or unwritten logical block. Nothing there bestie πŸ‘»
  • 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. πŸŽ—οΈ
  • NVME_SC_ANA_INTERNAL_PATH_ERROR β€” Internal Path Error: the command was not completed as a result of a controller internal error that is specific to the controller processing the command. It's not you, it's the controller 🫠
  • NVME_SC_ANA_PERSISTENT_LOSS β€” Asymmetric Access Persistent Loss: the requested function (like a command) is not able to be performed as a result of the relationship between the controller and the namespace being in the ANA Persistent Loss state. πŸ’”
  • NVME_SC_ANA_INACCESSIBLE β€” Asymmetric Access Inaccessible: the requested function (like a command) is not able to be performed as a result of the relationship between the controller and the namespace being in the ANA Inaccessible state. πŸšͺ
  • NVME_SC_ANA_TRANSITION β€” Asymmetric Access Transition: the requested function (like a command) is not able to be performed as a result of the relationship between the controller and the namespace transitioning between Asymmetric Namespace Access states. Mid-transition, don't perceive me πŸŒ€
  • NVME_SC_CTRL_PATH_ERROR β€” Controller Pathing Error: a pathing error was detected by the controller. πŸ›€οΈ
  • NVME_SC_HOST_PATH_ERROR β€” Host Pathing Error: a pathing error was detected by the host. πŸ›€οΈ
  • NVME_SC_CMD_ABORTED_BY_HOST β€” Command Aborted By Host: the command was aborted as a result of host action. 😢
  • NVME_SC_CRD β€” Mask to get value of Command Retry Delay index 🎭
  • NVME_SC_MORE β€” More bit. If set, there's more status information for this command as part of the Error Information log that may be retrieved with the Get Log Page command. There's always more lore πŸ“œ

okay and that's still not the whole list bestie, we're literally still going β€” hold on πŸ’–

  • NVME_SC_DNR β€” bestie this is the Do Not Retry bit and she is very serious about her job πŸ’…. If this bit is set, then if that same command gets re-submitted to any controller in the NVM subsystem, that re-submitted command is expected to fail 😭. No take-backs, no "but I asked nicely", no second chances β€” the whole NVM subsystem is on the same page about it, fr fr. Like, that command is a flop in every controller's eyes πŸ‘‘.

and that's the whole enum, bestie, we literally ate that entire status field one flag at a time πŸ“βœ¨

thanks for staying to the end of this absolute unit of a page, ily 🫢 source/version: enum nvme_status_field, dated July 2026, living in libnvme(2) πŸ’– go write some slay kernel-adjacent NVMe code πŸ’–

πŸ“¦ where this page comes from