SCSI Add support for STATUS_BUSY

Add support for BUSY status coide from the target and just pass this
back to the application as is (instead of converting it to _ERROR).

This allows the application to trap task->status==SCSI_STATUS_BUSY and
decide what/how to proceed.
This commit is contained in:
Ronnie Sahlberg
2013-01-01 10:15:56 -08:00
parent d9664cb26a
commit 065319f996
2 changed files with 7 additions and 0 deletions

View File

@@ -264,6 +264,7 @@ EXTERN int iscsi_is_logged_in(struct iscsi_context *iscsi);
enum scsi_status {
SCSI_STATUS_GOOD = 0,
SCSI_STATUS_CHECK_CONDITION = 2,
SCSI_STATUS_BUSY = 8,
SCSI_STATUS_RESERVATION_CONFLICT = 0x18,
SCSI_STATUS_REDIRECT = 0x101,
SCSI_STATUS_CANCELLED = 0x0f000000,

View File

@@ -40,6 +40,7 @@ iscsi_scsi_response_cb(struct iscsi_context *iscsi, int status,
case SCSI_STATUS_RESERVATION_CONFLICT:
case SCSI_STATUS_CHECK_CONDITION:
case SCSI_STATUS_GOOD:
case SCSI_STATUS_BUSY:
case SCSI_STATUS_ERROR:
case SCSI_STATUS_CANCELLED:
scsi_cbdata->callback(iscsi, status, scsi_cbdata->task,
@@ -395,6 +396,11 @@ 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_BUSY:
iscsi_set_error(iscsi, "BUSY");
pdu->callback(iscsi, SCSI_STATUS_BUSY,
task, pdu->private_data);
break;
default:
iscsi_set_error(iscsi, "Unknown SCSI status :%d.", status);