summaryrefslogtreecommitdiffstats
path: root/nvme-status.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2022-07-14 18:28:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2022-07-16 15:12:07 +0000
commit589986012c4b3ab68e299a2eadca18f90080113b (patch)
treef29a53b04a1950cdddae69344bccb3f0146fa728 /nvme-status.c
parentReleasing debian version 1.16-4. (diff)
downloadnvme-cli-589986012c4b3ab68e299a2eadca18f90080113b.tar.xz
nvme-cli-589986012c4b3ab68e299a2eadca18f90080113b.zip
Merging upstream version 2.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'nvme-status.c')
-rw-r--r--nvme-status.c190
1 files changed, 0 insertions, 190 deletions
diff --git a/nvme-status.c b/nvme-status.c
deleted file mode 100644
index 270eb06..0000000
--- a/nvme-status.c
+++ /dev/null
@@ -1,190 +0,0 @@
-#include <linux/types.h>
-#include <stdbool.h>
-#include <errno.h>
-
-#include "nvme.h"
-#include "nvme-status.h"
-
-static inline __u8 nvme_generic_status_to_errno(__u16 status)
-{
- switch (status) {
- case NVME_SC_INVALID_OPCODE:
- case NVME_SC_INVALID_FIELD:
- case NVME_SC_INVALID_NS:
- case NVME_SC_SGL_INVALID_LAST:
- case NVME_SC_SGL_INVALID_COUNT:
- case NVME_SC_SGL_INVALID_DATA:
- case NVME_SC_SGL_INVALID_METADATA:
- case NVME_SC_SGL_INVALID_TYPE:
- case NVME_SC_SGL_INVALID_OFFSET:
- case NVME_SC_CMB_INVALID_USE:
- case NVME_SC_PRP_INVALID_OFFSET:
- return EINVAL;
- case NVME_SC_CMDID_CONFLICT:
- return EADDRINUSE;
- case NVME_SC_DATA_XFER_ERROR:
- case NVME_SC_INTERNAL:
- case NVME_SC_SANITIZE_FAILED:
- return EIO;
- case NVME_SC_POWER_LOSS:
- case NVME_SC_ABORT_REQ:
- case NVME_SC_ABORT_QUEUE:
- case NVME_SC_FUSED_FAIL:
- case NVME_SC_FUSED_MISSING:
- return EWOULDBLOCK;
- case NVME_SC_CMD_SEQ_ERROR:
- return EILSEQ;
- case NVME_SC_SANITIZE_IN_PROGRESS:
- case NVME_SC_FORMAT_IN_PROGRESS:
- return EINPROGRESS;
- case NVME_SC_NS_WRITE_PROTECTED:
- case NVME_SC_NS_NOT_READY:
- case NVME_SC_RESERVATION_CONFLICT:
- return EACCES;
- case NVME_SC_LBA_RANGE:
- return EREMOTEIO;
- case NVME_SC_CAP_EXCEEDED:
- return ENOSPC;
- case NVME_SC_OPERATION_DENIED:
- return EPERM;
- }
-
- return EIO;
-}
-
-static inline __u8 nvme_cmd_specific_status_to_errno(__u16 status)
-{
- switch (status) {
- case NVME_SC_CQ_INVALID:
- case NVME_SC_QID_INVALID:
- case NVME_SC_QUEUE_SIZE:
- case NVME_SC_FIRMWARE_SLOT:
- case NVME_SC_FIRMWARE_IMAGE:
- case NVME_SC_INVALID_VECTOR:
- case NVME_SC_INVALID_LOG_PAGE:
- case NVME_SC_INVALID_FORMAT:
- case NVME_SC_INVALID_QUEUE:
- case NVME_SC_NS_INSUFFICIENT_CAP:
- case NVME_SC_NS_ID_UNAVAILABLE:
- case NVME_SC_CTRL_LIST_INVALID:
- case NVME_SC_BAD_ATTRIBUTES:
- case NVME_SC_INVALID_PI:
- case NVME_SC_INVALID_CTRL_ID:
- case NVME_SC_INVALID_SECONDARY_CTRL_STATE:
- case NVME_SC_INVALID_NUM_CTRL_RESOURCE:
- case NVME_SC_INVALID_RESOURCE_ID:
- case NVME_SC_ANA_INVALID_GROUP_ID:
- return EINVAL;
- case NVME_SC_ABORT_LIMIT:
- case NVME_SC_ASYNC_LIMIT:
- return EDQUOT;
- case NVME_SC_FW_NEEDS_CONV_RESET:
- case NVME_SC_FW_NEEDS_SUBSYS_RESET:
- case NVME_SC_FW_NEEDS_MAX_TIME:
- return ERESTART;
- case NVME_SC_FEATURE_NOT_SAVEABLE:
- case NVME_SC_FEATURE_NOT_CHANGEABLE:
- case NVME_SC_FEATURE_NOT_PER_NS:
- case NVME_SC_FW_ACTIVATE_PROHIBITED:
- case NVME_SC_NS_IS_PRIVATE:
- case NVME_SC_BP_WRITE_PROHIBITED:
- case NVME_SC_READ_ONLY:
- case NVME_SC_PMR_SAN_PROHIBITED:
- return EPERM;
- case NVME_SC_OVERLAPPING_RANGE:
- case NVME_SC_NS_NOT_ATTACHED:
- return ENOSPC;
- case NVME_SC_NS_ALREADY_ATTACHED:
- return EALREADY;
- case NVME_SC_THIN_PROV_NOT_SUPP:
- return EOPNOTSUPP;
- case NVME_SC_DEVICE_SELF_TEST_IN_PROGRESS:
- return EINPROGRESS;
- }
-
- return EIO;
-}
-
-static inline __u8 nvme_fabrics_status_to_errno(__u16 status)
-{
- switch (status) {
- case NVME_SC_CONNECT_FORMAT:
- case NVME_SC_CONNECT_INVALID_PARAM:
- return EINVAL;
- case NVME_SC_CONNECT_CTRL_BUSY:
- return EBUSY;
- case NVME_SC_CONNECT_RESTART_DISC:
- return ERESTART;
- case NVME_SC_CONNECT_INVALID_HOST:
- return ECONNREFUSED;
- case NVME_SC_DISCOVERY_RESTART:
- return EAGAIN;
- case NVME_SC_AUTH_REQUIRED:
- return EPERM;
- }
-
- return EIO;
-}
-
-static inline __u8 nvme_path_status_to_errno(__u16 status)
-{
- switch (status) {
- case NVME_SC_INTERNAL_PATH_ERROR:
- case NVME_SC_ANA_PERSISTENT_LOSS:
- case NVME_SC_ANA_INACCESSIBLE:
- case NVME_SC_ANA_TRANSITION:
- case NVME_SC_CTRL_PATHING_ERROR:
- case NVME_SC_HOST_PATHING_ERROR:
- case NVME_SC_HOST_CMD_ABORT:
- return EACCES;
- }
-
- return EIO;
-}
-
-/*
- * nvme_status_to_errno - It converts given status to errno mapped
- * @status: >= 0 for nvme status field in completion queue entry,
- * < 0 for linux internal errors
- * @fabrics: true if given status is for fabrics
- *
- * Notes: This function will convert a given status to an errno mapped
- */
-__u8 nvme_status_to_errno(int status, bool fabrics)
-{
- __u8 sct;
-
- if (!status)
- return 0;
-
- if (status < 0) {
- if (errno)
- return errno;
- return status;
- }
-
- /*
- * The actual status code is enough with masking 0xff, but we need to
- * cover status code type which is 3bits with 0x7ff.
- */
- status &= 0x7ff;
-
- sct = nvme_status_type(status);
- switch (sct) {
- case NVME_SCT_GENERIC:
- return nvme_generic_status_to_errno(status);
- case NVME_SCT_CMD_SPECIFIC:
- if (!fabrics) {
- return nvme_cmd_specific_status_to_errno(status);
- }
- return nvme_fabrics_status_to_errno(status);
- case NVME_SCT_PATH:
- return nvme_path_status_to_errno(status);
- }
-
- /*
- * Media, integrity related status, and the others will be mapped to
- * EIO.
- */
- return EIO;
-}