[PATCH] nvme: make nvme error status codes converted to errno detailed
Sagi Grimberg
sagi at grimberg.me
Wed Mar 29 10:39:28 PDT 2017
On 29/03/17 13:08, Guan Junxiong wrote:
> From: Junxiong Guan <guanjunxiong at huawei.com>
>
> For more detailed information about nvme error status when ending
> blk_mq request,some of nvme error status codes can be categorized into
> different errnos explicitly. For example, NVME_SC_ACCESS_DENIED and
> NVME_SC_CONNECT_CTRL_BUSY can be converted to EACCESS and EBUSY repec-
> tively.This patch makes conversion from those nvme error status to errno
> detailed.
This makes sense to me, see comments below.
> ---
> drivers/nvme/host/nvme.h | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
> index a3da1e90b99d..be699ca38cc8 100644
> --- a/drivers/nvme/host/nvme.h
> +++ b/drivers/nvme/host/nvme.h
> @@ -255,7 +255,37 @@ static inline int nvme_error_status(u16 status)
> case NVME_SC_SUCCESS:
> return 0;
> case NVME_SC_CAP_EXCEEDED:
> + case NVME_SC_NS_INSUFFICENT_CAP:
> return -ENOSPC;
why is this ENOSPC?
Maybe we can add also some fabrics status codes?
> + case NVME_SC_READ_ONLY:
> + case NVME_SC_ACCESS_DENIED:
> + return -EACCES;
> + case NVME_SC_LBA_RANGE:
> + return -EFAULT;
> + case NVME_SC_CONNECT_CTRL_BUSY:
case NVME_SC_CONNECT_CTRL_BUSY:
> + return -EBUSY;
> + 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_SGL_INVALID_SUBTYPE:
> + 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_CTRL_LIST_INVALID:
case NVME_SC_BAD_ATTRIBUTES:
case NVME_SC_INVALID_PI:
case NVME_SC_CONNECT_FORMAT:
case NVME_SC_CONNECT_INVALID_PARAM:
case NVME_SC_CONNECT_INVALID_HOST:
> + return -EINVAL;
> + case NVME_SC_CMD_SEQ_ERROR:
> + return -EPROTO;
> default:
> return -EIO;
> }
>
It'll also be useful if we can log the specific error (as a human
readable string).
More information about the Linux-nvme
mailing list