diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 4e1c71c..b64e491 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -228,8 +228,6 @@ struct iscsi_pdu { /* There will not be a response to this pdu, so delete it once it is sent on the wire. Don't put it on the wait-queue */ #define ISCSI_PDU_DELETE_WHEN_SENT 0x00000001 -/* Don't call the CANCEL callback when the context is destroyed */ -#define ISCSI_PDU_NO_CALLBACK 0x00000002 /* When reconnecting, just drop all these PDUs. Don't re-queue them. * This includes any DATA-OUT PDU as well as all NOPs. */ diff --git a/lib/connect.c b/lib/connect.c index b7adb25..77b7668 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -270,25 +270,23 @@ void iscsi_defer_reconnect(struct iscsi_context *iscsi) while ((pdu = iscsi->outqueue)) { ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (iscsi->is_loggedin && pdu->callback) { /* If an error happened during connect/login, we don't want to call any of the callbacks. */ - if (iscsi->is_loggedin) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, - NULL, pdu->private_data); - } + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, + NULL, pdu->private_data); } iscsi_free_pdu(iscsi, pdu); } while ((pdu = iscsi->waitpdu)) { ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); - /* If an error happened during connect/login, - we don't want to call any of the callbacks. - */ - if (iscsi->is_loggedin) { + if (iscsi->is_loggedin && pdu->callback) { + /* If an error happened during connect/login, + we don't want to call any of the callbacks. + */ pdu->callback(iscsi, SCSI_STATUS_CANCELLED, - NULL, pdu->private_data); + NULL, pdu->private_data); } iscsi_free_pdu(iscsi, pdu); } diff --git a/lib/init.c b/lib/init.c index 835c218..f06d216 100644 --- a/lib/init.c +++ b/lib/init.c @@ -304,25 +304,23 @@ iscsi_destroy_context(struct iscsi_context *iscsi) while ((pdu = iscsi->outqueue)) { ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (iscsi->is_loggedin && pdu->callback) { /* If an error happened during connect/login, we don't want to call any of the callbacks. */ - if (iscsi->is_loggedin && pdu->callback != NULL) { - pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); - } + pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, + pdu->private_data); } iscsi_free_pdu(iscsi, pdu); } while ((pdu = iscsi->waitpdu)) { ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); - /* If an error happened during connect/login, we don't want to - call any of the callbacks. - */ - if (iscsi->is_loggedin && pdu->callback != NULL) { + if (iscsi->is_loggedin && pdu->callback) { + /* If an error happened during connect/login, we don't want to + call any of the callbacks. + */ pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, - pdu->private_data); + pdu->private_data); } iscsi_free_pdu(iscsi, pdu); } diff --git a/lib/iscsi-command.c b/lib/iscsi-command.c index 838890f..c879ecf 100644 --- a/lib/iscsi-command.c +++ b/lib/iscsi-command.c @@ -86,7 +86,7 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu, ISCSI_PDU_DATA_OUT, ISCSI_PDU_NO_PDU, cmd_pdu->itt, - ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK); + ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT); if (pdu == NULL) { iscsi_set_error(iscsi, "Out-of-memory, Failed to allocate " "scsi data out pdu."); @@ -1891,7 +1891,7 @@ iscsi_scsi_cancel_task(struct iscsi_context *iscsi, for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { if (pdu->itt == task->itt) { ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (pdu->callback) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data); } @@ -1902,7 +1902,7 @@ iscsi_scsi_cancel_task(struct iscsi_context *iscsi, for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { if (pdu->itt == task->itt) { ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (pdu->callback) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data); } @@ -1920,7 +1920,7 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi) while ((pdu = iscsi->waitpdu)) { ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (pdu->callback) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data); } @@ -1928,7 +1928,7 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi) } while ((pdu = iscsi->outqueue)) { ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); - if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { + if (pdu->callback) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data); } diff --git a/lib/nop.c b/lib/nop.c index 4b6d5ab..16ce748 100644 --- a/lib/nop.c +++ b/lib/nop.c @@ -101,7 +101,7 @@ iscsi_send_target_nop_out(struct iscsi_context *iscsi, uint32_t ttt, uint32_t lu ISCSI_PDU_NOP_OUT, ISCSI_PDU_NO_PDU, 0xffffffff, - ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK); + ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT); if (pdu == NULL) { iscsi_set_error(iscsi, "Failed to allocate nop-out pdu"); return -1;