diff --git a/include/iscsi.h b/include/iscsi.h index 0fa7bea..0f0f07a 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -275,8 +275,12 @@ EXTERN int iscsi_is_logged_in(struct iscsi_context *iscsi); enum scsi_status { SCSI_STATUS_GOOD = 0, SCSI_STATUS_CHECK_CONDITION = 2, + SCSI_STATUS_CONDITION_MET = 4, SCSI_STATUS_BUSY = 8, SCSI_STATUS_RESERVATION_CONFLICT = 0x18, + SCSI_STATUS_TASK_SET_FULL = 0x28, + SCSI_STATUS_ACA_ACTIVE = 0x30, + SCSI_STATUS_TASK_ABORTED = 0x40, SCSI_STATUS_REDIRECT = 0x101, SCSI_STATUS_CANCELLED = 0x0f000000, SCSI_STATUS_ERROR = 0x0f000001, diff --git a/lib/iscsi-command.c b/lib/iscsi-command.c index f4d12d5..90d3fdb 100644 --- a/lib/iscsi-command.c +++ b/lib/iscsi-command.c @@ -50,6 +50,10 @@ iscsi_scsi_response_cb(struct iscsi_context *iscsi, int status, case SCSI_STATUS_CHECK_CONDITION: case SCSI_STATUS_GOOD: case SCSI_STATUS_BUSY: + case SCSI_STATUS_CONDITION_MET: + case SCSI_STATUS_TASK_SET_FULL: + case SCSI_STATUS_ACA_ACTIVE: + case SCSI_STATUS_TASK_ABORTED: case SCSI_STATUS_ERROR: case SCSI_STATUS_CANCELLED: scsi_cbdata->callback(iscsi, status, scsi_cbdata->task, @@ -381,6 +385,7 @@ iscsi_process_scsi_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, switch (status) { case SCSI_STATUS_GOOD: + case SCSI_STATUS_CONDITION_MET: task->datain.data = pdu->indata.data; task->datain.size = pdu->indata.size; @@ -448,6 +453,21 @@ iscsi_process_scsi_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, pdu->callback(iscsi, SCSI_STATUS_RESERVATION_CONFLICT, task, pdu->private_data); break; + case SCSI_STATUS_TASK_SET_FULL: + iscsi_set_error(iscsi, "TASK_SET_FULL"); + pdu->callback(iscsi, SCSI_STATUS_TASK_SET_FULL, + task, pdu->private_data); + break; + case SCSI_STATUS_ACA_ACTIVE: + iscsi_set_error(iscsi, "ACA_ACTIVE"); + pdu->callback(iscsi, SCSI_STATUS_ACA_ACTIVE, + task, pdu->private_data); + break; + case SCSI_STATUS_TASK_ABORTED: + iscsi_set_error(iscsi, "TASK_ABORTED"); + pdu->callback(iscsi, SCSI_STATUS_TASK_ABORTED, + task, pdu->private_data); + break; case SCSI_STATUS_BUSY: iscsi_set_error(iscsi, "BUSY"); pdu->callback(iscsi, SCSI_STATUS_BUSY,