Add RESERVATION CONFLICT

From Richard Sharpe,  add support to handle when a target responds with
RESERVATION CONFLICT to a scsi i/o
This commit is contained in:
Ronnie Sahlberg
2011-04-09 11:59:12 +10:00
parent bceb3d058d
commit cfe19486ee
2 changed files with 13 additions and 9 deletions

View File

@@ -214,10 +214,11 @@ int iscsi_is_logged_in(struct iscsi_context *iscsi);
enum scsi_status {
SCSI_STATUS_GOOD = 0,
SCSI_STATUS_CHECK_CONDITION = 2,
SCSI_STATUS_CANCELLED = 0x0f000000,
SCSI_STATUS_ERROR = 0x0f000001
SCSI_STATUS_GOOD = 0,
SCSI_STATUS_CHECK_CONDITION = 2,
SCSI_STATUS_RESERVATION_CONFLICT = 0x18,
SCSI_STATUS_CANCELLED = 0x0f000000,
SCSI_STATUS_ERROR = 0x0f000001
};

View File

@@ -52,12 +52,10 @@ iscsi_scsi_response_cb(struct iscsi_context *iscsi, int status,
struct scsi_task *task = command_data;
switch (status) {
case SCSI_STATUS_GOOD:
scsi_cbdata->callback(iscsi, SCSI_STATUS_GOOD, task,
scsi_cbdata->private_data);
return;
case SCSI_STATUS_RESERVATION_CONFLICT:
case SCSI_STATUS_CHECK_CONDITION:
scsi_cbdata->callback(iscsi, SCSI_STATUS_CHECK_CONDITION, task,
case SCSI_STATUS_GOOD:
scsi_cbdata->callback(iscsi, status, task,
scsi_cbdata->private_data);
return;
default:
@@ -397,6 +395,11 @@ iscsi_process_scsi_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu,
pdu->callback(iscsi, SCSI_STATUS_CHECK_CONDITION, task,
pdu->private_data);
break;
case SCSI_STATUS_RESERVATION_CONFLICT:
iscsi_set_error(iscsi, "RESERVATION CONFLICT");
pdu->callback(iscsi, SCSI_STATUS_RESERVATION_CONFLICT,
task, pdu->private_data);
break;
default:
iscsi_set_error(iscsi, "Unknown SCSI status :%d.", status);