| From 5887c3bb2692b2cfefe822609206034c7587adae Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 23 Dec 2016 11:37:53 +0100 |
| Subject: target: add XCOPY target/segment desc sense codes |
| |
| From: David Disseldorp <ddiss@suse.de> |
| |
| [ Upstream commit e864212078ded276bdb272b2e0ee6a979357ca8a ] |
| |
| As defined in http://www.t10.org/lists/asc-num.htm. To be used during |
| validation of XCOPY target and segment descriptor lists. |
| |
| Signed-off-by: David Disseldorp <ddiss@suse.de> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/target/target_core_transport.c | 24 ++++++++++++++++++++++++ |
| include/target/target_core_base.h | 4 ++++ |
| 2 files changed, 28 insertions(+) |
| |
| diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c |
| index e738b4621cbba..ecd707f74ddcb 100644 |
| --- a/drivers/target/target_core_transport.c |
| +++ b/drivers/target/target_core_transport.c |
| @@ -1736,6 +1736,10 @@ void transport_generic_request_failure(struct se_cmd *cmd, |
| case TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED: |
| case TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED: |
| case TCM_COPY_TARGET_DEVICE_NOT_REACHABLE: |
| + case TCM_TOO_MANY_TARGET_DESCS: |
| + case TCM_UNSUPPORTED_TARGET_DESC_TYPE_CODE: |
| + case TCM_TOO_MANY_SEGMENT_DESCS: |
| + case TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE: |
| break; |
| case TCM_OUT_OF_RESOURCES: |
| sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; |
| @@ -2886,6 +2890,26 @@ static const struct sense_info sense_info_table[] = { |
| .key = ILLEGAL_REQUEST, |
| .asc = 0x26, /* INVALID FIELD IN PARAMETER LIST */ |
| }, |
| + [TCM_TOO_MANY_TARGET_DESCS] = { |
| + .key = ILLEGAL_REQUEST, |
| + .asc = 0x26, |
| + .ascq = 0x06, /* TOO MANY TARGET DESCRIPTORS */ |
| + }, |
| + [TCM_UNSUPPORTED_TARGET_DESC_TYPE_CODE] = { |
| + .key = ILLEGAL_REQUEST, |
| + .asc = 0x26, |
| + .ascq = 0x07, /* UNSUPPORTED TARGET DESCRIPTOR TYPE CODE */ |
| + }, |
| + [TCM_TOO_MANY_SEGMENT_DESCS] = { |
| + .key = ILLEGAL_REQUEST, |
| + .asc = 0x26, |
| + .ascq = 0x08, /* TOO MANY SEGMENT DESCRIPTORS */ |
| + }, |
| + [TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE] = { |
| + .key = ILLEGAL_REQUEST, |
| + .asc = 0x26, |
| + .ascq = 0x09, /* UNSUPPORTED SEGMENT DESCRIPTOR TYPE CODE */ |
| + }, |
| [TCM_PARAMETER_LIST_LENGTH_ERROR] = { |
| .key = ILLEGAL_REQUEST, |
| .asc = 0x1a, /* PARAMETER LIST LENGTH ERROR */ |
| diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h |
| index 30f99ce4c6cea..8a70d38f13329 100644 |
| --- a/include/target/target_core_base.h |
| +++ b/include/target/target_core_base.h |
| @@ -178,6 +178,10 @@ enum tcm_sense_reason_table { |
| TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED = R(0x16), |
| TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED = R(0x17), |
| TCM_COPY_TARGET_DEVICE_NOT_REACHABLE = R(0x18), |
| + TCM_TOO_MANY_TARGET_DESCS = R(0x19), |
| + TCM_UNSUPPORTED_TARGET_DESC_TYPE_CODE = R(0x1a), |
| + TCM_TOO_MANY_SEGMENT_DESCS = R(0x1b), |
| + TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE = R(0x1c), |
| #undef R |
| }; |
| |
| -- |
| 2.27.0 |
| |