Commit a271eac4 authored by Mike Christie's avatar Mike Christie Committed by Nicholas Bellinger

target: return SAM_STAT_TASK_SET_FULL for TCM_OUT_OF_RESOURCES

TCM_OUT_OF_RESOURCES is getting translated to
TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE which seems like a heavy
error when we just cannot allocate a resource that may be
allocatable later. This has us translate TCM_OUT_OF_RESOURCES
to SAM_STAT_TASK_SET_FULL instead.
Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 55435bad
...@@ -1772,8 +1772,8 @@ void transport_generic_request_failure(struct se_cmd *cmd, ...@@ -1772,8 +1772,8 @@ void transport_generic_request_failure(struct se_cmd *cmd,
case TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE: case TCM_UNSUPPORTED_SEGMENT_DESC_TYPE_CODE:
break; break;
case TCM_OUT_OF_RESOURCES: case TCM_OUT_OF_RESOURCES:
sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; cmd->scsi_status = SAM_STAT_TASK_SET_FULL;
break; goto queue_status;
case TCM_RESERVATION_CONFLICT: case TCM_RESERVATION_CONFLICT:
/* /*
* No SENSE Data payload for this case, set SCSI Status * No SENSE Data payload for this case, set SCSI Status
...@@ -1795,11 +1795,8 @@ void transport_generic_request_failure(struct se_cmd *cmd, ...@@ -1795,11 +1795,8 @@ void transport_generic_request_failure(struct se_cmd *cmd,
cmd->orig_fe_lun, 0x2C, cmd->orig_fe_lun, 0x2C,
ASCQ_2CH_PREVIOUS_RESERVATION_CONFLICT_STATUS); ASCQ_2CH_PREVIOUS_RESERVATION_CONFLICT_STATUS);
} }
trace_target_cmd_complete(cmd);
ret = cmd->se_tfo->queue_status(cmd); goto queue_status;
if (ret)
goto queue_full;
goto check_stop;
default: default:
pr_err("Unknown transport error for CDB 0x%02x: %d\n", pr_err("Unknown transport error for CDB 0x%02x: %d\n",
cmd->t_task_cdb[0], sense_reason); cmd->t_task_cdb[0], sense_reason);
...@@ -1816,6 +1813,11 @@ void transport_generic_request_failure(struct se_cmd *cmd, ...@@ -1816,6 +1813,11 @@ void transport_generic_request_failure(struct se_cmd *cmd,
transport_cmd_check_stop_to_fabric(cmd); transport_cmd_check_stop_to_fabric(cmd);
return; return;
queue_status:
trace_target_cmd_complete(cmd);
ret = cmd->se_tfo->queue_status(cmd);
if (!ret)
goto check_stop;
queue_full: queue_full:
transport_handle_queue_full(cmd, cmd->se_dev, ret, false); transport_handle_queue_full(cmd, cmd->se_dev, ret, false);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment