Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright (C) 2017 Intel Corporation. 3 : : * Copyright (c) 2016 FUJITSU LIMITED, All rights reserved. 4 : : */ 5 : : 6 : : #include "spdk/bdev_module.h" 7 : : 8 : : #include "spdk/nvme_spec.h" 9 : : 10 : : void 11 : 104 : spdk_scsi_nvme_translate(const struct spdk_bdev_io *bdev_io, int *sc, int *sk, 12 : : int *asc, int *ascq) 13 : : { 14 : 104 : int nvme_sct = bdev_io->internal.error.nvme.sct; 15 : 104 : int nvme_sc = bdev_io->internal.error.nvme.sc; 16 : : 17 [ + + + + ]: 104 : switch (nvme_sct) { 18 [ + + + + : 48 : case SPDK_NVME_SCT_GENERIC: + + + + + + + + ] 19 : : switch (nvme_sc) { 20 : 4 : case SPDK_NVME_SC_SUCCESS: 21 : 4 : *sc = SPDK_SCSI_STATUS_GOOD; 22 : 4 : *sk = SPDK_SCSI_SENSE_NO_SENSE; 23 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 24 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 25 : 4 : break; 26 : 4 : case SPDK_NVME_SC_INVALID_OPCODE: 27 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 28 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 29 : 4 : *asc = SPDK_SCSI_ASC_INVALID_COMMAND_OPERATION_CODE; 30 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 31 : 4 : break; 32 : 4 : case SPDK_NVME_SC_INVALID_FIELD: 33 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 34 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 35 : 4 : *asc = SPDK_SCSI_ASC_INVALID_FIELD_IN_CDB; 36 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 37 : 4 : break; 38 : 4 : case SPDK_NVME_SC_DATA_TRANSFER_ERROR: 39 : : case SPDK_NVME_SC_CAPACITY_EXCEEDED: 40 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 41 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 42 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 43 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 44 : 4 : break; 45 : 4 : case SPDK_NVME_SC_ABORTED_POWER_LOSS: 46 : 4 : *sc = SPDK_SCSI_STATUS_TASK_ABORTED; 47 : 4 : *sk = SPDK_SCSI_SENSE_ABORTED_COMMAND; 48 : 4 : *asc = SPDK_SCSI_ASC_WARNING; 49 : 4 : *ascq = SPDK_SCSI_ASCQ_POWER_LOSS_EXPECTED; 50 : 4 : break; 51 : 4 : case SPDK_NVME_SC_INTERNAL_DEVICE_ERROR: 52 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 53 : 4 : *sk = SPDK_SCSI_SENSE_HARDWARE_ERROR; 54 : 4 : *asc = SPDK_SCSI_ASC_INTERNAL_TARGET_FAILURE; 55 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 56 : 4 : break; 57 : 4 : case SPDK_NVME_SC_ABORTED_BY_REQUEST: 58 : : case SPDK_NVME_SC_ABORTED_SQ_DELETION: 59 : : case SPDK_NVME_SC_ABORTED_FAILED_FUSED: 60 : : case SPDK_NVME_SC_ABORTED_MISSING_FUSED: 61 : 4 : *sc = SPDK_SCSI_STATUS_TASK_ABORTED; 62 : 4 : *sk = SPDK_SCSI_SENSE_ABORTED_COMMAND; 63 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 64 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 65 : 4 : break; 66 : 4 : case SPDK_NVME_SC_INVALID_NAMESPACE_OR_FORMAT: 67 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 68 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 69 : 4 : *asc = SPDK_SCSI_ASC_ACCESS_DENIED; 70 : 4 : *ascq = SPDK_SCSI_ASCQ_INVALID_LU_IDENTIFIER; 71 : 4 : break; 72 : 4 : case SPDK_NVME_SC_LBA_OUT_OF_RANGE: 73 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 74 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 75 : 4 : *asc = SPDK_SCSI_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 76 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 77 : 4 : break; 78 : 4 : case SPDK_NVME_SC_NAMESPACE_NOT_READY: 79 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 80 : 4 : *sk = SPDK_SCSI_SENSE_NOT_READY; 81 : 4 : *asc = SPDK_SCSI_ASC_LOGICAL_UNIT_NOT_READY; 82 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 83 : 4 : break; 84 : 4 : case SPDK_NVME_SC_RESERVATION_CONFLICT: 85 : 4 : *sc = SPDK_SCSI_STATUS_RESERVATION_CONFLICT; 86 : 4 : *sk = SPDK_SCSI_SENSE_NO_SENSE; 87 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 88 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 89 : 4 : break; 90 : 4 : case SPDK_NVME_SC_COMMAND_ID_CONFLICT: 91 : : case SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR: 92 : : case SPDK_NVME_SC_INVALID_SGL_SEG_DESCRIPTOR: 93 : : case SPDK_NVME_SC_INVALID_NUM_SGL_DESCIRPTORS: 94 : : case SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID: 95 : : case SPDK_NVME_SC_METADATA_SGL_LENGTH_INVALID: 96 : : case SPDK_NVME_SC_SGL_DESCRIPTOR_TYPE_INVALID: 97 : : case SPDK_NVME_SC_INVALID_CONTROLLER_MEM_BUF: 98 : : case SPDK_NVME_SC_INVALID_PRP_OFFSET: 99 : : case SPDK_NVME_SC_ATOMIC_WRITE_UNIT_EXCEEDED: 100 : : case SPDK_NVME_SC_INVALID_SGL_OFFSET: 101 : : case SPDK_NVME_SC_HOSTID_INCONSISTENT_FORMAT: 102 : : case SPDK_NVME_SC_KEEP_ALIVE_EXPIRED: 103 : : case SPDK_NVME_SC_KEEP_ALIVE_INVALID: 104 : : case SPDK_NVME_SC_FORMAT_IN_PROGRESS: 105 : : default: 106 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 107 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 108 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 109 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 110 : 4 : break; 111 : : } 112 : 48 : break; 113 [ + + + + : 20 : case SPDK_NVME_SCT_COMMAND_SPECIFIC: + ] 114 : : switch (nvme_sc) { 115 : 4 : case SPDK_NVME_SC_COMPLETION_QUEUE_INVALID: 116 : : case SPDK_NVME_SC_ABORT_COMMAND_LIMIT_EXCEEDED: 117 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 118 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 119 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 120 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 121 : 4 : break; 122 : 4 : case SPDK_NVME_SC_INVALID_FORMAT: 123 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 124 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 125 : 4 : *asc = SPDK_SCSI_ASC_FORMAT_COMMAND_FAILED; 126 : 4 : *ascq = SPDK_SCSI_ASCQ_FORMAT_COMMAND_FAILED; 127 : 4 : break; 128 : 4 : case SPDK_NVME_SC_CONFLICTING_ATTRIBUTES: 129 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 130 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 131 : 4 : *asc = SPDK_SCSI_ASC_INVALID_FIELD_IN_CDB; 132 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 133 : 4 : break; 134 : 4 : case SPDK_NVME_SC_ATTEMPTED_WRITE_TO_RO_RANGE: 135 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 136 : 4 : *sk = SPDK_SCSI_SENSE_DATA_PROTECT; 137 : 4 : *asc = SPDK_SCSI_ASC_WRITE_PROTECTED; 138 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 139 : 4 : break; 140 : 4 : case SPDK_NVME_SC_INVALID_QUEUE_IDENTIFIER: 141 : : case SPDK_NVME_SC_INVALID_QUEUE_SIZE: 142 : : case SPDK_NVME_SC_ASYNC_EVENT_REQUEST_LIMIT_EXCEEDED: 143 : : case SPDK_NVME_SC_INVALID_FIRMWARE_SLOT: 144 : : case SPDK_NVME_SC_INVALID_FIRMWARE_IMAGE: 145 : : case SPDK_NVME_SC_INVALID_INTERRUPT_VECTOR: 146 : : case SPDK_NVME_SC_INVALID_LOG_PAGE: 147 : : case SPDK_NVME_SC_FIRMWARE_REQ_CONVENTIONAL_RESET: 148 : : case SPDK_NVME_SC_INVALID_QUEUE_DELETION: 149 : : case SPDK_NVME_SC_FEATURE_ID_NOT_SAVEABLE: 150 : : case SPDK_NVME_SC_FEATURE_NOT_CHANGEABLE: 151 : : case SPDK_NVME_SC_FEATURE_NOT_NAMESPACE_SPECIFIC: 152 : : case SPDK_NVME_SC_FIRMWARE_REQ_NVM_RESET: 153 : : case SPDK_NVME_SC_FIRMWARE_REQ_RESET: 154 : : case SPDK_NVME_SC_FIRMWARE_REQ_MAX_TIME_VIOLATION: 155 : : case SPDK_NVME_SC_FIRMWARE_ACTIVATION_PROHIBITED: 156 : : case SPDK_NVME_SC_OVERLAPPING_RANGE: 157 : : case SPDK_NVME_SC_NAMESPACE_INSUFFICIENT_CAPACITY: 158 : : case SPDK_NVME_SC_NAMESPACE_ID_UNAVAILABLE: 159 : : case SPDK_NVME_SC_NAMESPACE_ALREADY_ATTACHED: 160 : : case SPDK_NVME_SC_NAMESPACE_IS_PRIVATE: 161 : : case SPDK_NVME_SC_NAMESPACE_NOT_ATTACHED: 162 : : case SPDK_NVME_SC_THINPROVISIONING_NOT_SUPPORTED: 163 : : case SPDK_NVME_SC_CONTROLLER_LIST_INVALID: 164 : : case SPDK_NVME_SC_INVALID_PROTECTION_INFO: 165 : : default: 166 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 167 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 168 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 169 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 170 : 4 : break; 171 : : } 172 : 20 : break; 173 [ + + + + : 32 : case SPDK_NVME_SCT_MEDIA_ERROR: + + + + ] 174 : : switch (nvme_sc) { 175 : 4 : case SPDK_NVME_SC_WRITE_FAULTS: 176 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 177 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 178 : 4 : *asc = SPDK_SCSI_ASC_PERIPHERAL_DEVICE_WRITE_FAULT; 179 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 180 : 4 : break; 181 : 4 : case SPDK_NVME_SC_UNRECOVERED_READ_ERROR: 182 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 183 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 184 : 4 : *asc = SPDK_SCSI_ASC_UNRECOVERED_READ_ERROR; 185 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 186 : 4 : break; 187 : 4 : case SPDK_NVME_SC_GUARD_CHECK_ERROR: 188 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 189 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 190 : 4 : *asc = SPDK_SCSI_ASC_LOGICAL_BLOCK_GUARD_CHECK_FAILED; 191 : 4 : *ascq = SPDK_SCSI_ASCQ_LOGICAL_BLOCK_GUARD_CHECK_FAILED; 192 : 4 : break; 193 : 4 : case SPDK_NVME_SC_APPLICATION_TAG_CHECK_ERROR: 194 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 195 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 196 : 4 : *asc = SPDK_SCSI_ASC_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED; 197 : 4 : *ascq = SPDK_SCSI_ASCQ_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED; 198 : 4 : break; 199 : 4 : case SPDK_NVME_SC_REFERENCE_TAG_CHECK_ERROR: 200 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 201 : 4 : *sk = SPDK_SCSI_SENSE_MEDIUM_ERROR; 202 : 4 : *asc = SPDK_SCSI_ASC_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED; 203 : 4 : *ascq = SPDK_SCSI_ASCQ_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED; 204 : 4 : break; 205 : 4 : case SPDK_NVME_SC_COMPARE_FAILURE: 206 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 207 : 4 : *sk = SPDK_SCSI_SENSE_MISCOMPARE; 208 : 4 : *asc = SPDK_SCSI_ASC_MISCOMPARE_DURING_VERIFY_OPERATION; 209 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 210 : 4 : break; 211 : 4 : case SPDK_NVME_SC_ACCESS_DENIED: 212 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 213 : 4 : *sk = SPDK_SCSI_SENSE_DATA_PROTECT; 214 : 4 : *asc = SPDK_SCSI_ASC_ACCESS_DENIED; 215 : 4 : *ascq = SPDK_SCSI_ASCQ_NO_ACCESS_RIGHTS; 216 : 4 : break; 217 : 4 : case SPDK_NVME_SC_DEALLOCATED_OR_UNWRITTEN_BLOCK: 218 : : default: 219 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 220 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 221 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 222 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 223 : 4 : break; 224 : : } 225 : 32 : break; 226 : 4 : case SPDK_NVME_SCT_VENDOR_SPECIFIC: 227 : : default: 228 : 4 : *sc = SPDK_SCSI_STATUS_CHECK_CONDITION; 229 : 4 : *sk = SPDK_SCSI_SENSE_ILLEGAL_REQUEST; 230 : 4 : *asc = SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE; 231 : 4 : *ascq = SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE; 232 : 4 : break; 233 : : } 234 : 104 : }